From 9704cf012efcf71e70c4f1179f9336110c981fe9 Mon Sep 17 00:00:00 2001 From: silas Date: Thu, 10 Jun 2021 10:32:06 +0200 Subject: [PATCH] new version --- config.xml | 5 +- package.json | 4 +- src/client/html/sites/level.html | 4 +- src/client/index.html | 2 +- src/client/js/Sites/LevelSite.ts | 8 +- src/client/sass/_animations.scss | 13 +- src/client/sass/_themeBlue.scss | 14 +- src/client/sass/wordRotator.scss | 22 + src/server/public/bundle.js | 6917 ++++++++++------- src/server/public/bundle.js.map | 2 +- src/server/public/config.xml | 4 +- .../public/html/imageSelectionElement.html | 1 + src/server/public/html/level.html | 2 +- src/server/public/index.css | 5 +- src/server/public/index.html | 2 +- src/server/public/manifest.json | 4 +- src/server/public/wordRotator.apk | Bin 5608596 -> 5625424 bytes tests/wdio.config.browser.js | 2 +- 18 files changed, 4064 insertions(+), 2947 deletions(-) create mode 100644 src/server/public/html/imageSelectionElement.html diff --git a/config.xml b/config.xml index e368c04..9d0247a 100644 --- a/config.xml +++ b/config.xml @@ -1,6 +1,6 @@ - - WordRotator + + WordRotator - Test A word-game @@ -21,6 +21,7 @@ + diff --git a/package.json b/package.json index 5d4bc43..011fc40 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "run browser": "cordova run browser", "prepare browser": "cordova prepare browser", "run android": "cordova run android --device", - "release android": "cordova build android --release", + "release android": "cordova build android --release --packageType=bundle", "appium": "appium", "appium-doctor": "appium-doctor", "test browser": "wdio tests/wdio.config.browser.js", @@ -107,4 +107,4 @@ "android >= 4.4", "ios >= 7" ] -} \ No newline at end of file +} diff --git a/src/client/html/sites/level.html b/src/client/html/sites/level.html index 68c0aea..afa23cb 100644 --- a/src/client/html/sites/level.html +++ b/src/client/html/sites/level.html @@ -30,7 +30,7 @@ -
+
@@ -51,4 +51,4 @@
-
\ No newline at end of file +
diff --git a/src/client/index.html b/src/client/index.html index 3134a46..9d06d78 100644 --- a/src/client/index.html +++ b/src/client/index.html @@ -12,7 +12,7 @@ content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' * data: cdvfile: content:; - script-src 'self' data: 'unsafe-eval'" ;> + script-src 'self' data: 'unsafe-eval'"> diff --git a/src/client/js/Sites/LevelSite.ts b/src/client/js/Sites/LevelSite.ts index c81058a..2ed42b1 100644 --- a/src/client/js/Sites/LevelSite.ts +++ b/src/client/js/Sites/LevelSite.ts @@ -133,7 +133,7 @@ export class LevelSite extends MenuSite { let scaleHelper = new ScaleHelper(); this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2); - this.wonTextScaler = await scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5); + this.wonTextScaler = await scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5); this.wonText = wonText; this.wonText.style.fontSize = "0"; @@ -216,6 +216,8 @@ export class LevelSite extends MenuSite { this.showLoadingSymbol(); try { let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES); + // let levelData = await LevelData.findById(34); + // this.level = null; if (Helper.isNull(levelData)) { this.startEndSite(); @@ -375,6 +377,10 @@ export class LevelSite extends MenuSite { this.continueButtonScaler(); this.levelScaler(); + // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => { + // this.levelScaler(); + // }); + Matomo.push(["trackEvent", "LevelSite", "LevelWon", "Coins", parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0"))]); let leafs = level.getLeafSegments(); diff --git a/src/client/sass/_animations.scss b/src/client/sass/_animations.scss index 63ba424..bc29d86 100644 --- a/src/client/sass/_animations.scss +++ b/src/client/sass/_animations.scss @@ -12,10 +12,13 @@ } .jump-animation { - animation-name: jump-animation; - animation-duration: 0.4s; - animation-fill-mode: none; - animation-timing-function: linear; + //> .leaf-element { + animation-name: jump-animation; + animation-duration: 0.4s; + animation-fill-mode: none; + animation-timing-function: linear; + animation-delay: inherit; + //} } $deg: 10deg; @@ -42,4 +45,4 @@ $deg: 10deg; /* When the animation is finished, start again */ animation-iteration-count: infinite; -} \ No newline at end of file +} diff --git a/src/client/sass/_themeBlue.scss b/src/client/sass/_themeBlue.scss index f9356e2..022b927 100644 --- a/src/client/sass/_themeBlue.scss +++ b/src/client/sass/_themeBlue.scss @@ -13,6 +13,9 @@ $accentColor: #d3e7eb; $textColor: white; $svgColor: black; +$secondaryBackgroundColor: rgba(66, 112, 129, 1); +$secondaryBackgroundColor: rgba(66, 112, 129, 0.95); + // Blau Invers //$primaryColor: #4d575a; //$secondaryColor: #427081; @@ -49,7 +52,16 @@ $svgColor: black; //$svgColor: white; body.theme-blue{ - background: $primaryColor; + background: repeating-linear-gradient( + 300deg, + $primaryColor, + $primaryColor 9%, + $secondaryBackgroundColor 13.5%, + $secondaryBackgroundColor 21.5%, + $primaryColor 26%, + ); + + //background: $primaryColor; color: $textColor; label{ diff --git a/src/client/sass/wordRotator.scss b/src/client/sass/wordRotator.scss index 7ed930c..0019318 100644 --- a/src/client/sass/wordRotator.scss +++ b/src/client/sass/wordRotator.scss @@ -401,6 +401,28 @@ $coinTowerDimension: 28px; text-shadow: $text-shadow; } + + .segment:not(.segment-row):not(.segment-triangle):not(.rotating) { + @for $i from 1 through length($rotationDegrees) { + &.rotate-#{nth($rotationDegrees, $i)} { + //transform: rotate(#{nth($rotationDegrees, $i)}deg); + transform: none; + > .child-container { + > .segment { + //transform: rotate(#{360- nth($rotationDegrees, $i)}deg); + transform: none; + + @for $j from 1 through length($rotationDegrees) { + &.rotate-#{nth($rotationDegrees, $j)} { + transform: none; + } + } + } + } + } + } + } + } .text-right { diff --git a/src/server/public/bundle.js b/src/server/public/bundle.js index c28426f..3eab38d 100644 --- a/src/server/public/bundle.js +++ b/src/server/public/bundle.js @@ -81,7 +81,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 288); +/******/ return __webpack_require__(__webpack_require__.s = 289); /******/ }) /************************************************************************/ /******/ ([ @@ -550,7 +550,7 @@ var global = __webpack_require__(11); var core = __webpack_require__(26); var hide = __webpack_require__(52); var redefine = __webpack_require__(45); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { @@ -629,35 +629,35 @@ __exportStar(__webpack_require__(79), exports); __exportStar(__webpack_require__(146), exports); -__exportStar(__webpack_require__(496), exports); +__exportStar(__webpack_require__(497), exports); __exportStar(__webpack_require__(111), exports); -__exportStar(__webpack_require__(498), exports); +__exportStar(__webpack_require__(499), exports); __exportStar(__webpack_require__(258), exports); -__exportStar(__webpack_require__(499), exports); +__exportStar(__webpack_require__(500), exports); -__exportStar(__webpack_require__(501), exports); +__exportStar(__webpack_require__(502), exports); -__exportStar(__webpack_require__(503), exports); - -__exportStar(__webpack_require__(505), exports); - -__exportStar(__webpack_require__(200), exports); +__exportStar(__webpack_require__(504), exports); __exportStar(__webpack_require__(506), exports); +__exportStar(__webpack_require__(199), exports); + +__exportStar(__webpack_require__(507), exports); + __exportStar(__webpack_require__(80), exports); -__exportStar(__webpack_require__(98), exports); +__exportStar(__webpack_require__(99), exports); -__exportStar(__webpack_require__(508), exports); +__exportStar(__webpack_require__(509), exports); -__exportStar(__webpack_require__(160), exports); +__exportStar(__webpack_require__(161), exports); -__exportStar(__webpack_require__(201), exports); +__exportStar(__webpack_require__(200), exports); __exportStar(__webpack_require__(260), exports); @@ -671,61 +671,63 @@ __exportStar(__webpack_require__(252), exports); __exportStar(__webpack_require__(263), exports); -__exportStar(__webpack_require__(511), exports); +__exportStar(__webpack_require__(512), exports); -__exportStar(__webpack_require__(199), exports); +__exportStar(__webpack_require__(198), exports); __exportStar(__webpack_require__(254), exports); -__exportStar(__webpack_require__(68), exports); - -__exportStar(__webpack_require__(513), exports); +__exportStar(__webpack_require__(59), exports); __exportStar(__webpack_require__(514), exports); __exportStar(__webpack_require__(515), exports); +__exportStar(__webpack_require__(516), exports); + __exportStar(__webpack_require__(84), exports); __exportStar(__webpack_require__(265), exports); -__exportStar(__webpack_require__(516), exports); - -__exportStar(__webpack_require__(161), exports); - -__exportStar(__webpack_require__(255), exports); - -__exportStar(__webpack_require__(198), exports); - -__exportStar(__webpack_require__(15), exports); - -__exportStar(__webpack_require__(55), exports); - __exportStar(__webpack_require__(517), exports); -__exportStar(__webpack_require__(42), exports); - __exportStar(__webpack_require__(518), exports); __exportStar(__webpack_require__(266), exports); -__exportStar(__webpack_require__(208), exports); +__exportStar(__webpack_require__(255), exports); -__exportStar(__webpack_require__(257), exports); +__exportStar(__webpack_require__(197), exports); + +__exportStar(__webpack_require__(15), exports); + +__exportStar(__webpack_require__(56), exports); + +__exportStar(__webpack_require__(520), exports); + +__exportStar(__webpack_require__(42), exports); + +__exportStar(__webpack_require__(521), exports); __exportStar(__webpack_require__(267), exports); -__exportStar(__webpack_require__(17), exports); +__exportStar(__webpack_require__(207), exports); -__exportStar(__webpack_require__(101), exports); +__exportStar(__webpack_require__(257), exports); + +__exportStar(__webpack_require__(268), exports); + +__exportStar(__webpack_require__(18), exports); + +__exportStar(__webpack_require__(85), exports); __exportStar(__webpack_require__(259), exports); -__exportStar(__webpack_require__(32), exports); +__exportStar(__webpack_require__(30), exports); -__exportStar(__webpack_require__(58), exports); +__exportStar(__webpack_require__(54), exports); -__exportStar(__webpack_require__(268), exports); +__exportStar(__webpack_require__(269), exports); /***/ }), /* 5 */ @@ -737,9 +739,9 @@ __exportStar(__webpack_require__(268), exports); /* harmony import */ var _TableIndex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38); /* harmony import */ var _TableForeignKey__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(48); /* harmony import */ var _util_TableUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(121); -/* harmony import */ var _TableUnique__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30); +/* harmony import */ var _TableUnique__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31); /* harmony import */ var _TableCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43); -/* harmony import */ var _TableExclusion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(59); +/* harmony import */ var _TableExclusion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60); @@ -1264,7 +1266,7 @@ var OrmUtils = /** @class */ (function () { //# sourceMappingURL=OrmUtils.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), /* 7 */ @@ -1862,11 +1864,11 @@ var Writable = /** @class */ (function () { }()); if (typeof window !== "undefined") { - window.Buffer = __webpack_require__(97).Buffer; + window.Buffer = __webpack_require__(98).Buffer; } // NativeScript uses global, not window if (typeof global !== "undefined") { - global.Buffer = __webpack_require__(97).Buffer; + global.Buffer = __webpack_require__(98).Buffer; } //# sourceMappingURL=BrowserPlatformTools.js.map @@ -1973,7 +1975,7 @@ exports.Helper = void 0; * Eine Klasse mit häufig genutzten, nützlichen Funktionen */ -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var Helper = /*#__PURE__*/function () { function Helper() { @@ -2461,7 +2463,7 @@ __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding * var tslib_es6 = __webpack_require__(0); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/DateUtils.js -var DateUtils = __webpack_require__(21); +var DateUtils = __webpack_require__(22); // EXTERNAL MODULE: ./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js var BrowserDisabledDriversDummy = __webpack_require__(1); @@ -2482,16 +2484,16 @@ var TableIndex = __webpack_require__(38); var TableUtils = __webpack_require__(121); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableUnique.js -var TableUnique = __webpack_require__(30); +var TableUnique = __webpack_require__(31); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableCheck.js var TableCheck = __webpack_require__(43); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js -var TableExclusion = __webpack_require__(59); +var TableExclusion = __webpack_require__(60); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/view/View.js -var View = __webpack_require__(56); +var View = __webpack_require__(57); // CONCATENATED MODULE: ./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js @@ -4235,7 +4237,7 @@ function foreignKeysMatch(tableForeignKey, metadataForeignKey) { var OrmUtils = __webpack_require__(6); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/ApplyValueTransformers.js -var ApplyValueTransformers = __webpack_require__(60); +var ApplyValueTransformers = __webpack_require__(61); // CONCATENATED MODULE: ./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js @@ -4780,6 +4782,34 @@ var AbstractSqliteDriver_AbstractSqliteDriver = /** @class */ (function () { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(__webpack_require__(476), exports); +__exportStar(__webpack_require__(477), exports); +__exportStar(__webpack_require__(7), exports); +__exportStar(__webpack_require__(192), exports); +__exportStar(__webpack_require__(478), exports); +__exportStar(__webpack_require__(489), exports); +__exportStar(__webpack_require__(490), exports); +__exportStar(__webpack_require__(491), exports); +__exportStar(__webpack_require__(251), exports); +//# sourceMappingURL=shared.js.map + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } @@ -4826,13 +4856,13 @@ Object.defineProperty(exports, "__esModule", { }); exports.SoundManager = void 0; -var AudioChain_1 = __webpack_require__(267); +var AudioChain_1 = __webpack_require__(268); var Helper_1 = __webpack_require__(7); var App_1 = __webpack_require__(33); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var SoundManager = /*#__PURE__*/function () { function SoundManager() { @@ -5108,11 +5138,11 @@ App_1.App.addInitialization(function (app) {// PauseSite.onPauseListeners.push(( // }); /***/ }), -/* 18 */ +/* 19 */ /***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(134)('wks'); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); var Symbol = __webpack_require__(11).Symbol; var USE_SYMBOL = typeof Symbol == 'function'; @@ -5125,7 +5155,7 @@ $exports.store = store; /***/ }), -/* 19 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5141,14 +5171,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(147)); +__export(__webpack_require__(148)); -__export(__webpack_require__(209)); +__export(__webpack_require__(208)); -__export(__webpack_require__(19)); +__export(__webpack_require__(20)); /***/ }), -/* 20 */ +/* 21 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -5340,7 +5370,7 @@ var DriverUtils = /** @class */ (function () { /***/ }), -/* 21 */ +/* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -5539,40 +5569,12 @@ var DateUtils = /** @class */ (function () { //# sourceMappingURL=DateUtils.js.map -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(475), exports); -__exportStar(__webpack_require__(476), exports); -__exportStar(__webpack_require__(7), exports); -__exportStar(__webpack_require__(192), exports); -__exportStar(__webpack_require__(477), exports); -__exportStar(__webpack_require__(488), exports); -__exportStar(__webpack_require__(489), exports); -__exportStar(__webpack_require__(490), exports); -__exportStar(__webpack_require__(251), exports); -//# sourceMappingURL=shared.js.map - /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 @@ -5853,556 +5855,6 @@ exports.f = __webpack_require__(28) ? Object.defineProperty : function definePro /***/ }), /* 30 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableUnique; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); - -/** - * Database's table unique constraint stored in this class. - */ -var TableUnique = /** @class */ (function () { - // ------------------------------------------------------------------------- - // Constructor - // ------------------------------------------------------------------------- - function TableUnique(options) { - /** - * Columns that contains this constraint. - */ - this.columnNames = []; - this.name = options.name; - this.columnNames = options.columnNames; - } - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - /** - * Creates a new copy of this constraint with exactly same properties. - */ - TableUnique.prototype.clone = function () { - return new TableUnique({ - name: this.name, - columnNames: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.columnNames)) - }); - }; - // ------------------------------------------------------------------------- - // Static Methods - // ------------------------------------------------------------------------- - /** - * Creates unique from the unique metadata object. - */ - TableUnique.create = function (uniqueMetadata) { - return new TableUnique({ - name: uniqueMetadata.name, - columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; }) - }); - }; - return TableUnique; -}()); - - -//# sourceMappingURL=TableUnique.js.map - - -/***/ }), -/* 31 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ColumnMetadata; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); -/* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); -/* harmony import */ var _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1); -/* harmony import */ var _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); -/* harmony import */ var _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60); - - - - - -/** - * This metadata contains all information about entity's column. - */ -var ColumnMetadata = /** @class */ (function () { - // --------------------------------------------------------------------- - // Constructor - // --------------------------------------------------------------------- - function ColumnMetadata(options) { - /** - * Type's length in the database. - */ - this.length = ""; - /** - * Indicates if this column is a primary key. - */ - this.isPrimary = false; - /** - * Indicates if this column is generated (auto increment or generated other way). - */ - this.isGenerated = false; - /** - * Indicates if column can contain nulls or not. - */ - this.isNullable = false; - /** - * Indicates if column is selected by query builder or not. - */ - this.isSelect = true; - /** - * Indicates if column is inserted by default or not. - */ - this.isInsert = true; - /** - * Indicates if column allows updates or not. - */ - this.isUpdate = true; - /** - * Puts ZEROFILL attribute on to numeric column. Works only for MySQL. - * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column - */ - this.zerofill = false; - /** - * Puts UNSIGNED attribute on to numeric column. Works only for MySQL. - */ - this.unsigned = false; - /** - * Indicates if this column is an array. - */ - this.isArray = false; - /** - * Indicates if column is virtual. Virtual columns are not mapped to the entity. - */ - this.isVirtual = false; - /** - * Indicates if column is discriminator. Discriminator columns are not mapped to the entity. - */ - this.isDiscriminator = false; - /** - * Indicates if column is tree-level column. Tree-level columns are used in closure entities. - */ - this.isTreeLevel = false; - /** - * Indicates if this column contains an entity creation date. - */ - this.isCreateDate = false; - /** - * Indicates if this column contains an entity update date. - */ - this.isUpdateDate = false; - /** - * Indicates if this column contains an entity delete date. - */ - this.isDeleteDate = false; - /** - * Indicates if this column contains an entity version. - */ - this.isVersion = false; - /** - * Indicates if this column contains an object id. - */ - this.isObjectId = false; - /** - * Indicates if this column is nested set's left column. - * Used only in tree entities with nested-set type. - */ - this.isNestedSetLeft = false; - /** - * Indicates if this column is nested set's right column. - * Used only in tree entities with nested-set type. - */ - this.isNestedSetRight = false; - /** - * Indicates if this column is materialized path's path column. - * Used only in tree entities with materialized path type. - */ - this.isMaterializedPath = false; - this.entityMetadata = options.entityMetadata; - this.embeddedMetadata = options.embeddedMetadata; - this.referencedColumn = options.referencedColumn; - if (options.args.target) - this.target = options.args.target; - if (options.args.propertyName) - this.propertyName = options.args.propertyName; - if (options.args.options.name) - this.givenDatabaseName = options.args.options.name; - if (options.args.options.type) - this.type = options.args.options.type; - if (options.args.options.length) - this.length = options.args.options.length ? options.args.options.length.toString() : ""; - if (options.args.options.width) - this.width = options.args.options.width; - if (options.args.options.charset) - this.charset = options.args.options.charset; - if (options.args.options.collation) - this.collation = options.args.options.collation; - if (options.args.options.primary) - this.isPrimary = options.args.options.primary; - if (options.args.options.default === null) // to make sure default: null is the same as nullable: true - this.isNullable = true; - if (options.args.options.nullable !== undefined) - this.isNullable = options.args.options.nullable; - if (options.args.options.select !== undefined) - this.isSelect = options.args.options.select; - if (options.args.options.insert !== undefined) - this.isInsert = options.args.options.insert; - if (options.args.options.update !== undefined) - this.isUpdate = options.args.options.update; - if (options.args.options.readonly !== undefined) - this.isUpdate = !options.args.options.readonly; - if (options.args.options.comment) - this.comment = options.args.options.comment; - if (options.args.options.default !== undefined) - this.default = options.args.options.default; - if (options.args.options.onUpdate) - this.onUpdate = options.args.options.onUpdate; - if (options.args.options.scale !== null && options.args.options.scale !== undefined) - this.scale = options.args.options.scale; - if (options.args.options.zerofill) { - this.zerofill = options.args.options.zerofill; - this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column - } - if (options.args.options.unsigned) - this.unsigned = options.args.options.unsigned; - if (options.args.options.precision !== undefined) - this.precision = options.args.options.precision; - if (options.args.options.enum) { - if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) { - this.enum = Object.keys(options.args.options.enum) - .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them - .map(function (key) { return options.args.options.enum[key]; }); - } - else { - this.enum = options.args.options.enum; - } - } - if (options.args.options.enumName) { - this.enumName = options.args.options.enumName; - } - if (options.args.options.asExpression) { - this.asExpression = options.args.options.asExpression; - this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : "VIRTUAL"; - } - if (options.args.options.hstoreType) - this.hstoreType = options.args.options.hstoreType; - if (options.args.options.array) - this.isArray = options.args.options.array; - if (options.args.mode) { - this.isVirtual = options.args.mode === "virtual"; - this.isTreeLevel = options.args.mode === "treeLevel"; - this.isCreateDate = options.args.mode === "createDate"; - this.isUpdateDate = options.args.mode === "updateDate"; - this.isDeleteDate = options.args.mode === "deleteDate"; - this.isVersion = options.args.mode === "version"; - this.isObjectId = options.args.mode === "objectId"; - } - if (options.args.options.transformer) - this.transformer = options.args.options.transformer; - if (options.args.options.spatialFeatureType) - this.spatialFeatureType = options.args.options.spatialFeatureType; - if (options.args.options.srid !== undefined) - this.srid = options.args.options.srid; - if (this.isTreeLevel) - this.type = options.connection.driver.mappedDataTypes.treeLevel; - if (this.isCreateDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.createDate; - if (!this.default) - this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; }; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.createDatePrecision; - } - if (this.isUpdateDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.updateDate; - if (!this.default) - this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; }; - if (!this.onUpdate) - this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision; - } - if (this.isDeleteDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.deleteDate; - if (!this.isNullable) - this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision; - } - if (this.isVersion) - this.type = options.connection.driver.mappedDataTypes.version; - if (options.closureType) - this.closureType = options.closureType; - if (options.nestedSetLeft) - this.isNestedSetLeft = options.nestedSetLeft; - if (options.nestedSetRight) - this.isNestedSetRight = options.nestedSetRight; - if (options.materializedPath) - this.isMaterializedPath = options.materializedPath; - } - // --------------------------------------------------------------------- - // Public Methods - // --------------------------------------------------------------------- - /** - * Creates entity id map from the given entity ids array. - */ - ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) { - var _a; - var _this = this; - if (useDatabaseName === void 0) { useDatabaseName = false; } - // extract column value from embeds of entity if column is in embedded - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object and return it in a - // { data: { information: { counters: { id: ... } } } } format - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // now need to access post[data][information][counters] to get column value from the counters - // and on each step we need to create complex literal object, e.g. first { data }, - // then { data: { information } }, then { data: { information: { counters } } }, - // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } - // this recursive function helps doing that - var extractEmbeddedColumnValue_1 = function (propertyNames, map) { - var propertyName = propertyNames.shift(); - if (propertyName) { - map[propertyName] = {}; - extractEmbeddedColumnValue_1(propertyNames, map[propertyName]); - return map; - } - // this is bugfix for #720 when increment number is bigint we need to make sure its a string - if ((_this.generationStrategy === "increment" || _this.generationStrategy === "rowid") && _this.type === "bigint" && value !== null) - value = String(value); - map[useDatabaseName ? _this.databaseName : _this.propertyName] = value; - return map; - }; - return extractEmbeddedColumnValue_1(propertyNames, {}); - } - else { // no embeds - no problems. Simply return column property name and its value of the entity - // this is bugfix for #720 when increment number is bigint we need to make sure its a string - if ((this.generationStrategy === "increment" || this.generationStrategy === "rowid") && this.type === "bigint" && value !== null) - value = String(value); - return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a; - } - }; - /** - * Extracts column value and returns its column name with this value in a literal object. - * If column is in embedded (or recursive embedded) it returns complex literal object. - * - * Examples what this method can return depend if this column is in embeds. - * { id: 1 } or { title: "hello" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } } - */ - ColumnMetadata.prototype.getEntityValueMap = function (entity, options) { - var _a, _b; - var _this = this; - var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will. - // extract column value from embeds of entity if column is in embedded - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object and return it in a - // { data: { information: { counters: { id: ... } } } } format - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // now need to access post[data][information][counters] to get column value from the counters - // and on each step we need to create complex literal object, e.g. first { data }, - // then { data: { information } }, then { data: { information: { counters } } }, - // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } - // this recursive function helps doing that - var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) { - var propertyName = propertyNames.shift(); - if (value === undefined) - return map; - if (propertyName) { - var submap = {}; - extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap); - if (Object.keys(submap).length > 0) { - map[propertyName] = submap; - } - return map; - } - if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null)) - map[_this.propertyName] = value[_this.propertyName]; - return map; - }; - var map = {}; - extractEmbeddedColumnValue_2(propertyNames, entity, map); - return Object.keys(map).length > 0 ? map : undefined; - } - else { // no embeds - no problems. Simply return column property name and its value of the entity - if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) { - var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) { - var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]); - if (value === undefined) - return map; - return _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__[/* OrmUtils */ "a"].mergeDeep(map, value); - }, {}); - if (Object.keys(map).length > 0) - return _a = {}, _a[this.propertyName] = map, _a; - return undefined; - } - else { - if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null)) - return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b; - return undefined; - } - } - }; - /** - * Extracts column value from the given entity. - * If column is in embedded (or recursive embedded) it extracts its value from there. - */ - ColumnMetadata.prototype.getEntityValue = function (entity, transform) { - if (transform === void 0) { transform = false; } - if (entity === undefined || entity === null) - return undefined; - // extract column value from embeddeds of entity if column is in embedded - var value = undefined; - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters - // this recursive function takes array of generated property names and gets the post[data][information][counters] embed - var extractEmbeddedColumnValue_3 = function (propertyNames, value) { - var propertyName = propertyNames.shift(); - return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value; - }; - // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName] - var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity); - if (embeddedObject) { - if (this.relationMetadata && this.referencedColumn) { - var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject); - if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { - value = this.referencedColumn.getEntityValue(relatedEntity); - } - else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { - value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); - } - else { - value = embeddedObject[this.propertyName]; - } - } - else if (this.referencedColumn) { - value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); - } - else { - value = embeddedObject[this.propertyName]; - } - } - } - else { // no embeds - no problems. Simply return column name by property name of the entity - if (this.relationMetadata && this.referencedColumn) { - var relatedEntity = this.relationMetadata.getEntityValue(entity); - if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(relatedEntity instanceof Function)) { - value = this.referencedColumn.getEntityValue(relatedEntity); - } - else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(entity[this.propertyName] instanceof Function)) { - value = this.referencedColumn.getEntityValue(entity[this.propertyName]); - } - else { - value = entity[this.propertyName]; - } - } - else if (this.referencedColumn) { - value = this.referencedColumn.getEntityValue(entity[this.propertyName]); - } - else { - value = entity[this.propertyName]; - } - } - if (transform && this.transformer) - value = _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__[/* ApplyValueTransformers */ "a"].transformTo(this.transformer, value); - return value; - }; - /** - * Sets given entity's column value. - * Using of this method helps to set entity relation's value of the lazy and non-lazy relations. - */ - ColumnMetadata.prototype.setEntityValue = function (entity, value) { - var _this = this; - if (this.embeddedMetadata) { - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) { - // if (!object[embeddedMetadata.propertyName]) - // object[embeddedMetadata.propertyName] = embeddedMetadata.create(); - var embeddedMetadata = embeddedMetadatas.shift(); - if (embeddedMetadata) { - if (!map[embeddedMetadata.propertyName]) - map[embeddedMetadata.propertyName] = embeddedMetadata.create(); - extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]); - return map; - } - map[_this.propertyName] = value; - return map; - }; - return extractEmbeddedColumnValue_4(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.embeddedMetadataTree)), entity); - } - else { - // we write a deep object in this entity only if the column is virtual - // because if its not virtual it means the user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) { - if (!(this.propertyName in entity)) { - entity[this.propertyName] = {}; - } - entity[this.propertyName][this.referencedColumn.propertyName] = value; - } - else { - entity[this.propertyName] = value; - } - } - }; - // --------------------------------------------------------------------- - // Builder Methods - // --------------------------------------------------------------------- - ColumnMetadata.prototype.build = function (connection) { - this.propertyPath = this.buildPropertyPath(); - this.propertyAliasName = this.propertyPath.replace(".", "_"); - this.databaseName = this.buildDatabaseName(connection); - this.databasePath = this.buildDatabasePath(); - this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []); - return this; - }; - ColumnMetadata.prototype.buildPropertyPath = function () { - var path = ""; - if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) - path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; - path += this.propertyName; - // we add reference column to property path only if this column is virtual - // because if its not virtual it means user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) - path += "." + this.referencedColumn.propertyName; - return path; - }; - ColumnMetadata.prototype.buildDatabasePath = function () { - var path = ""; - if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) - path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; - path += this.databaseName; - // we add reference column to property path only if this column is virtual - // because if its not virtual it means user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName) - path += "." + this.referencedColumn.databaseName; - return path; - }; - ColumnMetadata.prototype.buildDatabaseName = function (connection) { - var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : []; - if (connection.driver instanceof _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__[/* MongoDriver */ "e"]) // we don't need to include embedded name for the mongodb column names - propertyNames = []; - return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames); - }; - return ColumnMetadata; -}()); - - -//# sourceMappingURL=ColumnMetadata.js.map - - -/***/ }), -/* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6902,6 +6354,556 @@ Translator._translations = {}; Translator.logMissingTranslations = true; Translator.instance = null; +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableUnique; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); + +/** + * Database's table unique constraint stored in this class. + */ +var TableUnique = /** @class */ (function () { + // ------------------------------------------------------------------------- + // Constructor + // ------------------------------------------------------------------------- + function TableUnique(options) { + /** + * Columns that contains this constraint. + */ + this.columnNames = []; + this.name = options.name; + this.columnNames = options.columnNames; + } + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + /** + * Creates a new copy of this constraint with exactly same properties. + */ + TableUnique.prototype.clone = function () { + return new TableUnique({ + name: this.name, + columnNames: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.columnNames)) + }); + }; + // ------------------------------------------------------------------------- + // Static Methods + // ------------------------------------------------------------------------- + /** + * Creates unique from the unique metadata object. + */ + TableUnique.create = function (uniqueMetadata) { + return new TableUnique({ + name: uniqueMetadata.name, + columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; }) + }); + }; + return TableUnique; +}()); + + +//# sourceMappingURL=TableUnique.js.map + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ColumnMetadata; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1); +/* harmony import */ var _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); +/* harmony import */ var _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61); + + + + + +/** + * This metadata contains all information about entity's column. + */ +var ColumnMetadata = /** @class */ (function () { + // --------------------------------------------------------------------- + // Constructor + // --------------------------------------------------------------------- + function ColumnMetadata(options) { + /** + * Type's length in the database. + */ + this.length = ""; + /** + * Indicates if this column is a primary key. + */ + this.isPrimary = false; + /** + * Indicates if this column is generated (auto increment or generated other way). + */ + this.isGenerated = false; + /** + * Indicates if column can contain nulls or not. + */ + this.isNullable = false; + /** + * Indicates if column is selected by query builder or not. + */ + this.isSelect = true; + /** + * Indicates if column is inserted by default or not. + */ + this.isInsert = true; + /** + * Indicates if column allows updates or not. + */ + this.isUpdate = true; + /** + * Puts ZEROFILL attribute on to numeric column. Works only for MySQL. + * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column + */ + this.zerofill = false; + /** + * Puts UNSIGNED attribute on to numeric column. Works only for MySQL. + */ + this.unsigned = false; + /** + * Indicates if this column is an array. + */ + this.isArray = false; + /** + * Indicates if column is virtual. Virtual columns are not mapped to the entity. + */ + this.isVirtual = false; + /** + * Indicates if column is discriminator. Discriminator columns are not mapped to the entity. + */ + this.isDiscriminator = false; + /** + * Indicates if column is tree-level column. Tree-level columns are used in closure entities. + */ + this.isTreeLevel = false; + /** + * Indicates if this column contains an entity creation date. + */ + this.isCreateDate = false; + /** + * Indicates if this column contains an entity update date. + */ + this.isUpdateDate = false; + /** + * Indicates if this column contains an entity delete date. + */ + this.isDeleteDate = false; + /** + * Indicates if this column contains an entity version. + */ + this.isVersion = false; + /** + * Indicates if this column contains an object id. + */ + this.isObjectId = false; + /** + * Indicates if this column is nested set's left column. + * Used only in tree entities with nested-set type. + */ + this.isNestedSetLeft = false; + /** + * Indicates if this column is nested set's right column. + * Used only in tree entities with nested-set type. + */ + this.isNestedSetRight = false; + /** + * Indicates if this column is materialized path's path column. + * Used only in tree entities with materialized path type. + */ + this.isMaterializedPath = false; + this.entityMetadata = options.entityMetadata; + this.embeddedMetadata = options.embeddedMetadata; + this.referencedColumn = options.referencedColumn; + if (options.args.target) + this.target = options.args.target; + if (options.args.propertyName) + this.propertyName = options.args.propertyName; + if (options.args.options.name) + this.givenDatabaseName = options.args.options.name; + if (options.args.options.type) + this.type = options.args.options.type; + if (options.args.options.length) + this.length = options.args.options.length ? options.args.options.length.toString() : ""; + if (options.args.options.width) + this.width = options.args.options.width; + if (options.args.options.charset) + this.charset = options.args.options.charset; + if (options.args.options.collation) + this.collation = options.args.options.collation; + if (options.args.options.primary) + this.isPrimary = options.args.options.primary; + if (options.args.options.default === null) // to make sure default: null is the same as nullable: true + this.isNullable = true; + if (options.args.options.nullable !== undefined) + this.isNullable = options.args.options.nullable; + if (options.args.options.select !== undefined) + this.isSelect = options.args.options.select; + if (options.args.options.insert !== undefined) + this.isInsert = options.args.options.insert; + if (options.args.options.update !== undefined) + this.isUpdate = options.args.options.update; + if (options.args.options.readonly !== undefined) + this.isUpdate = !options.args.options.readonly; + if (options.args.options.comment) + this.comment = options.args.options.comment; + if (options.args.options.default !== undefined) + this.default = options.args.options.default; + if (options.args.options.onUpdate) + this.onUpdate = options.args.options.onUpdate; + if (options.args.options.scale !== null && options.args.options.scale !== undefined) + this.scale = options.args.options.scale; + if (options.args.options.zerofill) { + this.zerofill = options.args.options.zerofill; + this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column + } + if (options.args.options.unsigned) + this.unsigned = options.args.options.unsigned; + if (options.args.options.precision !== undefined) + this.precision = options.args.options.precision; + if (options.args.options.enum) { + if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) { + this.enum = Object.keys(options.args.options.enum) + .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them + .map(function (key) { return options.args.options.enum[key]; }); + } + else { + this.enum = options.args.options.enum; + } + } + if (options.args.options.enumName) { + this.enumName = options.args.options.enumName; + } + if (options.args.options.asExpression) { + this.asExpression = options.args.options.asExpression; + this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : "VIRTUAL"; + } + if (options.args.options.hstoreType) + this.hstoreType = options.args.options.hstoreType; + if (options.args.options.array) + this.isArray = options.args.options.array; + if (options.args.mode) { + this.isVirtual = options.args.mode === "virtual"; + this.isTreeLevel = options.args.mode === "treeLevel"; + this.isCreateDate = options.args.mode === "createDate"; + this.isUpdateDate = options.args.mode === "updateDate"; + this.isDeleteDate = options.args.mode === "deleteDate"; + this.isVersion = options.args.mode === "version"; + this.isObjectId = options.args.mode === "objectId"; + } + if (options.args.options.transformer) + this.transformer = options.args.options.transformer; + if (options.args.options.spatialFeatureType) + this.spatialFeatureType = options.args.options.spatialFeatureType; + if (options.args.options.srid !== undefined) + this.srid = options.args.options.srid; + if (this.isTreeLevel) + this.type = options.connection.driver.mappedDataTypes.treeLevel; + if (this.isCreateDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.createDate; + if (!this.default) + this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; }; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.createDatePrecision; + } + if (this.isUpdateDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.updateDate; + if (!this.default) + this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; }; + if (!this.onUpdate) + this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision; + } + if (this.isDeleteDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.deleteDate; + if (!this.isNullable) + this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision; + } + if (this.isVersion) + this.type = options.connection.driver.mappedDataTypes.version; + if (options.closureType) + this.closureType = options.closureType; + if (options.nestedSetLeft) + this.isNestedSetLeft = options.nestedSetLeft; + if (options.nestedSetRight) + this.isNestedSetRight = options.nestedSetRight; + if (options.materializedPath) + this.isMaterializedPath = options.materializedPath; + } + // --------------------------------------------------------------------- + // Public Methods + // --------------------------------------------------------------------- + /** + * Creates entity id map from the given entity ids array. + */ + ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) { + var _a; + var _this = this; + if (useDatabaseName === void 0) { useDatabaseName = false; } + // extract column value from embeds of entity if column is in embedded + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object and return it in a + // { data: { information: { counters: { id: ... } } } } format + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // now need to access post[data][information][counters] to get column value from the counters + // and on each step we need to create complex literal object, e.g. first { data }, + // then { data: { information } }, then { data: { information: { counters } } }, + // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } + // this recursive function helps doing that + var extractEmbeddedColumnValue_1 = function (propertyNames, map) { + var propertyName = propertyNames.shift(); + if (propertyName) { + map[propertyName] = {}; + extractEmbeddedColumnValue_1(propertyNames, map[propertyName]); + return map; + } + // this is bugfix for #720 when increment number is bigint we need to make sure its a string + if ((_this.generationStrategy === "increment" || _this.generationStrategy === "rowid") && _this.type === "bigint" && value !== null) + value = String(value); + map[useDatabaseName ? _this.databaseName : _this.propertyName] = value; + return map; + }; + return extractEmbeddedColumnValue_1(propertyNames, {}); + } + else { // no embeds - no problems. Simply return column property name and its value of the entity + // this is bugfix for #720 when increment number is bigint we need to make sure its a string + if ((this.generationStrategy === "increment" || this.generationStrategy === "rowid") && this.type === "bigint" && value !== null) + value = String(value); + return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a; + } + }; + /** + * Extracts column value and returns its column name with this value in a literal object. + * If column is in embedded (or recursive embedded) it returns complex literal object. + * + * Examples what this method can return depend if this column is in embeds. + * { id: 1 } or { title: "hello" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } } + */ + ColumnMetadata.prototype.getEntityValueMap = function (entity, options) { + var _a, _b; + var _this = this; + var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will. + // extract column value from embeds of entity if column is in embedded + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object and return it in a + // { data: { information: { counters: { id: ... } } } } format + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // now need to access post[data][information][counters] to get column value from the counters + // and on each step we need to create complex literal object, e.g. first { data }, + // then { data: { information } }, then { data: { information: { counters } } }, + // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } + // this recursive function helps doing that + var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) { + var propertyName = propertyNames.shift(); + if (value === undefined) + return map; + if (propertyName) { + var submap = {}; + extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap); + if (Object.keys(submap).length > 0) { + map[propertyName] = submap; + } + return map; + } + if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null)) + map[_this.propertyName] = value[_this.propertyName]; + return map; + }; + var map = {}; + extractEmbeddedColumnValue_2(propertyNames, entity, map); + return Object.keys(map).length > 0 ? map : undefined; + } + else { // no embeds - no problems. Simply return column property name and its value of the entity + if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) { + var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) { + var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]); + if (value === undefined) + return map; + return _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__[/* OrmUtils */ "a"].mergeDeep(map, value); + }, {}); + if (Object.keys(map).length > 0) + return _a = {}, _a[this.propertyName] = map, _a; + return undefined; + } + else { + if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null)) + return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b; + return undefined; + } + } + }; + /** + * Extracts column value from the given entity. + * If column is in embedded (or recursive embedded) it extracts its value from there. + */ + ColumnMetadata.prototype.getEntityValue = function (entity, transform) { + if (transform === void 0) { transform = false; } + if (entity === undefined || entity === null) + return undefined; + // extract column value from embeddeds of entity if column is in embedded + var value = undefined; + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters + // this recursive function takes array of generated property names and gets the post[data][information][counters] embed + var extractEmbeddedColumnValue_3 = function (propertyNames, value) { + var propertyName = propertyNames.shift(); + return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value; + }; + // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName] + var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity); + if (embeddedObject) { + if (this.relationMetadata && this.referencedColumn) { + var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject); + if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { + value = this.referencedColumn.getEntityValue(relatedEntity); + } + else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { + value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); + } + else { + value = embeddedObject[this.propertyName]; + } + } + else if (this.referencedColumn) { + value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); + } + else { + value = embeddedObject[this.propertyName]; + } + } + } + else { // no embeds - no problems. Simply return column name by property name of the entity + if (this.relationMetadata && this.referencedColumn) { + var relatedEntity = this.relationMetadata.getEntityValue(entity); + if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(relatedEntity instanceof Function)) { + value = this.referencedColumn.getEntityValue(relatedEntity); + } + else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(entity[this.propertyName] instanceof Function)) { + value = this.referencedColumn.getEntityValue(entity[this.propertyName]); + } + else { + value = entity[this.propertyName]; + } + } + else if (this.referencedColumn) { + value = this.referencedColumn.getEntityValue(entity[this.propertyName]); + } + else { + value = entity[this.propertyName]; + } + } + if (transform && this.transformer) + value = _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__[/* ApplyValueTransformers */ "a"].transformTo(this.transformer, value); + return value; + }; + /** + * Sets given entity's column value. + * Using of this method helps to set entity relation's value of the lazy and non-lazy relations. + */ + ColumnMetadata.prototype.setEntityValue = function (entity, value) { + var _this = this; + if (this.embeddedMetadata) { + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) { + // if (!object[embeddedMetadata.propertyName]) + // object[embeddedMetadata.propertyName] = embeddedMetadata.create(); + var embeddedMetadata = embeddedMetadatas.shift(); + if (embeddedMetadata) { + if (!map[embeddedMetadata.propertyName]) + map[embeddedMetadata.propertyName] = embeddedMetadata.create(); + extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]); + return map; + } + map[_this.propertyName] = value; + return map; + }; + return extractEmbeddedColumnValue_4(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.embeddedMetadataTree)), entity); + } + else { + // we write a deep object in this entity only if the column is virtual + // because if its not virtual it means the user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) { + if (!(this.propertyName in entity)) { + entity[this.propertyName] = {}; + } + entity[this.propertyName][this.referencedColumn.propertyName] = value; + } + else { + entity[this.propertyName] = value; + } + } + }; + // --------------------------------------------------------------------- + // Builder Methods + // --------------------------------------------------------------------- + ColumnMetadata.prototype.build = function (connection) { + this.propertyPath = this.buildPropertyPath(); + this.propertyAliasName = this.propertyPath.replace(".", "_"); + this.databaseName = this.buildDatabaseName(connection); + this.databasePath = this.buildDatabasePath(); + this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []); + return this; + }; + ColumnMetadata.prototype.buildPropertyPath = function () { + var path = ""; + if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) + path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; + path += this.propertyName; + // we add reference column to property path only if this column is virtual + // because if its not virtual it means user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) + path += "." + this.referencedColumn.propertyName; + return path; + }; + ColumnMetadata.prototype.buildDatabasePath = function () { + var path = ""; + if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) + path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; + path += this.databaseName; + // we add reference column to property path only if this column is virtual + // because if its not virtual it means user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName) + path += "." + this.referencedColumn.databaseName; + return path; + }; + ColumnMetadata.prototype.buildDatabaseName = function (connection) { + var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : []; + if (connection.driver instanceof _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__[/* MongoDriver */ "e"]) // we don't need to include embedded name for the mongodb column names + propertyNames = []; + return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames); + }; + return ColumnMetadata; +}()); + + +//# sourceMappingURL=ColumnMetadata.js.map + + /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { @@ -7220,7 +7222,7 @@ var QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return EntityMetadata; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_postgres_PostgresDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); -/* harmony import */ var _error_CannotCreateEntityIdMapError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(151); +/* harmony import */ var _error_CannotCreateEntityIdMapError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(152); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6); /* harmony import */ var _util_StringUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49); @@ -8301,7 +8303,7 @@ var QueryExpressionMap_QueryExpressionMap = /** @class */ (function () { //# sourceMappingURL=QueryExpressionMap.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/Brackets.js -var Brackets = __webpack_require__(154); +var Brackets = __webpack_require__(155); // EXTERNAL MODULE: ./node_modules/typeorm/browser/metadata/EntityMetadata.js var EntityMetadata = __webpack_require__(35); @@ -8319,7 +8321,7 @@ var browser = __webpack_require__(47); var FindOperator = __webpack_require__(9); // EXTERNAL MODULE: ./node_modules/typeorm/browser/find-options/operator/In.js -var In = __webpack_require__(155); +var In = __webpack_require__(156); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/EntityColumnNotFound.js var EntityColumnNotFound = __webpack_require__(114); @@ -8472,7 +8474,7 @@ var QueryBuilder_QueryBuilder = /** @class */ (function () { this.expressionMap.setMainAlias(mainAlias); } // loading it dynamically because of circular issue - var RelationQueryBuilderCls = __webpack_require__(207).RelationQueryBuilder; + var RelationQueryBuilderCls = __webpack_require__(206).RelationQueryBuilder; if (this instanceof RelationQueryBuilderCls) return this; return new RelationQueryBuilderCls(this); @@ -9189,7 +9191,7 @@ var QueryBuilder_QueryBuilder = /** @class */ (function () { /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SqljsDriver; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16); -/* harmony import */ var _SqljsQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(283); +/* harmony import */ var _SqljsQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(284); /* harmony import */ var _error_DriverPackageNotInstalledError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71); /* harmony import */ var _error_DriverOptionNotSetError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37); /* harmony import */ var _platform_PlatformTools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(10); @@ -9513,7 +9515,7 @@ var SqljsDriver = /** @class */ (function (_super) { //# sourceMappingURL=SqljsDriver.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), /* 42 */ @@ -10057,8 +10059,8 @@ var TransactionNotStartedError = /** @class */ (function (_super) { var global = __webpack_require__(11); var hide = __webpack_require__(52); var has = __webpack_require__(51); -var SRC = __webpack_require__(87)('src'); -var $toString = __webpack_require__(293); +var SRC = __webpack_require__(88)('src'); +var $toString = __webpack_require__(294); var TO_STRING = 'toString'; var TPL = ('' + $toString).split(TO_STRING); @@ -10309,10 +10311,10 @@ __webpack_require__.d(__webpack_exports__, "createQueryBuilder", function() { re var tslib_es6 = __webpack_require__(0); // EXTERNAL MODULE: ./node_modules/reflect-metadata/Reflect.js -var reflect_metadata_Reflect = __webpack_require__(478); +var reflect_metadata_Reflect = __webpack_require__(479); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/RandomGenerator.js -var RandomGenerator = __webpack_require__(61); +var RandomGenerator = __webpack_require__(62); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/StringUtils.js var StringUtils = __webpack_require__(49); @@ -13301,13 +13303,13 @@ var SubjectTopoligicalSorter_SubjectTopoligicalSorter = /** @class */ (function //# sourceMappingURL=SubjectTopoligicalSorter.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/DateUtils.js -var DateUtils = __webpack_require__(21); +var DateUtils = __webpack_require__(22); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/OrmUtils.js var OrmUtils = __webpack_require__(6); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/ApplyValueTransformers.js -var ApplyValueTransformers = __webpack_require__(60); +var ApplyValueTransformers = __webpack_require__(61); // CONCATENATED MODULE: ./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js @@ -16749,7 +16751,7 @@ var QueryFailedError = __webpack_require__(39); var AbstractSqliteQueryRunner = __webpack_require__(73); // EXTERNAL MODULE: ./node_modules/typeorm/browser/subscriber/Broadcaster.js -var Broadcaster = __webpack_require__(54); +var Broadcaster = __webpack_require__(55); // CONCATENATED MODULE: ./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js @@ -17138,7 +17140,7 @@ var ReactNativeDriver_ReactNativeDriver = /** @class */ (function (_super) { //# sourceMappingURL=ReactNativeDriver.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js -var NativescriptDriver = __webpack_require__(284); +var NativescriptDriver = __webpack_require__(285); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js var TransactionAlreadyStartedError = __webpack_require__(70); @@ -17451,7 +17453,7 @@ var TableCheck = __webpack_require__(43); var TableColumn = __webpack_require__(25); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js -var TableExclusion = __webpack_require__(59); +var TableExclusion = __webpack_require__(60); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js var TableForeignKey = __webpack_require__(48); @@ -17460,10 +17462,10 @@ var TableForeignKey = __webpack_require__(48); var TableIndex = __webpack_require__(38); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableUnique.js -var TableUnique = __webpack_require__(30); +var TableUnique = __webpack_require__(31); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/view/View.js -var View = __webpack_require__(56); +var View = __webpack_require__(57); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/Query.js var Query = __webpack_require__(2); @@ -20917,7 +20919,7 @@ function getFromContainer(someClass) { //# sourceMappingURL=container.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/metadata/ColumnMetadata.js -var ColumnMetadata = __webpack_require__(31); +var ColumnMetadata = __webpack_require__(32); // CONCATENATED MODULE: ./node_modules/typeorm/browser/metadata/IndexMetadata.js /** @@ -25085,7 +25087,7 @@ var RelationIdLoader_RelationIdLoader = /** @class */ (function () { //# sourceMappingURL=RelationIdLoader.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/DriverUtils.js -var DriverUtils = __webpack_require__(20); +var DriverUtils = __webpack_require__(21); // CONCATENATED MODULE: ./node_modules/typeorm/browser/connection/Connection.js @@ -25875,7 +25877,7 @@ var CannotReflectMethodParameterTypeError_CannotReflectMethodParameterTypeError //# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js -var LockNotSupportedOnGivenDriverError = __webpack_require__(85); +var LockNotSupportedOnGivenDriverError = __webpack_require__(86); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js @@ -25898,7 +25900,7 @@ var ConnectionIsNotSetError_ConnectionIsNotSetError = /** @class */ (function (_ //# sourceMappingURL=ConnectionIsNotSetError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js -var CannotCreateEntityIdMapError = __webpack_require__(151); +var CannotCreateEntityIdMapError = __webpack_require__(152); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js @@ -25922,7 +25924,7 @@ var MetadataAlreadyExistsError_MetadataAlreadyExistsError = /** @class */ (funct //# sourceMappingURL=MetadataAlreadyExistsError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/UpdateValuesMissingError.js -var UpdateValuesMissingError = __webpack_require__(100); +var UpdateValuesMissingError = __webpack_require__(101); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js var OptimisticLockVersionMismatchError = __webpack_require__(130); @@ -25949,7 +25951,7 @@ var PrimaryColumnCannotBeNullableError_PrimaryColumnCannotBeNullableError = /** //# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js -var MissingDeleteDateColumnError = __webpack_require__(158); +var MissingDeleteDateColumnError = __webpack_require__(159); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js @@ -26047,10 +26049,10 @@ var CannotGetEntityManagerNotConnectedError_CannotGetEntityManagerNotConnectedEr //# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js -var NoVersionOrUpdateDateColumnError = __webpack_require__(153); +var NoVersionOrUpdateDateColumnError = __webpack_require__(154); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/InsertValuesMissingError.js -var InsertValuesMissingError = __webpack_require__(156); +var InsertValuesMissingError = __webpack_require__(157); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js var OptimisticLockCanNotBeUsedError = __webpack_require__(102); @@ -26098,7 +26100,7 @@ var NamingStrategyNotFoundError_NamingStrategyNotFoundError = /** @class */ (fun //# sourceMappingURL=NamingStrategyNotFoundError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js -var PessimisticLockTransactionRequiredError = __webpack_require__(152); +var PessimisticLockTransactionRequiredError = __webpack_require__(153); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/MissingJoinTableError.js @@ -26234,7 +26236,7 @@ var ColumnTypeUndefinedError_ColumnTypeUndefinedError = /** @class */ (function //# sourceMappingURL=ColumnTypeUndefinedError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js -var OffsetWithoutLimitNotSupportedError = __webpack_require__(159); +var OffsetWithoutLimitNotSupportedError = __webpack_require__(160); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/index.js @@ -27528,7 +27530,7 @@ function Equal(value) { //# sourceMappingURL=Equal.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/find-options/operator/In.js -var In = __webpack_require__(155); +var In = __webpack_require__(156); // CONCATENATED MODULE: ./node_modules/typeorm/browser/find-options/operator/IsNull.js @@ -27960,10 +27962,10 @@ var InsertQueryBuilder = __webpack_require__(194); var UpdateQueryBuilder = __webpack_require__(195); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js + 2 modules -var RelationQueryBuilder = __webpack_require__(207); +var RelationQueryBuilder = __webpack_require__(206); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/Brackets.js -var Brackets = __webpack_require__(154); +var Brackets = __webpack_require__(155); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/result/InsertResult.js var InsertResult = __webpack_require__(131); @@ -27972,7 +27974,7 @@ var InsertResult = __webpack_require__(131); var UpdateResult = __webpack_require__(115); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/result/DeleteResult.js -var DeleteResult = __webpack_require__(157); +var DeleteResult = __webpack_require__(158); // CONCATENATED MODULE: ./node_modules/typeorm/browser/index.js @@ -28358,7 +28360,7 @@ var TableForeignKey = /** @class */ (function () { /* unused harmony export abbreviate */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return shorten; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hash; }); -/* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(282); +/* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(283); /* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sha_js__WEBPACK_IMPORTED_MODULE_0__); /** @@ -28517,7 +28519,7 @@ module.exports = function (it, key) { /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(29); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); module.exports = __webpack_require__(28) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { @@ -28540,6 +28542,217 @@ module.exports = function (it) { /***/ }), /* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ViewInflater = void 0; + +var client_1 = __webpack_require__(147); + +var shared_1 = __webpack_require__(17); + +var DataManager_1 = __webpack_require__(59); +/** + * Singleton-Klasse genutzt zum laden von Views + */ + + +var ViewInflater = /*#__PURE__*/function () { + function ViewInflater() { + _classCallCheck(this, ViewInflater); + + this.loadingPromises = {}; + } + /** + * Statische Funktion, um die Singleton-Instanz zu holen + * + * @returns {ViewInflater} + */ + + + _createClass(ViewInflater, [{ + key: "load", + value: + /** + * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views + * + * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann + * + * @param viewUrl + * @param parentUrls + * @returns {*} + */ + function load(viewUrl, parentUrls) { + var _this = this; + + //Kopiere Elemente, damit originale parentURLS nicht verändert werden + parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, [])); //Detektiert eine Schleife in den Views + + if (parentUrls.indexOf(viewUrl) !== -1) { + //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View + return Promise.reject("views are in a circuit! cannot resolve view for url " + parentUrls[0] + "! url " + viewUrl + " is in stack before!"); + } + + parentUrls.push(viewUrl); //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden + + if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) { + return this.loadingPromises[viewUrl].then(function (view) { + return view.cloneNode(true); + }); + } + + var t; + var resultPromise = Promise.resolve(t); + + if (viewUrl instanceof Element) { + resultPromise = Promise.resolve(viewUrl); + } else { + resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(function (htmlText) { + var doc = new DOMParser().parseFromString(htmlText, "text/html"); //Parsing hat nicht geklappt, also per innerHTML + + if (shared_1.Helper.isNull(doc)) { + doc = document.implementation.createHTMLDocument(''); + doc.body.innerHTML = htmlText; + } //Wrappe Elemente mit einem Span + + + var spanElem = document.createElement("span"); + spanElem.classList.add("injected-span"); + return ViewInflater.moveChildren(doc.body, spanElem); + }); + } + + this.loadingPromises[viewUrl] = resultPromise.then(function (parentElement) { + var promises = []; + var childViews = parentElement.querySelectorAll("[data-view]"); //lade Kinder-Views + + childViews.forEach(function (childView) { + promises.push(ViewInflater.getInstance().load(childView.dataset["view"], parentUrls).then(function (element) { + childView.replaceWith(element); + ViewInflater.replaceWithChildren(element); + })); + }); + return Promise.all(promises).then(function () { + return parentElement; + }); + }).catch(function (e) { + console.error(e); + _this.loadingPromises[viewUrl] = null; + throw e; + }); + return this.loadingPromises[viewUrl].then(function (view) { + return view.cloneNode(true); + }); + } + /** + * Statische Funktion, um Elemente aus einem String zu kreieren + * + * @param string + * @returns {NodeListOf} + */ + + }], [{ + key: "getInstance", + value: function getInstance() { + if (shared_1.Helper.isNull(ViewInflater.instance)) { + ViewInflater.instance = new ViewInflater(); + } + + return ViewInflater.instance; + } + }, { + key: "inflateElementsFromString", + value: function inflateElementsFromString(string) { + var template = document.createElement('template'); + template.innerHTML = string; + return template.content.childNodes; + } + /** + * Kreiert ein Ladesymbol. Evtl entfernen + * + * @returns {HTMLDivElement} + */ + + }, { + key: "createLoadingSymbol", + value: function createLoadingSymbol(loaderClass) { + var svgNS = "http://www.w3.org/2000/svg"; + var loader = document.createElement("div"); + loader.classList.add('loader'); //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt + + if (loaderClass) { + loader.classList.add(loaderClass); + } + + var svg = document.createElementNS(svgNS, "svg"); + svg.setAttribute('viewBox', "0 0 32 32"); + svg.setAttribute("width", "32"); + svg.setAttribute("height", "32"); + var circle = document.createElementNS(svgNS, "circle"); + circle.setAttribute("class", "spinner"); + circle.setAttribute("cx", "16"); + circle.setAttribute("cy", "16"); + circle.setAttribute("r", "14"); + circle.setAttribute("fill", "none"); + svg.appendChild(circle); + loader.appendChild(svg); // let loader = document.createElement("div"); + // loader.appendChild(document.createTextNode("LOADING...")); + + return loader; + } + /** + * Moves the child-Nodes from one element to another + * @param from + * @param to + * @returns {*} + */ + + }, { + key: "moveChildren", + value: function moveChildren(from, to) { + return client_1.ViewHelper.moveChildren(from, to); + } + /** + * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen) + * @param element + */ + + }, { + key: "replaceWithChildren", + value: function replaceWithChildren(element) { + var children = []; //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt + + element.childNodes.forEach(function (child) { + children.push(child); + }); + var parent = element.parentElement; + children.forEach(function (child) { + element.removeChild(child); + parent.insertBefore(child, element); + }); + element.remove(); + } + }]); + + return ViewInflater; +}(); + +exports.ViewInflater = ViewInflater; +ViewInflater.instance = null; + +/***/ }), +/* 55 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -28983,7 +29196,7 @@ var Broadcaster = /** @class */ (function () { /***/ }), -/* 55 */ +/* 56 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29032,7 +29245,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.Matomo = void 0; -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var NativeStoragePromise_1 = __webpack_require__(42); @@ -29277,7 +29490,7 @@ Matomo.currentUrl = null; Matomo.isTrackingPromise = null; /***/ }), -/* 56 */ +/* 57 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -29331,7 +29544,7 @@ var View = /** @class */ (function () { /***/ }), -/* 57 */ +/* 58 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29346,585 +29559,8 @@ module.exports = function (method, arg) { }; -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ViewInflater = void 0; - -var client_1 = __webpack_require__(197); - -var shared_1 = __webpack_require__(22); - -var DataManager_1 = __webpack_require__(68); -/** - * Singleton-Klasse genutzt zum laden von Views - */ - - -var ViewInflater = /*#__PURE__*/function () { - function ViewInflater() { - _classCallCheck(this, ViewInflater); - - this.loadingPromises = {}; - } - /** - * Statische Funktion, um die Singleton-Instanz zu holen - * - * @returns {ViewInflater} - */ - - - _createClass(ViewInflater, [{ - key: "load", - value: - /** - * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views - * - * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann - * - * @param viewUrl - * @param parentUrls - * @returns {*} - */ - function load(viewUrl, parentUrls) { - var _this = this; - - //Kopiere Elemente, damit originale parentURLS nicht verändert werden - parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, [])); //Detektiert eine Schleife in den Views - - if (parentUrls.indexOf(viewUrl) !== -1) { - //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View - return Promise.reject("views are in a circuit! cannot resolve view for url " + parentUrls[0] + "! url " + viewUrl + " is in stack before!"); - } - - parentUrls.push(viewUrl); //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden - - if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) { - return this.loadingPromises[viewUrl].then(function (view) { - return view.cloneNode(true); - }); - } - - var t; - var resultPromise = Promise.resolve(t); - - if (viewUrl instanceof Element) { - resultPromise = Promise.resolve(viewUrl); - } else { - resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(function (htmlText) { - var doc = new DOMParser().parseFromString(htmlText, "text/html"); //Parsing hat nicht geklappt, also per innerHTML - - if (shared_1.Helper.isNull(doc)) { - doc = document.implementation.createHTMLDocument(''); - doc.body.innerHTML = htmlText; - } //Wrappe Elemente mit einem Span - - - var spanElem = document.createElement("span"); - spanElem.classList.add("injected-span"); - return ViewInflater.moveChildren(doc.body, spanElem); - }); - } - - this.loadingPromises[viewUrl] = resultPromise.then(function (parentElement) { - var promises = []; - var childViews = parentElement.querySelectorAll("[data-view]"); //lade Kinder-Views - - childViews.forEach(function (childView) { - promises.push(ViewInflater.getInstance().load(childView.dataset["view"], parentUrls).then(function (element) { - childView.replaceWith(element); - ViewInflater.replaceWithChildren(element); - })); - }); - return Promise.all(promises).then(function () { - return parentElement; - }); - }).catch(function (e) { - console.error(e); - _this.loadingPromises[viewUrl] = null; - throw e; - }); - return this.loadingPromises[viewUrl].then(function (view) { - return view.cloneNode(true); - }); - } - /** - * Statische Funktion, um Elemente aus einem String zu kreieren - * - * @param string - * @returns {NodeListOf} - */ - - }], [{ - key: "getInstance", - value: function getInstance() { - if (shared_1.Helper.isNull(ViewInflater.instance)) { - ViewInflater.instance = new ViewInflater(); - } - - return ViewInflater.instance; - } - }, { - key: "inflateElementsFromString", - value: function inflateElementsFromString(string) { - var template = document.createElement('template'); - template.innerHTML = string; - return template.content.childNodes; - } - /** - * Kreiert ein Ladesymbol. Evtl entfernen - * - * @returns {HTMLDivElement} - */ - - }, { - key: "createLoadingSymbol", - value: function createLoadingSymbol(loaderClass) { - var svgNS = "http://www.w3.org/2000/svg"; - var loader = document.createElement("div"); - loader.classList.add('loader'); //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt - - if (loaderClass) { - loader.classList.add(loaderClass); - } - - var svg = document.createElementNS(svgNS, "svg"); - svg.setAttribute('viewBox', "0 0 32 32"); - svg.setAttribute("width", "32"); - svg.setAttribute("height", "32"); - var circle = document.createElementNS(svgNS, "circle"); - circle.setAttribute("class", "spinner"); - circle.setAttribute("cx", "16"); - circle.setAttribute("cy", "16"); - circle.setAttribute("r", "14"); - circle.setAttribute("fill", "none"); - svg.appendChild(circle); - loader.appendChild(svg); // let loader = document.createElement("div"); - // loader.appendChild(document.createTextNode("LOADING...")); - - return loader; - } - /** - * Moves the child-Nodes from one element to another - * @param from - * @param to - * @returns {*} - */ - - }, { - key: "moveChildren", - value: function moveChildren(from, to) { - return client_1.ViewHelper.moveChildren(from, to); - } - /** - * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen) - * @param element - */ - - }, { - key: "replaceWithChildren", - value: function replaceWithChildren(element) { - var children = []; //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt - - element.childNodes.forEach(function (child) { - children.push(child); - }); - var parent = element.parentElement; - children.forEach(function (child) { - element.removeChild(child); - parent.insertBefore(child, element); - }); - element.remove(); - } - }]); - - return ViewInflater; -}(); - -exports.ViewInflater = ViewInflater; -ViewInflater.instance = null; - /***/ }), /* 59 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableExclusion; }); -/** - * Database's table exclusion constraint stored in this class. - */ -var TableExclusion = /** @class */ (function () { - // ------------------------------------------------------------------------- - // Constructor - // ------------------------------------------------------------------------- - function TableExclusion(options) { - this.name = options.name; - this.expression = options.expression; - } - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - /** - * Creates a new copy of this constraint with exactly same properties. - */ - TableExclusion.prototype.clone = function () { - return new TableExclusion({ - name: this.name, - expression: this.expression, - }); - }; - // ------------------------------------------------------------------------- - // Static Methods - // ------------------------------------------------------------------------- - /** - * Creates exclusions from the exclusion metadata object. - */ - TableExclusion.create = function (exclusionMetadata) { - return new TableExclusion({ - name: exclusionMetadata.name, - expression: exclusionMetadata.expression - }); - }; - return TableExclusion; -}()); - - -//# sourceMappingURL=TableExclusion.js.map - - -/***/ }), -/* 60 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ApplyValueTransformers; }); -var ApplyValueTransformers = /** @class */ (function () { - function ApplyValueTransformers() { - } - ApplyValueTransformers.transformFrom = function (transformer, databaseValue) { - if (Array.isArray(transformer)) { - var reverseTransformers = transformer.slice().reverse(); - return reverseTransformers.reduce(function (transformedValue, _transformer) { - return _transformer.from(transformedValue); - }, databaseValue); - } - return transformer.from(databaseValue); - }; - ApplyValueTransformers.transformTo = function (transformer, entityValue) { - if (Array.isArray(transformer)) { - return transformer.reduce(function (transformedValue, _transformer) { - return _transformer.to(transformedValue); - }, entityValue); - } - return transformer.to(entityValue); - }; - return ApplyValueTransformers; -}()); - - -//# sourceMappingURL=ApplyValueTransformers.js.map - - -/***/ }), -/* 61 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RandomGenerator; }); -var RandomGenerator = /** @class */ (function () { - function RandomGenerator() { - } - /** - * discuss at: http://locutus.io/php/sha1/ - * original by: Webtoolkit.info (http://www.webtoolkit.info/) - * improved by: Michael White (http://getsprink.com) - * improved by: Kevin van Zonneveld (http://kvz.io) - * input by: Brett Zamir (http://brett-zamir.me) - * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then - * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly - * note 1: in a steaming fashion for faster and more efficient hashing - * example 1: sha1('Kevin van Zonneveld') - * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897' - */ - RandomGenerator.sha1 = function (str) { - var _rotLeft = function (n, s) { - var t4 = (n << s) | (n >>> (32 - s)); - return t4; - }; - var _cvtHex = function (val) { - var str = ""; - var i; - var v; - for (i = 7; i >= 0; i--) { - v = (val >>> (i * 4)) & 0x0f; - str += v.toString(16); - } - return str; - }; - var blockstart; - var i, j; - var W = new Array(80); - var H0 = 0x67452301; - var H1 = 0xEFCDAB89; - var H2 = 0x98BADCFE; - var H3 = 0x10325476; - var H4 = 0xC3D2E1F0; - var A, B, C, D, E; - var temp; - // utf8_encode - str = /*unescape*/ (encodeURIComponent(str)); - var strLen = str.length; - var wordArray = []; - for (i = 0; i < strLen - 3; i += 4) { - j = str.charCodeAt(i) << 24 | - str.charCodeAt(i + 1) << 16 | - str.charCodeAt(i + 2) << 8 | - str.charCodeAt(i + 3); - wordArray.push(j); - } - switch (strLen % 4) { - case 0: - i = 0x080000000; - break; - case 1: - i = str.charCodeAt(strLen - 1) << 24 | 0x0800000; - break; - case 2: - i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000; - break; - case 3: - i = str.charCodeAt(strLen - 3) << 24 | - str.charCodeAt(strLen - 2) << 16 | - str.charCodeAt(strLen - 1) << - 8 | 0x80; - break; - } - wordArray.push(i); - while ((wordArray.length % 16) !== 14) { - wordArray.push(0); - } - wordArray.push(strLen >>> 29); - wordArray.push((strLen << 3) & 0x0ffffffff); - for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) { - for (i = 0; i < 16; i++) { - W[i] = wordArray[blockstart + i]; - } - for (i = 16; i <= 79; i++) { - W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - } - A = H0; - B = H1; - C = H2; - D = H3; - E = H4; - for (i = 0; i <= 19; i++) { - temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 20; i <= 39; i++) { - temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 40; i <= 59; i++) { - temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 60; i <= 79; i++) { - temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - H0 = (H0 + A) & 0x0ffffffff; - H1 = (H1 + B) & 0x0ffffffff; - H2 = (H2 + C) & 0x0ffffffff; - H3 = (H3 + D) & 0x0ffffffff; - H4 = (H4 + E) & 0x0ffffffff; - } - temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4); - return temp.toLowerCase(); - }; - /** - * RFC4122 compliant UUID v4 generator. - */ - RandomGenerator.uuid4 = function () { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - }; - return RandomGenerator; -}()); - - -//# sourceMappingURL=RandomGenerator.js.map - - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(63); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 63 */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), -/* 64 */ -/***/ (function(module, exports) { - -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(123); -var createDesc = __webpack_require__(86); -var toIObject = __webpack_require__(53); -var toPrimitive = __webpack_require__(82); -var has = __webpack_require__(51); -var IE8_DOM_DEFINE = __webpack_require__(213); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(28) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -// most Object methods by ES6 should accept primitives -var $export = __webpack_require__(3); -var core = __webpack_require__(26); -var fails = __webpack_require__(12); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = __webpack_require__(62); -var IObject = __webpack_require__(122); -var toObject = __webpack_require__(36); -var toLength = __webpack_require__(23); -var asc = __webpack_require__(229); -module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - for (;length > index; index++) if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - if (TYPE) { - if (IS_MAP) result[index] = res; // map - else if (res) switch (TYPE) { - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if (IS_EVERY) return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; - - -/***/ }), -/* 68 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -30316,6 +29952,372 @@ DataManager._additionalHeaders = {}; DataManager._basePath = ""; DataManager._assetBasePath = ""; +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableExclusion; }); +/** + * Database's table exclusion constraint stored in this class. + */ +var TableExclusion = /** @class */ (function () { + // ------------------------------------------------------------------------- + // Constructor + // ------------------------------------------------------------------------- + function TableExclusion(options) { + this.name = options.name; + this.expression = options.expression; + } + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + /** + * Creates a new copy of this constraint with exactly same properties. + */ + TableExclusion.prototype.clone = function () { + return new TableExclusion({ + name: this.name, + expression: this.expression, + }); + }; + // ------------------------------------------------------------------------- + // Static Methods + // ------------------------------------------------------------------------- + /** + * Creates exclusions from the exclusion metadata object. + */ + TableExclusion.create = function (exclusionMetadata) { + return new TableExclusion({ + name: exclusionMetadata.name, + expression: exclusionMetadata.expression + }); + }; + return TableExclusion; +}()); + + +//# sourceMappingURL=TableExclusion.js.map + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ApplyValueTransformers; }); +var ApplyValueTransformers = /** @class */ (function () { + function ApplyValueTransformers() { + } + ApplyValueTransformers.transformFrom = function (transformer, databaseValue) { + if (Array.isArray(transformer)) { + var reverseTransformers = transformer.slice().reverse(); + return reverseTransformers.reduce(function (transformedValue, _transformer) { + return _transformer.from(transformedValue); + }, databaseValue); + } + return transformer.from(databaseValue); + }; + ApplyValueTransformers.transformTo = function (transformer, entityValue) { + if (Array.isArray(transformer)) { + return transformer.reduce(function (transformedValue, _transformer) { + return _transformer.to(transformedValue); + }, entityValue); + } + return transformer.to(entityValue); + }; + return ApplyValueTransformers; +}()); + + +//# sourceMappingURL=ApplyValueTransformers.js.map + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RandomGenerator; }); +var RandomGenerator = /** @class */ (function () { + function RandomGenerator() { + } + /** + * discuss at: http://locutus.io/php/sha1/ + * original by: Webtoolkit.info (http://www.webtoolkit.info/) + * improved by: Michael White (http://getsprink.com) + * improved by: Kevin van Zonneveld (http://kvz.io) + * input by: Brett Zamir (http://brett-zamir.me) + * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then + * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly + * note 1: in a steaming fashion for faster and more efficient hashing + * example 1: sha1('Kevin van Zonneveld') + * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897' + */ + RandomGenerator.sha1 = function (str) { + var _rotLeft = function (n, s) { + var t4 = (n << s) | (n >>> (32 - s)); + return t4; + }; + var _cvtHex = function (val) { + var str = ""; + var i; + var v; + for (i = 7; i >= 0; i--) { + v = (val >>> (i * 4)) & 0x0f; + str += v.toString(16); + } + return str; + }; + var blockstart; + var i, j; + var W = new Array(80); + var H0 = 0x67452301; + var H1 = 0xEFCDAB89; + var H2 = 0x98BADCFE; + var H3 = 0x10325476; + var H4 = 0xC3D2E1F0; + var A, B, C, D, E; + var temp; + // utf8_encode + str = /*unescape*/ (encodeURIComponent(str)); + var strLen = str.length; + var wordArray = []; + for (i = 0; i < strLen - 3; i += 4) { + j = str.charCodeAt(i) << 24 | + str.charCodeAt(i + 1) << 16 | + str.charCodeAt(i + 2) << 8 | + str.charCodeAt(i + 3); + wordArray.push(j); + } + switch (strLen % 4) { + case 0: + i = 0x080000000; + break; + case 1: + i = str.charCodeAt(strLen - 1) << 24 | 0x0800000; + break; + case 2: + i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000; + break; + case 3: + i = str.charCodeAt(strLen - 3) << 24 | + str.charCodeAt(strLen - 2) << 16 | + str.charCodeAt(strLen - 1) << + 8 | 0x80; + break; + } + wordArray.push(i); + while ((wordArray.length % 16) !== 14) { + wordArray.push(0); + } + wordArray.push(strLen >>> 29); + wordArray.push((strLen << 3) & 0x0ffffffff); + for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) { + for (i = 0; i < 16; i++) { + W[i] = wordArray[blockstart + i]; + } + for (i = 16; i <= 79; i++) { + W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + } + A = H0; + B = H1; + C = H2; + D = H3; + E = H4; + for (i = 0; i <= 19; i++) { + temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 20; i <= 39; i++) { + temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 40; i <= 59; i++) { + temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 60; i <= 79; i++) { + temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + H0 = (H0 + A) & 0x0ffffffff; + H1 = (H1 + B) & 0x0ffffffff; + H2 = (H2 + C) & 0x0ffffffff; + H3 = (H3 + D) & 0x0ffffffff; + H4 = (H4 + E) & 0x0ffffffff; + } + temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4); + return temp.toLowerCase(); + }; + /** + * RFC4122 compliant UUID v4 generator. + */ + RandomGenerator.uuid4 = function () { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + }; + return RandomGenerator; +}()); + + +//# sourceMappingURL=RandomGenerator.js.map + + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(64); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +var pIE = __webpack_require__(123); +var createDesc = __webpack_require__(87); +var toIObject = __webpack_require__(53); +var toPrimitive = __webpack_require__(82); +var has = __webpack_require__(51); +var IE8_DOM_DEFINE = __webpack_require__(213); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = __webpack_require__(28) ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +// most Object methods by ES6 should accept primitives +var $export = __webpack_require__(3); +var core = __webpack_require__(26); +var fails = __webpack_require__(12); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = __webpack_require__(63); +var IObject = __webpack_require__(122); +var toObject = __webpack_require__(36); +var toLength = __webpack_require__(23); +var asc = __webpack_require__(229); +module.exports = function (TYPE, $create) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + var create = $create || asc; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IObject(O); + var f = ctx(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var val, res; + for (;length > index; index++) if (NO_HOLES || index in self) { + val = self[index]; + res = f(val, index, O); + if (TYPE) { + if (IS_MAP) result[index] = res; // map + else if (res) switch (TYPE) { + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + + /***/ }), /* 69 */ /***/ (function(module, exports, __webpack_require__) { @@ -30386,11 +30388,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.MenuSite = void 0; -var TemplateSite_1 = __webpack_require__(199); +var TemplateSite_1 = __webpack_require__(198); -var defaultMenuTemplate = __webpack_require__(510); +var defaultMenuTemplate = __webpack_require__(511); -var NavbarFragment_1 = __webpack_require__(160); +var NavbarFragment_1 = __webpack_require__(161); var Context_1 = __webpack_require__(111); @@ -30635,14 +30637,14 @@ var ReturningStatementNotSupportedError = /** @class */ (function (_super) { /* harmony import */ var _error_TransactionAlreadyStartedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70); /* harmony import */ var _error_TransactionNotStartedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44); /* harmony import */ var _schema_builder_table_TableColumn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25); -/* harmony import */ var _metadata_ColumnMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31); +/* harmony import */ var _metadata_ColumnMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32); /* harmony import */ var _schema_builder_table_Table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _schema_builder_table_TableIndex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38); /* harmony import */ var _schema_builder_table_TableForeignKey__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(48); -/* harmony import */ var _schema_builder_view_View__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(56); +/* harmony import */ var _schema_builder_view_View__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(57); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8); /* harmony import */ var _Query__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(2); -/* harmony import */ var _schema_builder_table_TableUnique__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(30); +/* harmony import */ var _schema_builder_table_TableUnique__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(31); /* harmony import */ var _query_runner_BaseQueryRunner__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(163); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6); /* harmony import */ var _schema_builder_table_TableCheck__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(43); @@ -32458,34 +32460,34 @@ module.exports = function (it) { "use strict"; if (__webpack_require__(28)) { - var LIBRARY = __webpack_require__(88); + var LIBRARY = __webpack_require__(89); var global = __webpack_require__(11); var fails = __webpack_require__(12); var $export = __webpack_require__(3); var $typed = __webpack_require__(145); var $buffer = __webpack_require__(188); - var ctx = __webpack_require__(62); + var ctx = __webpack_require__(63); var anInstance = __webpack_require__(107); - var propertyDesc = __webpack_require__(86); + var propertyDesc = __webpack_require__(87); var hide = __webpack_require__(52); var redefineAll = __webpack_require__(108); - var toInteger = __webpack_require__(64); + var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var toIndex = __webpack_require__(240); - var toAbsoluteIndex = __webpack_require__(90); + var toAbsoluteIndex = __webpack_require__(91); var toPrimitive = __webpack_require__(82); var has = __webpack_require__(51); var classof = __webpack_require__(124); var isObject = __webpack_require__(14); var toObject = __webpack_require__(36); var isArrayIter = __webpack_require__(180); - var create = __webpack_require__(91); - var getPrototypeOf = __webpack_require__(93); - var gOPN = __webpack_require__(92).f; + var create = __webpack_require__(92); + var getPrototypeOf = __webpack_require__(94); + var gOPN = __webpack_require__(93).f; var getIterFn = __webpack_require__(182); - var uid = __webpack_require__(87); - var wks = __webpack_require__(18); - var createArrayMethod = __webpack_require__(67); + var uid = __webpack_require__(88); + var wks = __webpack_require__(19); + var createArrayMethod = __webpack_require__(68); var createArrayIncludes = __webpack_require__(135); var speciesConstructor = __webpack_require__(125); var ArrayIterators = __webpack_require__(184); @@ -32495,7 +32497,7 @@ if (__webpack_require__(28)) { var arrayFill = __webpack_require__(183); var arrayCopyWithin = __webpack_require__(231); var $DP = __webpack_require__(29); - var $GOPD = __webpack_require__(65); + var $GOPD = __webpack_require__(66); var dP = $DP.f; var gOPD = $GOPD.f; var RangeError = global.RangeError; @@ -33008,9 +33010,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.EasySyncBaseModel = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncBaseModel = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(EasySyncBaseModel, _cordova_sites_databa); @@ -34011,7 +34013,7 @@ function localstorage() { } } -module.exports = __webpack_require__(486)(exports); +module.exports = __webpack_require__(487)(exports); const {formatters} = module.exports; @@ -34051,7 +34053,7 @@ module.exports = function (it, S) { /* 83 */ /***/ (function(module, exports, __webpack_require__) { -var META = __webpack_require__(87)('meta'); +var META = __webpack_require__(88)('meta'); var isObject = __webpack_require__(14); var has = __webpack_require__(51); var setDesc = __webpack_require__(29).f; @@ -34158,9 +34160,9 @@ exports.Dialog = void 0; var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Dialog = /*#__PURE__*/function () { function Dialog(content, title) { @@ -34436,6 +34438,152 @@ exports.Dialog = Dialog; /***/ }), /* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Toast = void 0; + +var Helper_1 = __webpack_require__(15); + +var ToastManager_1 = __webpack_require__(259); + +var Toast = /*#__PURE__*/function () { + function Toast(message, duration, shouldTranslateOrTranslationArgs) { + _classCallCheck(this, Toast); + + this._message = message; + this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION); + this._shouldTranslate = shouldTranslateOrTranslationArgs !== false; + this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []); + this._id = Toast.LAST_ID++; + this._toastElement = null; + } + + _createClass(Toast, [{ + key: "getId", + value: function getId() { + return this._id; + } + }, { + key: "getMessage", + value: function getMessage() { + return this._message; + } + }, { + key: "getDuration", + value: function getDuration() { + return this._duration; + } + }, { + key: "isShouldTranslate", + value: function isShouldTranslate() { + return this._shouldTranslate; + } + }, { + key: "getTranslationArgs", + value: function getTranslationArgs() { + return this._translationArgs; + } + }, { + key: "setToastElement", + value: function setToastElement(element) { + this._toastElement = element; + } + }, { + key: "getToastElement", + value: function getToastElement() { + return this._toastElement; + } + }, { + key: "show", + value: function show() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", ToastManager_1.ToastManager.getInstance().showToast(this)); + + case 1: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + } + }, { + key: "hide", + value: function hide() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + return _context2.abrupt("return", ToastManager_1.ToastManager.getInstance().hideToast(this)); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + } + }]); + + return Toast; +}(); + +exports.Toast = Toast; +Toast.LAST_ID = 0; +Toast.DEFAULT_DURATION = 2500; + +/***/ }), +/* 86 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -34462,7 +34610,7 @@ var LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) { /***/ }), -/* 86 */ +/* 87 */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { @@ -34476,7 +34624,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 87 */ +/* 88 */ /***/ (function(module, exports) { var id = 0; @@ -34487,14 +34635,14 @@ module.exports = function (key) { /***/ }), -/* 88 */ +/* 89 */ /***/ (function(module, exports) { module.exports = false; /***/ }), -/* 89 */ +/* 90 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 / 15.2.3.14 Object.keys(O) @@ -34507,10 +34655,10 @@ module.exports = Object.keys || function keys(O) { /***/ }), -/* 90 */ +/* 91 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var max = Math.max; var min = Math.min; module.exports = function (index, length) { @@ -34520,7 +34668,7 @@ module.exports = function (index, length) { /***/ }), -/* 91 */ +/* 92 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) @@ -34567,7 +34715,7 @@ module.exports = Object.create || function create(O, Properties) { /***/ }), -/* 92 */ +/* 93 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) @@ -34580,7 +34728,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /***/ }), -/* 93 */ +/* 94 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) @@ -34599,11 +34747,11 @@ module.exports = Object.getPrototypeOf || function (O) { /***/ }), -/* 94 */ +/* 95 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = __webpack_require__(18)('unscopables'); +var UNSCOPABLES = __webpack_require__(19)('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(52)(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { @@ -34612,7 +34760,7 @@ module.exports = function (key) { /***/ }), -/* 95 */ +/* 96 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(14); @@ -34623,11 +34771,11 @@ module.exports = function (it, TYPE) { /***/ }), -/* 96 */ +/* 97 */ /***/ (function(module, exports, __webpack_require__) { /* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(97) +var buffer = __webpack_require__(98) var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers @@ -34691,7 +34839,7 @@ SafeBuffer.allocUnsafeSlow = function (size) { /***/ }), -/* 97 */ +/* 98 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34705,9 +34853,9 @@ SafeBuffer.allocUnsafeSlow = function (size) { -var base64 = __webpack_require__(480) -var ieee754 = __webpack_require__(481) -var isArray = __webpack_require__(482) +var base64 = __webpack_require__(481) +var ieee754 = __webpack_require__(482) +var isArray = __webpack_require__(483) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer @@ -36488,7 +36636,7 @@ function isnan (val) { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(193))) /***/ }), -/* 98 */ +/* 99 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -36600,7 +36748,7 @@ var OpenSubmenuAction = /*#__PURE__*/function (_MenuAction_1$MenuAct) { exports.OpenSubmenuAction = OpenSubmenuAction; /***/ }), -/* 99 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -37306,7 +37454,7 @@ UserManager.ACCESS_CLASS_PREFIX = "access-"; UserManager.OFFLINE_ACCESSES = ["offline"]; /***/ }), -/* 100 */ +/* 101 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -37332,152 +37480,6 @@ var UpdateValuesMissingError = /** @class */ (function (_super) { //# sourceMappingURL=UpdateValuesMissingError.js.map -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Toast = void 0; - -var Helper_1 = __webpack_require__(15); - -var ToastManager_1 = __webpack_require__(259); - -var Toast = /*#__PURE__*/function () { - function Toast(message, duration, shouldTranslateOrTranslationArgs) { - _classCallCheck(this, Toast); - - this._message = message; - this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION); - this._shouldTranslate = shouldTranslateOrTranslationArgs !== false; - this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []); - this._id = Toast.LAST_ID++; - this._toastElement = null; - } - - _createClass(Toast, [{ - key: "getId", - value: function getId() { - return this._id; - } - }, { - key: "getMessage", - value: function getMessage() { - return this._message; - } - }, { - key: "getDuration", - value: function getDuration() { - return this._duration; - } - }, { - key: "isShouldTranslate", - value: function isShouldTranslate() { - return this._shouldTranslate; - } - }, { - key: "getTranslationArgs", - value: function getTranslationArgs() { - return this._translationArgs; - } - }, { - key: "setToastElement", - value: function setToastElement(element) { - this._toastElement = element; - } - }, { - key: "getToastElement", - value: function getToastElement() { - return this._toastElement; - } - }, { - key: "show", - value: function show() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", ToastManager_1.ToastManager.getInstance().showToast(this)); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - } - }, { - key: "hide", - value: function hide() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", ToastManager_1.ToastManager.getInstance().hideToast(this)); - - case 1: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - } - }]); - - return Toast; -}(); - -exports.Toast = Toast; -Toast.LAST_ID = 0; -Toast.DEFAULT_DURATION = 2500; - /***/ }), /* 102 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -37511,7 +37513,7 @@ var OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) { var def = __webpack_require__(29).f; var has = __webpack_require__(51); -var TAG = __webpack_require__(18)('toStringTag'); +var TAG = __webpack_require__(19)('toStringTag'); module.exports = function (it, tag, stat) { if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); @@ -37570,7 +37572,7 @@ module.exports = {}; var global = __webpack_require__(11); var dP = __webpack_require__(29); var DESCRIPTORS = __webpack_require__(28); -var SPECIES = __webpack_require__(18)('species'); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (KEY) { var C = global[KEY]; @@ -37640,7 +37642,7 @@ if (typeof Object.create === 'function') { /* 110 */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer // prototype class for hash functions function Hash (blockSize, finalSize) { @@ -37775,7 +37777,7 @@ exports.Context = void 0; var Helper_1 = __webpack_require__(15); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); /** * Basis-Klasse für Seiten und Fragmente */ @@ -38295,9 +38297,9 @@ exports.User = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var Role_1 = __webpack_require__(204); +var Role_1 = __webpack_require__(203); var User = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(User, _shared_1$EasySyncBas); @@ -38546,13 +38548,13 @@ var tslib_es6 = __webpack_require__(0); var BrowserDisabledDriversDummy = __webpack_require__(1); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js -var RawSqlResultsToEntityTransformer = __webpack_require__(286); +var RawSqlResultsToEntityTransformer = __webpack_require__(287); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js -var PessimisticLockTransactionRequiredError = __webpack_require__(152); +var PessimisticLockTransactionRequiredError = __webpack_require__(153); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js -var NoVersionOrUpdateDateColumnError = __webpack_require__(153); +var NoVersionOrUpdateDateColumnError = __webpack_require__(154); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js var OptimisticLockVersionMismatchError = __webpack_require__(130); @@ -38570,7 +38572,7 @@ var RelationIdAttribute = __webpack_require__(118); var RelationCountAttribute = __webpack_require__(119); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/DriverUtils.js -var DriverUtils = __webpack_require__(20); +var DriverUtils = __webpack_require__(21); // CONCATENATED MODULE: ./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js @@ -39022,13 +39024,13 @@ var RelationCountMetadataToAttributeTransformer_RelationCountMetadataToAttribute var QueryBuilder = __webpack_require__(40); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js -var LockNotSupportedOnGivenDriverError = __webpack_require__(85); +var LockNotSupportedOnGivenDriverError = __webpack_require__(86); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js + 1 modules var AbstractSqliteDriver = __webpack_require__(16); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js -var OffsetWithoutLimitNotSupportedError = __webpack_require__(159); +var OffsetWithoutLimitNotSupportedError = __webpack_require__(160); // EXTERNAL MODULE: ./node_modules/typeorm/browser/subscriber/BroadcasterResult.js var BroadcasterResult = __webpack_require__(8); @@ -41224,7 +41226,7 @@ exports.f = {}.propertyIsEnumerable; // getting tag from 19.1.3.6 Object.prototype.toString() var cof = __webpack_require__(75); -var TAG = __webpack_require__(18)('toStringTag'); +var TAG = __webpack_require__(19)('toStringTag'); // ES3 wrong here var ARG = cof(function () { return arguments; }()) == 'Arguments'; @@ -41253,8 +41255,8 @@ module.exports = function (it) { // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = __webpack_require__(13); -var aFunction = __webpack_require__(63); -var SPECIES = __webpack_require__(18)('species'); +var aFunction = __webpack_require__(64); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; @@ -41332,15 +41334,15 @@ Object.defineProperty(exports, "__esModule", { }); exports.UserSite = void 0; -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var client_1 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); -var NotAllowedSite_1 = __webpack_require__(272); +var NotAllowedSite_1 = __webpack_require__(273); var UserSite = /*#__PURE__*/function (_client_1$DelegateSit) { _inherits(UserSite, _client_1$DelegateSit); @@ -41583,9 +41585,9 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(78), exports); -__exportStar(__webpack_require__(202), exports); +__exportStar(__webpack_require__(201), exports); -__exportStar(__webpack_require__(203), exports); +__exportStar(__webpack_require__(202), exports); /***/ }), /* 128 */ @@ -41659,19 +41661,19 @@ exports.EasySyncClientDb = void 0; var client_1 = __webpack_require__(4); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var ClientModel_1 = __webpack_require__(276); +var ClientModel_1 = __webpack_require__(277); var EasySyncBaseModel_1 = __webpack_require__(78); -var EasySyncPartialModel_1 = __webpack_require__(202); +var EasySyncPartialModel_1 = __webpack_require__(201); -var ClientPartialModel_1 = __webpack_require__(277); +var ClientPartialModel_1 = __webpack_require__(278); -var FileMedium_1 = __webpack_require__(203); +var FileMedium_1 = __webpack_require__(202); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); var EasySyncClientDb = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(EasySyncClientDb, _cordova_sites_databa); @@ -41768,7 +41770,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.LastSyncDates = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var LastSyncDates = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(LastSyncDates, _cordova_sites_databa); @@ -41920,29 +41922,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(150), exports); - -__exportStar(__webpack_require__(276), exports); +__exportStar(__webpack_require__(151), exports); __exportStar(__webpack_require__(277), exports); +__exportStar(__webpack_require__(278), exports); + __exportStar(__webpack_require__(128), exports); -__exportStar(__webpack_require__(206), exports); - -__exportStar(__webpack_require__(274), exports); +__exportStar(__webpack_require__(205), exports); __exportStar(__webpack_require__(275), exports); +__exportStar(__webpack_require__(276), exports); + __exportStar(__webpack_require__(129), exports); -__exportStar(__webpack_require__(210), exports); +__exportStar(__webpack_require__(209), exports); -__exportStar(__webpack_require__(530), exports); +__exportStar(__webpack_require__(533), exports); -__exportStar(__webpack_require__(531), exports); +__exportStar(__webpack_require__(534), exports); -__exportStar(__webpack_require__(532), exports); +__exportStar(__webpack_require__(535), exports); /***/ }), /* 133 */ @@ -41976,27 +41978,27 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(126), exports); -__exportStar(__webpack_require__(273), exports); +__exportStar(__webpack_require__(274), exports); -__exportStar(__webpack_require__(205), exports); +__exportStar(__webpack_require__(204), exports); -__exportStar(__webpack_require__(149), exports); +__exportStar(__webpack_require__(150), exports); -__exportStar(__webpack_require__(529), exports); +__exportStar(__webpack_require__(532), exports); -__exportStar(__webpack_require__(533), exports); - -__exportStar(__webpack_require__(271), exports); - -__exportStar(__webpack_require__(148), exports); +__exportStar(__webpack_require__(536), exports); __exportStar(__webpack_require__(272), exports); -__exportStar(__webpack_require__(535), exports); +__exportStar(__webpack_require__(149), exports); -__exportStar(__webpack_require__(99), exports); +__exportStar(__webpack_require__(273), exports); -__exportStar(__webpack_require__(269), exports); +__exportStar(__webpack_require__(538), exports); + +__exportStar(__webpack_require__(100), exports); + +__exportStar(__webpack_require__(270), exports); /***/ }), /* 134 */ @@ -42011,7 +42013,7 @@ var store = global[SHARED] || (global[SHARED] = {}); return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, - mode: __webpack_require__(88) ? 'pure' : 'global', + mode: __webpack_require__(89) ? 'pure' : 'global', copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); @@ -42024,7 +42026,7 @@ var store = global[SHARED] || (global[SHARED] = {}); // true -> Array#includes var toIObject = __webpack_require__(53); var toLength = __webpack_require__(23); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); module.exports = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIObject($this); @@ -42067,7 +42069,7 @@ module.exports = Array.isArray || function isArray(arg) { /* 138 */ /***/ (function(module, exports, __webpack_require__) { -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var SAFE_CLOSING = false; try { @@ -42150,7 +42152,7 @@ var redefine = __webpack_require__(45); var hide = __webpack_require__(52); var fails = __webpack_require__(12); var defined = __webpack_require__(76); -var wks = __webpack_require__(18); +var wks = __webpack_require__(19); var regexpExec = __webpack_require__(185); var SPECIES = wks('species'); @@ -42246,7 +42248,7 @@ module.exports = function (KEY, length, exec) { /* 142 */ /***/ (function(module, exports, __webpack_require__) { -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var call = __webpack_require__(228); var isArrayIter = __webpack_require__(180); var anObject = __webpack_require__(13); @@ -42381,7 +42383,7 @@ module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { var global = __webpack_require__(11); var hide = __webpack_require__(52); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); var TYPED = uid('typed_array'); var VIEW = uid('view'); var ABV = !!(global.ArrayBuffer && global.DataView); @@ -42483,11 +42485,11 @@ var Context_1 = __webpack_require__(111); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var EventManager_1 = __webpack_require__(198); +var EventManager_1 = __webpack_require__(197); /** * Basisklasse für eine Seite */ @@ -42978,6 +42980,30 @@ AbstractSite.EVENT = { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(__webpack_require__(492), exports); +__exportStar(__webpack_require__(253), exports); +__exportStar(__webpack_require__(493), exports); +__exportStar(__webpack_require__(494), exports); +__exportStar(__webpack_require__(27), exports); +//# sourceMappingURL=client.js.map + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -43610,7 +43636,7 @@ BaseDatabase.TYPES = { }; /***/ }), -/* 148 */ +/* 149 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43683,15 +43709,15 @@ var UserSite_1 = __webpack_require__(126); var client_1 = __webpack_require__(4); -var view = __webpack_require__(525); +var view = __webpack_require__(528); -var StartUserSiteMenuAction_1 = __webpack_require__(205); +var StartUserSiteMenuAction_1 = __webpack_require__(204); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); -var ForgotPasswordSite_1 = __webpack_require__(271); +var ForgotPasswordSite_1 = __webpack_require__(272); var LoginSite = /*#__PURE__*/function (_client_1$MenuSite) { _inherits(LoginSite, _client_1$MenuSite); @@ -43840,7 +43866,7 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 149 */ +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43879,7 +43905,7 @@ exports.UserMenuAction = void 0; var client_1 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); var Helper_1 = __webpack_require__(7); @@ -43926,7 +43952,7 @@ var UserMenuAction = /*#__PURE__*/function (_client_1$MenuAction) { exports.UserMenuAction = UserMenuAction; /***/ }), -/* 150 */ +/* 151 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43997,11 +44023,11 @@ exports.ClientFileMedium = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var FileTransferPromise_1 = __webpack_require__(274); +var FileTransferPromise_1 = __webpack_require__(275); var Helper_1 = __webpack_require__(7); -var FilePromise_1 = __webpack_require__(206); +var FilePromise_1 = __webpack_require__(205); var ClientFileMedium = /*#__PURE__*/function (_EasySyncBaseModel_1$) { _inherits(ClientFileMedium, _EasySyncBaseModel_1$); @@ -44165,7 +44191,7 @@ var ClientFileMedium = /*#__PURE__*/function (_EasySyncBaseModel_1$) { exports.ClientFileMedium = ClientFileMedium; /***/ }), -/* 151 */ +/* 152 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44197,7 +44223,7 @@ var CannotCreateEntityIdMapError = /** @class */ (function (_super) { /***/ }), -/* 152 */ +/* 153 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44224,7 +44250,7 @@ var PessimisticLockTransactionRequiredError = /** @class */ (function (_super) { /***/ }), -/* 153 */ +/* 154 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44251,7 +44277,7 @@ var NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) { /***/ }), -/* 154 */ +/* 155 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44275,7 +44301,7 @@ var Brackets = /** @class */ (function () { /***/ }), -/* 155 */ +/* 156 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44294,7 +44320,7 @@ function In(value) { /***/ }), -/* 156 */ +/* 157 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44321,7 +44347,7 @@ var InsertValuesMissingError = /** @class */ (function (_super) { /***/ }), -/* 157 */ +/* 158 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44340,7 +44366,7 @@ var DeleteResult = /** @class */ (function () { /***/ }), -/* 158 */ +/* 159 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44366,7 +44392,7 @@ var MissingDeleteDateColumnError = /** @class */ (function (_super) { /***/ }), -/* 159 */ +/* 160 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44393,7 +44419,7 @@ var OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) { /***/ }), -/* 160 */ +/* 161 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -44464,7 +44490,7 @@ exports.NavbarFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var defaultViewNavbar = __webpack_require__(509); +var defaultViewNavbar = __webpack_require__(510); var MenuAction_1 = __webpack_require__(80); @@ -44472,13 +44498,13 @@ var Helper_1 = __webpack_require__(15); var Context_1 = __webpack_require__(111); -var Menu_1 = __webpack_require__(200); +var Menu_1 = __webpack_require__(199); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); var DropdownRenderer_1 = __webpack_require__(260); -var AccordionRenderer_1 = __webpack_require__(201); +var AccordionRenderer_1 = __webpack_require__(200); var ColorIndicator_1 = __webpack_require__(256); @@ -45050,598 +45076,6 @@ NavbarFragment.onLogoClickListener = function () { NavbarFragment.title = "MeinBerufBau"; NavbarFragment.defaultActions = []; -/***/ }), -/* 161 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Form = void 0; - -var DataManager_1 = __webpack_require__(68); - -var Helper_1 = __webpack_require__(15); - -var Translator_1 = __webpack_require__(32); - -var Toast_1 = __webpack_require__(101); - -var Form = /*#__PURE__*/function () { - function Form(formElem, urlOrCallback, method) { - var _this = this; - - _classCallCheck(this, Form); - - this._formElem = formElem; - this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); - this._elementChangeListener = null; - this._validators = []; - this._isBusy = false; - - if (typeof urlOrCallback === "string") { - this._submitHandler = function (values) { - if (_this._method.toLowerCase() === "get") { - return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); - } else {//TODO, wenn Serververbindung kommt - // return (DataManager.send(urlOrCallback, values)); - } - }; - } else { - this._submitHandler = urlOrCallback; - } - - this._editors = []; - this._submitCallback = null; - - this.errorCallback = function (errors) { - return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this.setErrors(errors); - - case 2: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - }; - - formElem.addEventListener("submit", function (e) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - e.preventDefault(); - _context2.next = 3; - return self.doSubmit(e); - - case 3: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - }); - var self = this; - - _toConsumableArray(formElem.elements).forEach(function (element) { - element.addEventListener("change", function () { - if (this.value.trim() !== "") { - this.classList.add("notEmpty"); - } else { - this.classList.remove("notEmpty"); - } - - this.setCustomValidity(""); - - if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { - self._elementChangeListener(element, this); - } - - this.setCustomValidity(""); - - if (element.accept && element.accept.indexOf("image") !== -1) { - if (element.files && element.files[0]) { - var reader = new FileReader(); - - reader.onload = function (e) { - var previewElem = formElem.querySelector("." + element.name + "-preview"); - - if (previewElem) { - previewElem.src = e.target["result"]; - } - }; - - reader.readAsDataURL(element.files[0]); - } else { - formElem.querySelector("." + element.name + "-preview").src = ""; - } - } - }); - element.addEventListener("keydown", function () { - this.setCustomValidity(""); - }); - }); - } - - _createClass(Form, [{ - key: "addValidator", - value: function addValidator(validatorCallback) { - this._validators.push(validatorCallback); - } - }, { - key: "onError", - value: function onError(errorHandler) { - this.errorCallback = errorHandler; - } - }, { - key: "addEditor", - value: function addEditor(e) { - this._editors.push(e); - } - }, { - key: "doSubmit", - value: function doSubmit(e) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { - var res; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - if (this._isBusy) { - _context3.next = 5; - break; - } - - _context3.next = 3; - return this.submit(); - - case 3: - res = _context3.sent; - return _context3.abrupt("return", res); - - case 5: - return _context3.abrupt("return", false); - - case 6: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); - } - }, { - key: "setValues", - value: function setValues(valuePromise) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { - var values, k, options, val, option, previewImage; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - this.setIsBusy(true); - _context4.next = 3; - return Promise.resolve(valuePromise); - - case 3: - values = _context4.sent; - this.setIsBusy(false); - - for (k in values) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { - options = this._formElem.elements[k].options; - - for (val in values[k + "Options"]) { - option = document.createElement("option"); - option.value = val; - option.innerText = values[k + "Options"][val]; - options.add(option); - } - } - - if (this._formElem.elements[k].type && (this._formElem.elements[k].type === "checkbox" || this._formElem.elements[k].type === "radio")) { - this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k]; - } else if (this._formElem.elements[k].type && this._formElem.elements[k].type === "file") { - if (this._formElem.elements[k + "-hidden"]) { - this._formElem.elements[k + "-hidden"].value = values[k]; - } - - if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf("image") !== -1) { - previewImage = this._formElem.querySelector("." + k + "-preview"); - - if (previewImage) { - previewImage.src = values[k]; - } - } - } else { - this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); - - if (this._formElem.elements[k].classList) { - if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { - this._formElem.elements[k].classList.add("notEmpty"); - } else { - this._formElem.elements[k].classList.remove("notEmpty"); - } - } - } - } - } - - return _context4.abrupt("return", this); - - case 7: - case "end": - return _context4.stop(); - } - } - }, _callee4, this); - })); - } - }, { - key: "getValues", - value: function getValues(filesToBase64) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { - var valuesFormData, values; - return regeneratorRuntime.wrap(function _callee5$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - valuesFormData = new FormData(this._formElem); - values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { - return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); - }, {}); - - if (!Helper_1.Helper.nonNull(filesToBase64, true)) { - _context5.next = 6; - break; - } - - _context5.next = 5; - return Form.filesToBase64(values); - - case 5: - values = _context5.sent; - - case 6: - return _context5.abrupt("return", values); - - case 7: - case "end": - return _context5.stop(); - } - } - }, _callee5, this); - })); - } - }, { - key: "setElementChangeListener", - value: function setElementChangeListener(listener) { - this._elementChangeListener = listener; - } - }, { - key: "clearErrors", - value: function clearErrors() { - var _this2 = this; - - Object.keys(this._formElem.elements).forEach(function (elemKey) { - _this2._formElem.elements[elemKey].setCustomValidity(""); - }); - } - }, { - key: "setErrors", - value: function setErrors(errors) { - var hasElem = false; - var firstError = null; // let notCatchedErrors = []; - - for (var k in errors) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) { - this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); - - hasElem = true; - } else { - new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); - } // if (Helper.isNull(firstError)) { - // firstError = ; - // } - - } // if (!hasElem && Helper.isNotNull(firstError)) { - // for (let k in this._formElem.elements) { - // if (this._formElem.elements[k].type !== "hidden") { - // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); - // hasElem = true; - // break; - // } - // } - // } - - - if (hasElem) { - "reportValidity" in this._formElem && this._formElem.reportValidity(); - } - } - }, { - key: "setIsBusy", - value: function setIsBusy(isBusy) { - this._isBusy = isBusy; - - if (this._isBusy) { - this._formElem.classList.add("sending"); - } else { - this._formElem.classList.remove("sending"); - } - } - }, { - key: "submit", - value: function submit() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { - var res; - return regeneratorRuntime.wrap(function _callee6$(_context6) { - while (1) { - switch (_context6.prev = _context6.next) { - case 0: - this._editors.forEach(function (e) { - return e.updateSourceElement(); - }); - - this.setIsBusy(true); - _context6.next = 4; - return this.validate(); - - case 4: - if (!_context6.sent) { - _context6.next = 24; - break; - } - - res = false; - _context6.prev = 6; - _context6.t0 = this; - _context6.next = 10; - return this.getValues(); - - case 10: - _context6.t1 = _context6.sent; - _context6.t2 = this; - _context6.next = 14; - return _context6.t0._submitHandler.call(_context6.t0, _context6.t1, _context6.t2); - - case 14: - res = _context6.sent; - _context6.next = 20; - break; - - case 17: - _context6.prev = 17; - _context6.t3 = _context6["catch"](6); - console.error(_context6.t3); - - case 20: - _context6.prev = 20; - this.setIsBusy(false); - return _context6.finish(20); - - case 23: - return _context6.abrupt("return", res); - - case 24: - this.setIsBusy(false); - return _context6.abrupt("return", false); - - case 26: - case "end": - return _context6.stop(); - } - } - }, _callee6, this, [[6, 17, 20, 23]]); - })); - } - }, { - key: "validate", - value: function validate() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { - var _this3 = this; - - var values, res, hasErrors, errors; - return regeneratorRuntime.wrap(function _callee8$(_context8) { - while (1) { - switch (_context8.prev = _context8.next) { - case 0: - if (!("reportValidity" in this._formElem && !this._formElem.reportValidity())) { - _context8.next = 2; - break; - } - - return _context8.abrupt("return", false); - - case 2: - _context8.next = 4; - return this.getValues(); - - case 4: - values = _context8.sent; - _context8.next = 7; - return Helper_1.Helper.asyncForEach(this._validators, function (validator) { - return __awaiter(_this3, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { - return regeneratorRuntime.wrap(function _callee7$(_context7) { - while (1) { - switch (_context7.prev = _context7.next) { - case 0: - return _context7.abrupt("return", validator(values, this)); - - case 1: - case "end": - return _context7.stop(); - } - } - }, _callee7, this); - })); - }, true); - - case 7: - res = _context8.sent; - hasErrors = false; - errors = {}; - res.forEach(function (value) { - if (value !== true) { - hasErrors = true; - - if (_typeof(value) === "object") { - for (var k in value) { - errors[k] = value[k]; - } - } - } - }); - - if (!hasErrors) { - _context8.next = 15; - break; - } - - _context8.next = 14; - return this.setErrors(errors); - - case 14: - return _context8.abrupt("return", false); - - case 15: - return _context8.abrupt("return", true); - - case 16: - case "end": - return _context8.stop(); - } - } - }, _callee8, this); - })); - } - }, { - key: "onSubmit", - value: function onSubmit(callback) { - this._submitCallback = callback; - } - }, { - key: "getFormElement", - value: function getFormElement() { - return this._formElem; - } - }], [{ - key: "filesToBase64", - value: function filesToBase64(values) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { - var filePromises; - return regeneratorRuntime.wrap(function _callee9$(_context9) { - while (1) { - switch (_context9.prev = _context9.next) { - case 0: - filePromises = []; - Object.keys(values).forEach(function (key) { - if (values[key] instanceof Blob) { - filePromises.push(new Promise(function (resolve, reject) { - var reader = new FileReader(); - - reader.onload = function () { - return resolve(reader.result); - }; - - reader.onerror = function (error) { - return reject(error); - }; - - reader.readAsDataURL(values[key]); - }).then(function (base64) { - return values[key] = base64; - })); - } - }); - _context9.next = 4; - return Promise.all(filePromises); - - case 4: - return _context9.abrupt("return", values); - - case 5: - case "end": - return _context9.stop(); - } - } - }, _callee9); - })); - } - }]); - - return Form; -}(); - -exports.Form = Form; - /***/ }), /* 162 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -46365,7 +45799,7 @@ module.exports = function (it) { /* 165 */ /***/ (function(module, exports, __webpack_require__) { -exports.f = __webpack_require__(18); +exports.f = __webpack_require__(19); /***/ }), @@ -46373,7 +45807,7 @@ exports.f = __webpack_require__(18); /***/ (function(module, exports, __webpack_require__) { var shared = __webpack_require__(134)('keys'); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); module.exports = function (key) { return shared[key] || (shared[key] = uid(key)); }; @@ -46413,7 +45847,7 @@ module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line function (test, buggy, set) { try { - set = __webpack_require__(62)(Function.call, __webpack_require__(65).f(Object.prototype, '__proto__').set, 2); + set = __webpack_require__(63)(Function.call, __webpack_require__(66).f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch (e) { buggy = true; } @@ -46457,7 +45891,7 @@ module.exports = function (that, target, C) { "use strict"; -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var defined = __webpack_require__(76); module.exports = function repeat(count) { @@ -46501,7 +45935,7 @@ module.exports = (!$expm1 /* 175 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var defined = __webpack_require__(76); // true -> String#at // false -> String#codePointAt @@ -46526,15 +45960,15 @@ module.exports = function (TO_STRING) { "use strict"; -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var $export = __webpack_require__(3); var redefine = __webpack_require__(45); var hide = __webpack_require__(52); var Iterators = __webpack_require__(105); var $iterCreate = __webpack_require__(227); var setToStringTag = __webpack_require__(103); -var getPrototypeOf = __webpack_require__(93); -var ITERATOR = __webpack_require__(18)('iterator'); +var getPrototypeOf = __webpack_require__(94); +var ITERATOR = __webpack_require__(19)('iterator'); var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` var FF_ITERATOR = '@@iterator'; var KEYS = 'keys'; @@ -46617,7 +46051,7 @@ module.exports = function (that, searchString, NAME) { // 7.2.8 IsRegExp(argument) var isObject = __webpack_require__(14); var cof = __webpack_require__(75); -var MATCH = __webpack_require__(18)('match'); +var MATCH = __webpack_require__(19)('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); @@ -46628,7 +46062,7 @@ module.exports = function (it) { /* 179 */ /***/ (function(module, exports, __webpack_require__) { -var MATCH = __webpack_require__(18)('match'); +var MATCH = __webpack_require__(19)('match'); module.exports = function (KEY) { var re = /./; try { @@ -46648,7 +46082,7 @@ module.exports = function (KEY) { // check on default Array iterator var Iterators = __webpack_require__(105); -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var ArrayProto = Array.prototype; module.exports = function (it) { @@ -46663,7 +46097,7 @@ module.exports = function (it) { "use strict"; var $defineProperty = __webpack_require__(29); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); module.exports = function (object, index, value) { if (index in object) $defineProperty.f(object, index, createDesc(0, value)); @@ -46676,7 +46110,7 @@ module.exports = function (object, index, value) { /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(124); -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var Iterators = __webpack_require__(105); module.exports = __webpack_require__(26).getIteratorMethod = function (it) { if (it != undefined) return it[ITERATOR] @@ -46693,7 +46127,7 @@ module.exports = __webpack_require__(26).getIteratorMethod = function (it) { // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) var toObject = __webpack_require__(36); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); module.exports = function fill(value /* , start = 0, end = @length */) { var O = toObject(this); @@ -46713,7 +46147,7 @@ module.exports = function fill(value /* , start = 0, end = @length */) { "use strict"; -var addToUnscopables = __webpack_require__(94); +var addToUnscopables = __webpack_require__(95); var step = __webpack_require__(232); var Iterators = __webpack_require__(105); var toIObject = __webpack_require__(53); @@ -46832,7 +46266,7 @@ module.exports = function (S, index, unicode) { /* 187 */ /***/ (function(module, exports, __webpack_require__) { -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var invoke = __webpack_require__(221); var html = __webpack_require__(168); var cel = __webpack_require__(164); @@ -46926,16 +46360,16 @@ module.exports = { var global = __webpack_require__(11); var DESCRIPTORS = __webpack_require__(28); -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var $typed = __webpack_require__(145); var hide = __webpack_require__(52); var redefineAll = __webpack_require__(108); var fails = __webpack_require__(12); var anInstance = __webpack_require__(107); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var toIndex = __webpack_require__(240); -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var dP = __webpack_require__(29).f; var arrayFill = __webpack_require__(183); var setToStringTag = __webpack_require__(103); @@ -47436,10 +46870,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_cockroachdb_CockroachDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _QueryBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(40); -/* harmony import */ var _util_RandomGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61); +/* harmony import */ var _util_RandomGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62); /* harmony import */ var _result_InsertResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); /* harmony import */ var _error_ReturningStatementNotSupportedError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72); -/* harmony import */ var _error_InsertValuesMissingError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(156); +/* harmony import */ var _error_InsertValuesMissingError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(157); /* harmony import */ var _ReturningResultsEntityUpdator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(120); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16); /* harmony import */ var _driver_sqljs_SqljsDriver__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(41); @@ -48054,7 +47488,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(8); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(16); /* harmony import */ var _error_LimitOnUpdateNotSupportedError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(116); -/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(100); +/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(101); /* harmony import */ var _error_EntityColumnNotFound__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(114); @@ -48591,7 +48025,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_cockroachdb_CockroachDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _QueryBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(40); -/* harmony import */ var _result_DeleteResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(157); +/* harmony import */ var _result_DeleteResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(158); /* harmony import */ var _error_ReturningStatementNotSupportedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(72); /* harmony import */ var _driver_sqljs_SqljsDriver__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(8); @@ -48855,23 +48289,47 @@ var DeleteQueryBuilder = /** @class */ (function (_super) { "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(491), exports); -__exportStar(__webpack_require__(253), exports); -__exportStar(__webpack_require__(492), exports); -__exportStar(__webpack_require__(493), exports); -__exportStar(__webpack_require__(27), exports); -//# sourceMappingURL=client.js.map + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.EventManager = void 0; + +var cs_event_manager_1 = __webpack_require__(495); + +var EventManager = /*#__PURE__*/function (_cs_event_manager_1$E) { + _inherits(EventManager, _cs_event_manager_1$E); + + var _super = _createSuper(EventManager); + + function EventManager() { + _classCallCheck(this, EventManager); + + return _super.apply(this, arguments); + } + + return EventManager; +}(cs_event_manager_1.EventManager); + +exports.EventManager = EventManager; /***/ }), /* 198 */ @@ -48880,54 +48338,6 @@ __exportStar(__webpack_require__(27), exports); "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.EventManager = void 0; - -var cs_event_manager_1 = __webpack_require__(494); - -var EventManager = /*#__PURE__*/function (_cs_event_manager_1$E) { - _inherits(EventManager, _cs_event_manager_1$E); - - var _super = _createSuper(EventManager); - - function EventManager() { - _classCallCheck(this, EventManager); - - return _super.apply(this, arguments); - } - - return EventManager; -}(cs_event_manager_1.EventManager); - -exports.EventManager = EventManager; - -/***/ }), -/* 199 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -48951,7 +48361,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.TemplateSite = void 0; -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var MasterSite_1 = __webpack_require__(258); /** @@ -48996,7 +48406,7 @@ var TemplateSite = /*#__PURE__*/function (_MasterSite_1$MasterS) { exports.TemplateSite = TemplateSite; /***/ }), -/* 200 */ +/* 199 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49017,7 +48427,7 @@ var Helper_1 = __webpack_require__(15); var MenuAction_1 = __webpack_require__(80); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind @@ -49288,7 +48698,7 @@ var Menu = /*#__PURE__*/function () { exports.Menu = Menu; /***/ }), -/* 201 */ +/* 200 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49337,13 +48747,13 @@ Object.defineProperty(exports, "__esModule", { }); exports.AccordionRenderer = void 0; -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); var MenuRenderer_1 = __webpack_require__(261); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); /** * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist */ @@ -49512,7 +48922,7 @@ var AccordionRenderer = /*#__PURE__*/function (_MenuRenderer_1$MenuR) { exports.AccordionRenderer = AccordionRenderer; /***/ }), -/* 202 */ +/* 201 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49589,7 +48999,7 @@ var Helper_1 = __webpack_require__(7); var XSSHelper_1 = __webpack_require__(251); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var typeorm = _typeorm; // if (typeorm.default) { // typeorm = typeorm.default; @@ -49894,7 +49304,7 @@ exports.EasySyncPartialModel = EasySyncPartialModel; EasySyncPartialModel.CAN_BE_SYNCED = true; /***/ }), -/* 203 */ +/* 202 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49933,7 +49343,7 @@ exports.FileMedium = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var Helper_1 = __webpack_require__(7); @@ -50008,7 +49418,7 @@ FileMedium.SCHEMA_NAME = "FileMedium"; BaseDatabase_1.BaseDatabase.addModel(FileMedium); /***/ }), -/* 204 */ +/* 203 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50047,9 +49457,9 @@ exports.Role = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var Access_1 = __webpack_require__(270); +var Access_1 = __webpack_require__(271); var Role = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(Role, _shared_1$EasySyncBas); @@ -50140,7 +49550,7 @@ Role.CAN_BE_SYNCED = false; cordova_sites_database_1.BaseDatabase.addModel(Role); /***/ }), -/* 205 */ +/* 204 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50169,7 +49579,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.StartUserSiteMenuAction = void 0; -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); var client_1 = __webpack_require__(4); @@ -50198,7 +49608,7 @@ var StartUserSiteMenuAction = /*#__PURE__*/function (_UserMenuAction_1$Use) { exports.StartUserSiteMenuAction = StartUserSiteMenuAction; /***/ }), -/* 206 */ +/* 205 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50249,7 +49659,7 @@ exports.FilePromise = void 0; var Helper_1 = __webpack_require__(7); -var FileWriterPromise_1 = __webpack_require__(275); +var FileWriterPromise_1 = __webpack_require__(276); var FilePromise = /*#__PURE__*/function () { function FilePromise(fileEntry) { @@ -50318,7 +49728,7 @@ var FilePromise = /*#__PURE__*/function () { exports.FilePromise = FilePromise; /***/ }), -/* 207 */ +/* 206 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -50780,7 +50190,7 @@ var RelationQueryBuilder_RelationQueryBuilder = /** @class */ (function (_super) /***/ }), -/* 208 */ +/* 207 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50797,7 +50207,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.ShareManager = void 0; -var ShareDialog_1 = __webpack_require__(266); +var ShareDialog_1 = __webpack_require__(267); var ShareManager = /*#__PURE__*/function () { function ShareManager() { @@ -50831,7 +50241,7 @@ var ShareManager = /*#__PURE__*/function () { exports.ShareManager = ShareManager; /***/ }), -/* 209 */ +/* 208 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50879,7 +50289,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var BaseModel = /*#__PURE__*/function () { function BaseModel() { @@ -51185,7 +50595,7 @@ BaseModel.RELATION = { }; /***/ }), -/* 210 */ +/* 209 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -51238,7 +50648,7 @@ var LastSyncDates_1 = __webpack_require__(129); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncClientDb_1 = __webpack_require__(128); @@ -51246,11 +50656,11 @@ var typeorm = __webpack_require__(47); var EasySyncBaseModel_1 = __webpack_require__(78); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); -var FileMedium_1 = __webpack_require__(203); +var FileMedium_1 = __webpack_require__(202); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var SyncJob = /*#__PURE__*/function () { function SyncJob() { @@ -52021,6 +51431,598 @@ var SyncJob = /*#__PURE__*/function () { exports.SyncJob = SyncJob; SyncJob.SYNC_PATH_PREFIX = "sync"; +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Form = void 0; + +var DataManager_1 = __webpack_require__(59); + +var Helper_1 = __webpack_require__(15); + +var Translator_1 = __webpack_require__(30); + +var Toast_1 = __webpack_require__(85); + +var Form = /*#__PURE__*/function () { + function Form(formElem, urlOrCallback, method) { + var _this = this; + + _classCallCheck(this, Form); + + this._formElem = formElem; + this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); + this._elementChangeListener = null; + this._validators = []; + this._isBusy = false; + + if (typeof urlOrCallback === "string") { + this._submitHandler = function (values) { + if (_this._method.toLowerCase() === "get") { + return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); + } else {//TODO, wenn Serververbindung kommt + // return (DataManager.send(urlOrCallback, values)); + } + }; + } else { + this._submitHandler = urlOrCallback; + } + + this._editors = []; + this._submitCallback = null; + + this.errorCallback = function (errors) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.setErrors(errors); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }; + + formElem.addEventListener("submit", function (e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + _context2.next = 3; + return self.doSubmit(e); + + case 3: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + }); + var self = this; + + _toConsumableArray(formElem.elements).forEach(function (element) { + element.addEventListener("change", function () { + if (this.value.trim() !== "") { + this.classList.add("notEmpty"); + } else { + this.classList.remove("notEmpty"); + } + + this.setCustomValidity(""); + + if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { + self._elementChangeListener(element, this); + } + + this.setCustomValidity(""); + + if (element.accept && element.accept.indexOf("image") !== -1) { + if (element.files && element.files[0]) { + var reader = new FileReader(); + + reader.onload = function (e) { + var previewElem = formElem.querySelector("." + element.name + "-preview"); + + if (previewElem) { + previewElem.src = e.target["result"]; + } + }; + + reader.readAsDataURL(element.files[0]); + } else { + formElem.querySelector("." + element.name + "-preview").src = ""; + } + } + }); + element.addEventListener("keydown", function () { + this.setCustomValidity(""); + }); + }); + } + + _createClass(Form, [{ + key: "addValidator", + value: function addValidator(validatorCallback) { + this._validators.push(validatorCallback); + } + }, { + key: "onError", + value: function onError(errorHandler) { + this.errorCallback = errorHandler; + } + }, { + key: "addEditor", + value: function addEditor(e) { + this._editors.push(e); + } + }, { + key: "doSubmit", + value: function doSubmit(e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + var res; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (this._isBusy) { + _context3.next = 5; + break; + } + + _context3.next = 3; + return this.submit(); + + case 3: + res = _context3.sent; + return _context3.abrupt("return", res); + + case 5: + return _context3.abrupt("return", false); + + case 6: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + } + }, { + key: "setValues", + value: function setValues(valuePromise) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + var values, k, options, val, option, previewImage; + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + this.setIsBusy(true); + _context4.next = 3; + return Promise.resolve(valuePromise); + + case 3: + values = _context4.sent; + this.setIsBusy(false); + + for (k in values) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { + options = this._formElem.elements[k].options; + + for (val in values[k + "Options"]) { + option = document.createElement("option"); + option.value = val; + option.innerText = values[k + "Options"][val]; + options.add(option); + } + } + + if (this._formElem.elements[k].type && (this._formElem.elements[k].type === "checkbox" || this._formElem.elements[k].type === "radio")) { + this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k]; + } else if (this._formElem.elements[k].type && this._formElem.elements[k].type === "file") { + if (this._formElem.elements[k + "-hidden"]) { + this._formElem.elements[k + "-hidden"].value = values[k]; + } + + if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf("image") !== -1) { + previewImage = this._formElem.querySelector("." + k + "-preview"); + + if (previewImage) { + previewImage.src = values[k]; + } + } + } else { + this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); + + if (this._formElem.elements[k].classList) { + if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { + this._formElem.elements[k].classList.add("notEmpty"); + } else { + this._formElem.elements[k].classList.remove("notEmpty"); + } + } + } + } + } + + return _context4.abrupt("return", this); + + case 7: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + } + }, { + key: "getValues", + value: function getValues(filesToBase64) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { + var valuesFormData, values; + return regeneratorRuntime.wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + valuesFormData = new FormData(this._formElem); + values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { + return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); + }, {}); + + if (!Helper_1.Helper.nonNull(filesToBase64, true)) { + _context5.next = 6; + break; + } + + _context5.next = 5; + return Form.filesToBase64(values); + + case 5: + values = _context5.sent; + + case 6: + return _context5.abrupt("return", values); + + case 7: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + } + }, { + key: "setElementChangeListener", + value: function setElementChangeListener(listener) { + this._elementChangeListener = listener; + } + }, { + key: "clearErrors", + value: function clearErrors() { + var _this2 = this; + + Object.keys(this._formElem.elements).forEach(function (elemKey) { + _this2._formElem.elements[elemKey].setCustomValidity(""); + }); + } + }, { + key: "setErrors", + value: function setErrors(errors) { + var hasElem = false; + var firstError = null; // let notCatchedErrors = []; + + for (var k in errors) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) { + this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); + + hasElem = true; + } else { + new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); + } // if (Helper.isNull(firstError)) { + // firstError = ; + // } + + } // if (!hasElem && Helper.isNotNull(firstError)) { + // for (let k in this._formElem.elements) { + // if (this._formElem.elements[k].type !== "hidden") { + // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); + // hasElem = true; + // break; + // } + // } + // } + + + if (hasElem) { + "reportValidity" in this._formElem && this._formElem.reportValidity(); + } + } + }, { + key: "setIsBusy", + value: function setIsBusy(isBusy) { + this._isBusy = isBusy; + + if (this._isBusy) { + this._formElem.classList.add("sending"); + } else { + this._formElem.classList.remove("sending"); + } + } + }, { + key: "submit", + value: function submit() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { + var res; + return regeneratorRuntime.wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + this._editors.forEach(function (e) { + return e.updateSourceElement(); + }); + + this.setIsBusy(true); + _context6.next = 4; + return this.validate(); + + case 4: + if (!_context6.sent) { + _context6.next = 24; + break; + } + + res = false; + _context6.prev = 6; + _context6.t0 = this; + _context6.next = 10; + return this.getValues(); + + case 10: + _context6.t1 = _context6.sent; + _context6.t2 = this; + _context6.next = 14; + return _context6.t0._submitHandler.call(_context6.t0, _context6.t1, _context6.t2); + + case 14: + res = _context6.sent; + _context6.next = 20; + break; + + case 17: + _context6.prev = 17; + _context6.t3 = _context6["catch"](6); + console.error(_context6.t3); + + case 20: + _context6.prev = 20; + this.setIsBusy(false); + return _context6.finish(20); + + case 23: + return _context6.abrupt("return", res); + + case 24: + this.setIsBusy(false); + return _context6.abrupt("return", false); + + case 26: + case "end": + return _context6.stop(); + } + } + }, _callee6, this, [[6, 17, 20, 23]]); + })); + } + }, { + key: "validate", + value: function validate() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { + var _this3 = this; + + var values, res, hasErrors, errors; + return regeneratorRuntime.wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + if (!("reportValidity" in this._formElem && !this._formElem.reportValidity())) { + _context8.next = 2; + break; + } + + return _context8.abrupt("return", false); + + case 2: + _context8.next = 4; + return this.getValues(); + + case 4: + values = _context8.sent; + _context8.next = 7; + return Helper_1.Helper.asyncForEach(this._validators, function (validator) { + return __awaiter(_this3, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { + return regeneratorRuntime.wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + return _context7.abrupt("return", validator(values, this)); + + case 1: + case "end": + return _context7.stop(); + } + } + }, _callee7, this); + })); + }, true); + + case 7: + res = _context8.sent; + hasErrors = false; + errors = {}; + res.forEach(function (value) { + if (value !== true) { + hasErrors = true; + + if (_typeof(value) === "object") { + for (var k in value) { + errors[k] = value[k]; + } + } + } + }); + + if (!hasErrors) { + _context8.next = 15; + break; + } + + _context8.next = 14; + return this.setErrors(errors); + + case 14: + return _context8.abrupt("return", false); + + case 15: + return _context8.abrupt("return", true); + + case 16: + case "end": + return _context8.stop(); + } + } + }, _callee8, this); + })); + } + }, { + key: "onSubmit", + value: function onSubmit(callback) { + this._submitCallback = callback; + } + }, { + key: "getFormElement", + value: function getFormElement() { + return this._formElem; + } + }], [{ + key: "filesToBase64", + value: function filesToBase64(values) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { + var filePromises; + return regeneratorRuntime.wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + filePromises = []; + Object.keys(values).forEach(function (key) { + if (values[key] instanceof Blob) { + filePromises.push(new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + return resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(values[key]); + }).then(function (base64) { + return values[key] = base64; + })); + } + }); + _context9.next = 4; + return Promise.all(filePromises); + + case 4: + return _context9.abrupt("return", values); + + case 5: + case "end": + return _context9.stop(); + } + } + }, _callee9); + })); + } + }]); + + return Form; +}(); + +exports.Form = Form; + /***/ }), /* 211 */ /***/ (function(module, exports, __webpack_require__) { @@ -52197,7 +52199,7 @@ exports.SetupUserManagement1000000001000 = void 0; var typeorm_1 = __webpack_require__(47); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var SetupUserManagement1000000001000 = /*#__PURE__*/function () { function SetupUserManagement1000000001000() { @@ -52678,7 +52680,7 @@ module.exports = !__webpack_require__(28) && !__webpack_require__(12)(function ( var global = __webpack_require__(11); var core = __webpack_require__(26); -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var wksExt = __webpack_require__(165); var defineProperty = __webpack_require__(29).f; module.exports = function (name) { @@ -52716,7 +52718,7 @@ module.exports = function (object, names) { var dP = __webpack_require__(29); var anObject = __webpack_require__(13); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); module.exports = __webpack_require__(28) ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); @@ -52735,7 +52737,7 @@ module.exports = __webpack_require__(28) ? Object.defineProperties : function de // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = __webpack_require__(53); -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var toString = {}.toString; var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames @@ -52762,7 +52764,7 @@ module.exports.f = function getOwnPropertyNames(it) { // 19.1.2.1 Object.assign(target, source, ...) var DESCRIPTORS = __webpack_require__(28); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var gOPS = __webpack_require__(136); var pIE = __webpack_require__(123); var toObject = __webpack_require__(36); @@ -52816,7 +52818,7 @@ module.exports = Object.is || function is(x, y) { "use strict"; -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var isObject = __webpack_require__(14); var invoke = __webpack_require__(221); var arraySlice = [].slice; @@ -52932,13 +52934,13 @@ module.exports = Math.log1p || function log1p(x) { "use strict"; -var create = __webpack_require__(91); -var descriptor = __webpack_require__(86); +var create = __webpack_require__(92); +var descriptor = __webpack_require__(87); var setToStringTag = __webpack_require__(103); var IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -__webpack_require__(52)(IteratorPrototype, __webpack_require__(18)('iterator'), function () { return this; }); +__webpack_require__(52)(IteratorPrototype, __webpack_require__(19)('iterator'), function () { return this; }); module.exports = function (Constructor, NAME, next) { Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); @@ -52969,7 +52971,7 @@ module.exports = function (iterator, fn, value, entries) { /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(383); +var speciesConstructor = __webpack_require__(384); module.exports = function (original, length) { return new (speciesConstructor(original))(length); @@ -52980,7 +52982,7 @@ module.exports = function (original, length) { /* 230 */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var toObject = __webpack_require__(36); var IObject = __webpack_require__(122); var toLength = __webpack_require__(23); @@ -53018,7 +53020,7 @@ module.exports = function (that, callbackfn, aLen, memo, isRight) { // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) var toObject = __webpack_require__(36); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { @@ -53085,20 +53087,20 @@ if (__webpack_require__(28) && /./g.flags != 'g') __webpack_require__(29).f(RegE "use strict"; -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var global = __webpack_require__(11); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var classof = __webpack_require__(124); var $export = __webpack_require__(3); var isObject = __webpack_require__(14); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); var speciesConstructor = __webpack_require__(125); var task = __webpack_require__(187).set; -var microtask = __webpack_require__(403)(); +var microtask = __webpack_require__(404)(); var newPromiseCapabilityModule = __webpack_require__(236); -var perform = __webpack_require__(404); +var perform = __webpack_require__(405); var userAgent = __webpack_require__(143); var promiseResolve = __webpack_require__(237); var PROMISE = 'Promise'; @@ -53116,7 +53118,7 @@ var USE_NATIVE = !!function () { try { // correct subclassing with @@species support var promise = $Promise.resolve(1); - var FakePromise = (promise.constructor = {})[__webpack_require__(18)('species')] = function (exec) { + var FakePromise = (promise.constructor = {})[__webpack_require__(19)('species')] = function (exec) { exec(empty, empty); }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test @@ -53379,7 +53381,7 @@ $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(138)(functio "use strict"; // 25.4.1.5 NewPromiseCapability(C) -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); function PromiseCapability(C) { var resolve, reject; @@ -53422,9 +53424,9 @@ module.exports = function (C, x) { "use strict"; var dP = __webpack_require__(29).f; -var create = __webpack_require__(91); +var create = __webpack_require__(92); var redefineAll = __webpack_require__(108); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); var $iterDefine = __webpack_require__(176); @@ -53432,7 +53434,7 @@ var step = __webpack_require__(232); var setSpecies = __webpack_require__(106); var DESCRIPTORS = __webpack_require__(28); var fastKey = __webpack_require__(83).fastKey; -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var SIZE = DESCRIPTORS ? '_s' : 'size'; var getEntry = function (that, key) { @@ -53578,9 +53580,9 @@ var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); -var createArrayMethod = __webpack_require__(67); +var createArrayMethod = __webpack_require__(68); var $has = __webpack_require__(51); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var id = 0; @@ -53663,7 +53665,7 @@ module.exports = { /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/ecma262/#sec-toindex -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); module.exports = function (it) { if (it === undefined) return 0; @@ -53679,7 +53681,7 @@ module.exports = function (it) { /***/ (function(module, exports, __webpack_require__) { // all object keys, includes non-enumerable and symbols -var gOPN = __webpack_require__(92); +var gOPN = __webpack_require__(93); var gOPS = __webpack_require__(136); var anObject = __webpack_require__(13); var Reflect = __webpack_require__(11).Reflect; @@ -53717,7 +53719,7 @@ module.exports = function (that, maxLength, fillString, left) { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(28); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var toIObject = __webpack_require__(53); var isEnum = __webpack_require__(123).f; module.exports = function (isEntries) { @@ -53778,7 +53780,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.Translator = void 0; -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); /** * Singleton-Klasse zum Übersetzen von Text-Inhalten */ @@ -54184,7 +54186,7 @@ process.umask = function() { return 0; }; var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, @@ -54317,7 +54319,7 @@ module.exports = Sha256 var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, @@ -54594,8 +54596,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16); /* harmony import */ var _error_LimitOnUpdateNotSupportedError__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(116); -/* harmony import */ var _error_MissingDeleteDateColumnError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(158); -/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(100); +/* harmony import */ var _error_MissingDeleteDateColumnError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(159); +/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(101); /* harmony import */ var _entity_schema_EntitySchema__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(74); @@ -55085,17 +55087,17 @@ var Helper_1 = __webpack_require__(15); var AbstractSite_1 = __webpack_require__(146); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Context_1 = __webpack_require__(111); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var HistoryManager_1 = __webpack_require__(255); -var EventManager_1 = __webpack_require__(198); +var EventManager_1 = __webpack_require__(197); /** * Manager-Klasse für die Seiten */ @@ -56678,7 +56680,7 @@ exports.ToastManager = void 0; var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var ToastManager = /*#__PURE__*/function () { function ToastManager() { @@ -56837,9 +56839,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.DropdownRenderer = void 0; -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); -var AccordionRenderer_1 = __webpack_require__(201); +var AccordionRenderer_1 = __webpack_require__(200); var Submenu_1 = __webpack_require__(262); /** @@ -56954,7 +56956,7 @@ exports.MenuRenderer = void 0; var Helper_1 = __webpack_require__(15); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Rendert ein Menü */ @@ -57138,11 +57140,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.Submenu = void 0; -var Menu_1 = __webpack_require__(200); +var Menu_1 = __webpack_require__(199); var Helper_1 = __webpack_require__(15); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Submenü, ein untermenü */ @@ -57546,7 +57548,7 @@ exports.ElemChooseDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var view = __webpack_require__(264); @@ -57599,6 +57601,351 @@ exports.ElemChooseDialog = ElemChooseDialog; "use strict"; +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ImageSelectionElement = void 0; + +var ViewInflater_1 = __webpack_require__(54); + +var shared_1 = __webpack_require__(17); + +var client_1 = __webpack_require__(147); + +var defaultView = __webpack_require__(519); + +var ImageSelectionElement = /*#__PURE__*/function () { + function ImageSelectionElement(name, view) { + var _this = this; + + _classCallCheck(this, ImageSelectionElement); + + this.images = {}; + this.name = name; + this.viewLoadedPromise = ViewInflater_1.ViewInflater.getInstance().load(shared_1.Helper.nonNull(view, defaultView)).then(function (v) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + this.view = v; + _context.next = 3; + return this.prepareView(); + + case 3: + this.showSelection(); + return _context.abrupt("return", v); + + case 5: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }); + } + + _createClass(ImageSelectionElement, [{ + key: "prepareView", + value: function prepareView() { + var _this2 = this; + + this.imageContainerTemplate = this.view.querySelector(".image-selection-image-container"); + this.imageContainerTemplate.remove(); + this.categoryTemplate = this.view.querySelector(".image-selection-category"); + this.categoryTemplate.remove(); + this.imageSelectionContainer = this.view.querySelector(".image-selection-category-container"); + this.imageSelectionPreviewContainer = this.view.querySelector(".image-selection-preview"); + this.inputElement = this.view.querySelector(".image-selection-value"); + this.inputElement.name = this.name; + var imageSelection = this.view.querySelector(".image-selection"); + imageSelection.addEventListener("dragenter", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.add("highlight"); + }); + imageSelection.addEventListener("dragover", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.add("highlight"); + }); + imageSelection.addEventListener("dragleave", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.remove("highlight"); + }); + imageSelection.addEventListener("drop", function (e) { + return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + var file, imageValue, base64; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.remove("highlight"); + + if (!(e instanceof DragEvent)) { + _context2.next = 15; + break; + } + + file = null; + + if (e.dataTransfer.items && e.dataTransfer.items.length >= 1) { + if (e.dataTransfer.items[0].kind === "file") { + file = e.dataTransfer.items[0].getAsFile(); + } + } else if (e.dataTransfer.files && e.dataTransfer.files.length >= 1) { + file = e.dataTransfer.files[0]; + } + + if (!(!file || !file.type.startsWith("image/"))) { + _context2.next = 8; + break; + } + + return _context2.abrupt("return"); + + case 8: + imageValue = null; + _context2.next = 11; + return new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(file); + }); + + case 11: + base64 = _context2.sent; + imageValue = { + src: base64, + name: file.name + }; + this.addImages({ + "Uploads": [imageValue] + }); + this.setValue(imageValue); + + case 15: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + }); + } + }, { + key: "showSelection", + value: function showSelection() { + var _this3 = this; + + client_1.ViewHelper.removeAllChildren(this.imageSelectionContainer); + Object.keys(this.images).sort(function (a, b) { + if (a.toLowerCase() === "uploads") { + return -1; + } else if (b.toLowerCase() === "uploads") { + return 1; + } else { + return a.localeCompare(b); + } + }).forEach(function (category) { + var categoryElement = _this3.categoryTemplate.cloneNode(true); + + categoryElement.querySelector(".image-selection-category-name").innerText = category; + + _this3.images[category].forEach(function (image) { + var imageContainerElement = _this3.createImageElement(image); + + imageContainerElement.addEventListener("click", function () { + return _this3.setValue(image); + }); + categoryElement.appendChild(imageContainerElement); + }); + + _this3.imageSelectionContainer.appendChild(categoryElement); + }); + } + }, { + key: "createImageElement", + value: function createImageElement(image) { + var imageContainerElement = this.imageContainerTemplate.cloneNode(true); + imageContainerElement.querySelector(".image-selection-image").src = image.src; + + if (image.name) { + imageContainerElement.querySelector(".image-selection-image-name").innerText = image.name; + } + + return imageContainerElement; + } + }, { + key: "setImages", + value: function setImages(images) { + this.images = images; + + if (this.view) { + this.showSelection(); + } + } + }, { + key: "addImages", + value: function addImages(images) { + var _this4 = this; + + Object.keys(images).forEach(function (category) { + if (_this4.images[category]) { + var _this4$images$categor; + + var sources = _this4.images[category].map(function (i) { + return i.src; + }); + + var newImages = images[category].filter(function (i) { + return sources.indexOf(i.src) === -1; + }); + + (_this4$images$categor = _this4.images[category]).push.apply(_this4$images$categor, _toConsumableArray(newImages)); + } else { + _this4.images[category] = images[category]; + } + }); + + if (this.view) { + this.showSelection(); + } + } + }, { + key: "getView", + value: function getView() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + return _context3.abrupt("return", this.viewLoadedPromise); + + case 1: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + } + }, { + key: "setValue", + value: function setValue(image) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.prev = 0; + + if (typeof image === "string") { + image = JSON.parse(image); + } + + _context4.next = 4; + return this.viewLoadedPromise; + + case 4: + client_1.ViewHelper.removeAllChildren(this.imageSelectionPreviewContainer); + + if (image.src) { + this.imageSelectionPreviewContainer.appendChild(this.createImageElement(image)); + } + + this.inputElement.value = JSON.stringify(image); + _context4.next = 11; + break; + + case 9: + _context4.prev = 9; + _context4.t0 = _context4["catch"](0); + + case 11: + case "end": + return _context4.stop(); + } + } + }, _callee4, this, [[0, 9]]); + })); + } + }]); + + return ImageSelectionElement; +}(); + +exports.ImageSelectionElement = ImageSelectionElement; + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -57624,9 +57971,9 @@ exports.ShareDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var view = __webpack_require__(519); +var view = __webpack_require__(522); var ShareDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { _inherits(ShareDialog, _Dialog_1$Dialog); @@ -57662,7 +58009,7 @@ var ShareDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ShareDialog = ShareDialog; /***/ }), -/* 267 */ +/* 268 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57855,7 +58202,7 @@ var AudioChain = /*#__PURE__*/function () { exports.AudioChain = AudioChain; /***/ }), -/* 268 */ +/* 269 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57867,11 +58214,11 @@ Object.defineProperty(exports, "__esModule", { var App_1 = __webpack_require__(33); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var deTranslations = __webpack_require__(520); +var deTranslations = __webpack_require__(523); -var enTranslations = __webpack_require__(521); +var enTranslations = __webpack_require__(524); App_1.App.addInitialization(function () { console.log("user trsnslation"); @@ -57882,7 +58229,7 @@ App_1.App.addInitialization(function () { }); /***/ }), -/* 269 */ +/* 270 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57894,11 +58241,11 @@ Object.defineProperty(exports, "__esModule", { var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(522); +var shared_1 = __webpack_require__(525); -var deTranslations = __webpack_require__(523); +var deTranslations = __webpack_require__(526); -var enTranslations = __webpack_require__(524); +var enTranslations = __webpack_require__(527); client_1.App.addInitialization(function () { shared_1.Translator.addDynamicTranslations({ @@ -57908,7 +58255,7 @@ client_1.App.addInitialization(function () { }); /***/ }), -/* 270 */ +/* 271 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57947,7 +58294,7 @@ exports.Access = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var Access = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(Access, _shared_1$EasySyncBas); @@ -57989,7 +58336,7 @@ Access.CAN_BE_SYNCED = false; cordova_sites_database_1.BaseDatabase.addModel(Access); /***/ }), -/* 271 */ +/* 272 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58062,11 +58409,11 @@ var UserSite_1 = __webpack_require__(126); var client_1 = __webpack_require__(4); -var view = __webpack_require__(526); +var view = __webpack_require__(529); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); var ForgotPasswordSite = /*#__PURE__*/function (_client_1$MenuSite) { _inherits(ForgotPasswordSite, _client_1$MenuSite); @@ -58260,7 +58607,7 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 272 */ +/* 273 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58331,7 +58678,7 @@ exports.NotAllowedSite = void 0; var MenuSite_1 = __webpack_require__(69); -var view = __webpack_require__(527); +var view = __webpack_require__(530); var NotAllowedSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { _inherits(NotAllowedSite, _MenuSite_1$MenuSite); @@ -58396,7 +58743,7 @@ var NotAllowedSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { exports.NotAllowedSite = NotAllowedSite; /***/ }), -/* 273 */ +/* 274 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58463,15 +58810,15 @@ exports.SelectUserDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var ViewHelper_1 = __webpack_require__(27); var Helper_1 = __webpack_require__(7); -var view = __webpack_require__(528); +var view = __webpack_require__(531); var SelectUserDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { _inherits(SelectUserDialog, _Dialog_1$Dialog); @@ -58589,7 +58936,7 @@ var SelectUserDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.SelectUserDialog = SelectUserDialog; /***/ }), -/* 274 */ +/* 275 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58640,9 +58987,9 @@ exports.FileTransferPromise = void 0; var Helper_1 = __webpack_require__(7); -var FilePromise_1 = __webpack_require__(206); +var FilePromise_1 = __webpack_require__(205); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var FileTransferPromise = /*#__PURE__*/function () { function FileTransferPromise(downloadUrl, storagePath) { @@ -58707,7 +59054,7 @@ var FileTransferPromise = /*#__PURE__*/function () { exports.FileTransferPromise = FileTransferPromise; /***/ }), -/* 275 */ +/* 276 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58802,7 +59149,7 @@ var FileWriterPromise = /*#__PURE__*/function () { exports.FileWriterPromise = FileWriterPromise; /***/ }), -/* 276 */ +/* 277 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58871,11 +59218,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.ClientModel = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var ClientModel = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(ClientModel, _cordova_sites_databa); @@ -59120,7 +59467,7 @@ ClientModel.SAVE_PATH = "/sync"; ClientModel.DELETE_PATH = "/sync/delete"; /***/ }), -/* 277 */ +/* 278 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59191,7 +59538,7 @@ exports.ClientPartialModel = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var client_1 = __webpack_require__(4); @@ -59449,7 +59796,7 @@ var ClientPartialModel = /*#__PURE__*/function (_EasySyncBaseModel_1$) { exports.ClientPartialModel = ClientPartialModel; /***/ }), -/* 278 */ +/* 279 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59500,7 +59847,7 @@ AccessEasySyncModel.ACCESS_MODIFY = false; AccessEasySyncModel.CAN_BE_SYNCED = false; /***/ }), -/* 279 */ +/* 280 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59508,19 +59855,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/help.png"); /***/ }), -/* 280 */ +/* 281 */ /***/ (function(module) { module.exports = JSON.parse("{\"won\":\"Gewonnen!\",\"continue\":\"Weiter\",\"help\":\"?\",\"not-enough-coins\":\"Du hast zu wenig Münzen!\",\"sync-error\":\"Es gab einen Fehler beim Aktualisieren der Level. Bitte stelle sicher, dass du eine aktive Internetverbindung hast und versuche es später erneut.\",\"game-ended\":\"Oh nein!
Es sieht so aus, als ob du schon alle Level gespielt hast...
Schau später noch einmal rein, evtl gibt es dann neue Level.\",\"play\":\"Spielen!\",\"tutorial-step-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen!\",\"tutorial-step-2\":\"Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-step-3\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Probiere jetzt die Hilfe aus.\",\"tutorial-step-4\":\"Große Segmente drehst du, indem du diese ziehst.\",\"extra-coins-after-first-level\":\"Für das erste Level gibt es 50 extra Münzen!\",\"dark\":\"Dunkel\",\"theme\":\"Theme:\",\"sound\":\"Sound:\",\"music\":\"Musik:\",\"credits\":\"Credits\",\"privacy-policy\":\"Datenschutzbestimmungen\",\"impressum\":\"Impressum\",\"track\":\"Anonymisierte Nutzungsdaten senden:\",\">\":\">\",\"choose-theme-dialog-title\":\"Theme auswählen:\",\"install\":\"Installieren\",\"share-dialog\":\"Teilen:\",\"credits-text\":\"Ein großer Dank geht an Hanna, denn ohne sie sähe die App nicht so aus, wie sie aussieht. Danke für deine guten Vorschläge und Ratschläge für das Design!\",\"credits-coin-text\":\"Sound:
Der Münz-Sound ist von der Webseite {0}. Alle Rechte für diesen Münz-Sound gehören {0}.\",\"credits-music-text\":\"Musik:
Bright And Beautiful - GEMAfreie Musik von {0}
Licensed under Creative Commons: By Attribution 4.0 International (CC BY 4.0)
{1}
Angepasst (geschnitten) für diese App\",\"storage-info\":\"Fortschritt {0} dauerhaft gespeichert\",\"storage-permission-not-get\":\"Der Browser gibt nicht die Erlaubnis zur dauerhaften Speicherung...\",\"storage-permission-get\":\"Die Daten sind nun dauerhaft gespeichert\",\"persist-storage-dialog-title\":\"Daten dauerhaft speichern?\",\"persist-storage-dialog-message\":\"Der Fortschritt und die Level dieser WebApp sind nur temporär gespeichert. Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:

1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.

Damit die Daten dieser Webseite nicht gelöscht werden, erlaube bitte Benachrichtigungen. Alternativ kannst du die Seite auch als Lesezeichen speichern.\",\"notification-permission-denied\":\"Die Berechtigung für Benachrichtigungen wurde verwährt\",\"already-persisted-dialog-message\":\"Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:
1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.
Du erfüllst schon ein Kriterium und daher wird dein Fortschritt dauerhaft gespeichert (außer du löscht sie)\",\"already-persisted-dialog-title\":\"Daten werden dauerhaft gespeichert!\",\"persist-storage-dialog-message-firefox\":\"Damit dein Fortschritt dauerhaft gespeichert wird, musst du zulassen, dass Daten dauerhaft gespeichert werden.\",\"warning-data-not-persistent\":\"Achtung! Dein Fortschritt kann verloren gehen! Gehe die Einstellungen für mehr Infos.\",\"version-label\":\"Version:\",\"share-text\":\"Schau dir diese coole App an:\\n{0}\",\"share\":\"Teilen\",\"document-title\":\"WordRotator\",\"document-title-empty\":\"WordRotator\",\"contact\":\"Kontakt\",\"contact text\":\"Du möchtest Kontakt mit uns aufnehmen? Kein Problem, nutze einfach das Kontaktformular oder sende uns eine E-Mail an {0}.\\n Egal, ob du uns eine E-Mail sendest oder das Kontaktformular benutzt, akzeptierst du unsere Datenschutzbestimmung\",\"e-mail\":\"E-Mailadresse\",\"privacy policy accepted\":\" akzeptiert\",\"message\":\"Nachricht\",\"send\":\"Senden\",\"the message was sent\":\"Die Nachricht wurde gesendet.\",\"wr\":\"WR\",\"tutorial\":\"Spielregeln\",\"tutorial-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen! Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-2\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Du erhältst 5 Münzen pro gewonnenes Level.\",\"tutorial-3\":\"Große Segmente drehst du, indem du diese ziehst.\",\"you solved the tutorial level!\":\"Du hast das Tutorial-Level gelöst!\"}"); /***/ }), -/* 281 */ +/* 282 */ /***/ (function(module) { module.exports = JSON.parse("{\"won\":\"Won!\",\"continue\":\"Continue\",\"help\":\"?\",\"not-enough-coins\":\"You have to few coins!\",\"sync-error\":\"Es gab einen Fehler beim Aktualisieren der Level. Bitte stelle sicher, dass du eine aktive Internetverbindung hast und versuche es später erneut.\",\"game-ended\":\"Oh nein!
Es sieht so aus, als ob du schon alle Level gespielt hast...
Schau später noch einmal rein, evtl gibt es dann neue Level.\",\"play\":\"Spielen!\",\"tutorial-step-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen!\",\"tutorial-step-2\":\"Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-step-3\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Probiere jetzt die Hilfe aus.\",\"tutorial-step-4\":\"Große Segmente drehst du, indem du diese ziehst.\",\"extra-coins-after-first-level\":\"Für das erste Level gibt es 50 extra Münzen!\",\"dark\":\"Dunkel\",\"theme\":\"Theme:\",\"sound\":\"Sound:\",\"music\":\"Musik:\",\"credits\":\"Credits\",\"privacy-policy\":\"Datenschutzbestimmungen\",\"impressum\":\"Impressum\",\"track\":\"Anonymisierte Nutzungsdaten senden:\",\">\":\">\",\"choose-theme-dialog-title\":\"Theme auswählen:\",\"install\":\"Installieren\",\"share-dialog\":\"Teilen:\",\"credits-sister-text\":\"Ich danke meiner Lieblingsschwester, denn ohne Sie würde diese App nicht so aussehen, wie sie aussieht (wahrscheinlich eher schlechter :p)\",\"credits-coin-text\":\"Sound:
Der Münz-Sound ist von der Webseite
{0}. Alle Rechte für diesen Münz-Sound gehören {0}.\",\"credits-music-text\":\"Musik:
Bright And Beautiful - GEMAfreie Musik von {0}
Licensed under Creative Commons: By Attribution 4.0 International (CC BY 4.0)
{1}
Angepasst (geschnitten) für diese App\",\"storage-info\":\"Fortschritt {0} dauerhaft gespeichert\",\"storage-permission-not-get\":\"Der Browser gibt nicht die Erlaubnis zur dauerhaften Speicherung...\",\"storage-permission-get\":\"Die Daten sind nun dauerhaft gespeichert\",\"persist-storage-dialog-title\":\"Daten dauerhaft speichern?\",\"persist-storage-dialog-message\":\"Der Fortschritt und die Level dieser WebApp sind nur temporär gespeichert. Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:

1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.

Damit die Daten dieser Webseite nicht gelöscht werden, erlaube bitte Benachrichtigungen. Alternativ kannst du die Seite auch als Lesezeichen speichern.\",\"notification-permission-denied\":\"Die Berechtigung für Benachrichtigungen wurde verwährt\",\"already-persisted-dialog-message\":\"Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:
1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.
Du erfüllst schon ein Kriterium und daher wird dein Fortschritt dauerhaft gespeichert (außer du löscht sie)\",\"already-persisted-dialog-title\":\"Daten werden dauerhaft gespeichert!\",\"persist-storage-dialog-message-firefox\":\"Damit dein Fortschritt dauerhaft gespeichert wird, musst du zulassen, dass Daten dauerhaft gespeichert werden.\",\"warning-data-not-persistent\":\"Achtung! Dein Fortschritt kann verloren gehen! Gehe die Einstellungen für mehr Infos.\",\"version-label\":\"Version:\",\"share-text\":\"Schau dir diese coole App an: {0}\",\"share\":\"Teilen\",\"document-title\":\"WordRotator\",\"document-title-empty\":\"WordRotator\",\"contact\":\"Kontakt\",\"contact text\":\"Du möchtest Kontakt mit uns aufnehmen? Kein Problem, nutze einfach das Kontaktformular oder sende uns eine E-Mail an {0}.\\n Egal, ob du uns eine E-Mail sendest oder das Kontaktformular benutzt, akzeptierst du unsere Datenschutzbestimmung\",\"e-mail\":\"E-Mailadresse\",\"privacy policy accepted\":\" akzeptiert\",\"message\":\"Nachricht\",\"send\":\"Senden\",\"the message was sent\":\"Die Nachricht wurde gesendet.\"}"); /***/ }), -/* 282 */ +/* 283 */ /***/ (function(module, exports, __webpack_require__) { var exports = module.exports = function SHA (algorithm) { @@ -59532,16 +59879,16 @@ var exports = module.exports = function SHA (algorithm) { return new Algorithm() } -exports.sha = __webpack_require__(479) -exports.sha1 = __webpack_require__(483) -exports.sha224 = __webpack_require__(484) +exports.sha = __webpack_require__(480) +exports.sha1 = __webpack_require__(484) +exports.sha224 = __webpack_require__(485) exports.sha256 = __webpack_require__(248) -exports.sha384 = __webpack_require__(485) +exports.sha384 = __webpack_require__(486) exports.sha512 = __webpack_require__(249) /***/ }), -/* 283 */ +/* 284 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59549,7 +59896,7 @@ exports.sha512 = __webpack_require__(249) /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _error_QueryRunnerAlreadyReleasedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34); /* harmony import */ var _sqlite_abstract_AbstractSqliteQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73); -/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(54); +/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55); /* harmony import */ var _error_QueryFailedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(39); @@ -59644,14 +59991,14 @@ var SqljsQueryRunner = /** @class */ (function (_super) { /***/ }), -/* 284 */ +/* 285 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NativescriptDriver; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16); -/* harmony import */ var _NativescriptQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(285); +/* harmony import */ var _NativescriptQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(286); /* harmony import */ var _error_DriverOptionNotSetError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(37); /* harmony import */ var _error_DriverPackageNotInstalledError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(71); @@ -59761,10 +60108,10 @@ var NativescriptDriver = /** @class */ (function (_super) { //# sourceMappingURL=NativescriptDriver.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), -/* 285 */ +/* 286 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59773,7 +60120,7 @@ var NativescriptDriver = /** @class */ (function (_super) { /* harmony import */ var _error_QueryRunnerAlreadyReleasedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34); /* harmony import */ var _error_QueryFailedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39); /* harmony import */ var _sqlite_abstract_AbstractSqliteQueryRunner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(73); -/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54); +/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(55); @@ -59850,14 +60197,14 @@ var NativescriptQueryRunner = /** @class */ (function (_super) { /***/ }), -/* 286 */ +/* 287 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RawSqlResultsToEntityTransformer; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); -/* harmony import */ var _driver_DriverUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20); +/* harmony import */ var _driver_DriverUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); @@ -60196,10 +60543,10 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () { //# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), -/* 287 */ +/* 288 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60232,45 +60579,26 @@ __exportStar(__webpack_require__(211), exports); __exportStar(__webpack_require__(212), exports); -__exportStar(__webpack_require__(270), exports); +__exportStar(__webpack_require__(271), exports); -__exportStar(__webpack_require__(278), exports); +__exportStar(__webpack_require__(279), exports); -__exportStar(__webpack_require__(204), exports); +__exportStar(__webpack_require__(203), exports); __exportStar(__webpack_require__(112), exports); -__exportStar(__webpack_require__(537), exports); - -__exportStar(__webpack_require__(538), exports); - -/***/ }), -/* 288 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(289); -__webpack_require__(552); -module.exports = __webpack_require__(551); +__exportStar(__webpack_require__(540), exports); +__exportStar(__webpack_require__(541), exports); /***/ }), /* 289 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - - __webpack_require__(290); +__webpack_require__(555); +module.exports = __webpack_require__(554); -var _global = _interopRequireDefault(__webpack_require__(462)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -if (_global["default"]._babelPolyfill && typeof console !== "undefined" && console.warn) { - console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended " + "and may have consequences if different versions of the polyfills are applied sequentially. " + "If you do need to load the polyfill more than once, use @babel/polyfill/noConflict " + "instead to bypass the warning."); -} - -_global["default"]._babelPolyfill = true; /***/ }), /* 290 */ @@ -60281,38 +60609,56 @@ _global["default"]._babelPolyfill = true; __webpack_require__(291); -__webpack_require__(434); +var _global = _interopRequireDefault(__webpack_require__(463)); -__webpack_require__(436); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -__webpack_require__(439); +if (_global["default"]._babelPolyfill && typeof console !== "undefined" && console.warn) { + console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended " + "and may have consequences if different versions of the polyfills are applied sequentially. " + "If you do need to load the polyfill more than once, use @babel/polyfill/noConflict " + "instead to bypass the warning."); +} -__webpack_require__(441); - -__webpack_require__(443); - -__webpack_require__(445); - -__webpack_require__(447); - -__webpack_require__(449); - -__webpack_require__(451); - -__webpack_require__(453); - -__webpack_require__(455); - -__webpack_require__(457); - -__webpack_require__(461); +_global["default"]._babelPolyfill = true; /***/ }), /* 291 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; + + __webpack_require__(292); -__webpack_require__(295); + +__webpack_require__(435); + +__webpack_require__(437); + +__webpack_require__(440); + +__webpack_require__(442); + +__webpack_require__(444); + +__webpack_require__(446); + +__webpack_require__(448); + +__webpack_require__(450); + +__webpack_require__(452); + +__webpack_require__(454); + +__webpack_require__(456); + +__webpack_require__(458); + +__webpack_require__(462); + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(293); __webpack_require__(296); __webpack_require__(297); __webpack_require__(298); @@ -60354,7 +60700,7 @@ __webpack_require__(333); __webpack_require__(334); __webpack_require__(335); __webpack_require__(336); -__webpack_require__(338); +__webpack_require__(337); __webpack_require__(339); __webpack_require__(340); __webpack_require__(341); @@ -60388,16 +60734,16 @@ __webpack_require__(368); __webpack_require__(369); __webpack_require__(370); __webpack_require__(371); -__webpack_require__(373); +__webpack_require__(372); __webpack_require__(374); -__webpack_require__(376); +__webpack_require__(375); __webpack_require__(377); __webpack_require__(378); __webpack_require__(379); __webpack_require__(380); __webpack_require__(381); __webpack_require__(382); -__webpack_require__(384); +__webpack_require__(383); __webpack_require__(385); __webpack_require__(386); __webpack_require__(387); @@ -60410,17 +60756,17 @@ __webpack_require__(393); __webpack_require__(394); __webpack_require__(395); __webpack_require__(396); -__webpack_require__(184); __webpack_require__(397); -__webpack_require__(233); +__webpack_require__(184); __webpack_require__(398); -__webpack_require__(234); +__webpack_require__(233); __webpack_require__(399); +__webpack_require__(234); __webpack_require__(400); __webpack_require__(401); __webpack_require__(402); +__webpack_require__(403); __webpack_require__(235); -__webpack_require__(405); __webpack_require__(406); __webpack_require__(407); __webpack_require__(408); @@ -60449,11 +60795,12 @@ __webpack_require__(430); __webpack_require__(431); __webpack_require__(432); __webpack_require__(433); +__webpack_require__(434); module.exports = __webpack_require__(26); /***/ }), -/* 292 */ +/* 293 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60468,24 +60815,24 @@ var META = __webpack_require__(83).KEY; var $fails = __webpack_require__(12); var shared = __webpack_require__(134); var setToStringTag = __webpack_require__(103); -var uid = __webpack_require__(87); -var wks = __webpack_require__(18); +var uid = __webpack_require__(88); +var wks = __webpack_require__(19); var wksExt = __webpack_require__(165); var wksDefine = __webpack_require__(214); -var enumKeys = __webpack_require__(294); +var enumKeys = __webpack_require__(295); var isArray = __webpack_require__(137); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var toObject = __webpack_require__(36); var toIObject = __webpack_require__(53); var toPrimitive = __webpack_require__(82); -var createDesc = __webpack_require__(86); -var _create = __webpack_require__(91); +var createDesc = __webpack_require__(87); +var _create = __webpack_require__(92); var gOPNExt = __webpack_require__(217); -var $GOPD = __webpack_require__(65); +var $GOPD = __webpack_require__(66); var $GOPS = __webpack_require__(136); var $DP = __webpack_require__(29); -var $keys = __webpack_require__(89); +var $keys = __webpack_require__(90); var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; @@ -60608,11 +60955,11 @@ if (!USE_NATIVE) { $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; - __webpack_require__(92).f = gOPNExt.f = $getOwnPropertyNames; + __webpack_require__(93).f = gOPNExt.f = $getOwnPropertyNames; __webpack_require__(123).f = $propertyIsEnumerable; $GOPS.f = $getOwnPropertySymbols; - if (DESCRIPTORS && !__webpack_require__(88)) { + if (DESCRIPTORS && !__webpack_require__(89)) { redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } @@ -60706,18 +61053,18 @@ setToStringTag(global.JSON, 'JSON', true); /***/ }), -/* 293 */ +/* 294 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(134)('native-function-to-string', Function.toString); /***/ }), -/* 294 */ +/* 295 */ /***/ (function(module, exports, __webpack_require__) { // all enumerable object keys, includes symbols -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var gOPS = __webpack_require__(136); var pIE = __webpack_require__(123); module.exports = function (it) { @@ -60734,16 +61081,16 @@ module.exports = function (it) { /***/ }), -/* 295 */ +/* 296 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -$export($export.S, 'Object', { create: __webpack_require__(91) }); +$export($export.S, 'Object', { create: __webpack_require__(92) }); /***/ }), -/* 296 */ +/* 297 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -60752,7 +61099,7 @@ $export($export.S + $export.F * !__webpack_require__(28), 'Object', { defineProp /***/ }), -/* 297 */ +/* 298 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -60761,46 +61108,31 @@ $export($export.S + $export.F * !__webpack_require__(28), 'Object', { defineProp /***/ }), -/* 298 */ +/* 299 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = __webpack_require__(53); -var $getOwnPropertyDescriptor = __webpack_require__(65).f; +var $getOwnPropertyDescriptor = __webpack_require__(66).f; -__webpack_require__(66)('getOwnPropertyDescriptor', function () { +__webpack_require__(67)('getOwnPropertyDescriptor', function () { return function getOwnPropertyDescriptor(it, key) { return $getOwnPropertyDescriptor(toIObject(it), key); }; }); -/***/ }), -/* 299 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.9 Object.getPrototypeOf(O) -var toObject = __webpack_require__(36); -var $getPrototypeOf = __webpack_require__(93); - -__webpack_require__(66)('getPrototypeOf', function () { - return function getPrototypeOf(it) { - return $getPrototypeOf(toObject(it)); - }; -}); - - /***/ }), /* 300 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.14 Object.keys(O) +// 19.1.2.9 Object.getPrototypeOf(O) var toObject = __webpack_require__(36); -var $keys = __webpack_require__(89); +var $getPrototypeOf = __webpack_require__(94); -__webpack_require__(66)('keys', function () { - return function keys(it) { - return $keys(toObject(it)); +__webpack_require__(67)('getPrototypeOf', function () { + return function getPrototypeOf(it) { + return $getPrototypeOf(toObject(it)); }; }); @@ -60809,9 +61141,14 @@ __webpack_require__(66)('keys', function () { /* 301 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.7 Object.getOwnPropertyNames(O) -__webpack_require__(66)('getOwnPropertyNames', function () { - return __webpack_require__(217).f; +// 19.1.2.14 Object.keys(O) +var toObject = __webpack_require__(36); +var $keys = __webpack_require__(90); + +__webpack_require__(67)('keys', function () { + return function keys(it) { + return $keys(toObject(it)); + }; }); @@ -60819,14 +61156,9 @@ __webpack_require__(66)('getOwnPropertyNames', function () { /* 302 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.5 Object.freeze(O) -var isObject = __webpack_require__(14); -var meta = __webpack_require__(83).onFreeze; - -__webpack_require__(66)('freeze', function ($freeze) { - return function freeze(it) { - return $freeze && isObject(it) ? $freeze(meta(it)) : it; - }; +// 19.1.2.7 Object.getOwnPropertyNames(O) +__webpack_require__(67)('getOwnPropertyNames', function () { + return __webpack_require__(217).f; }); @@ -60834,13 +61166,13 @@ __webpack_require__(66)('freeze', function ($freeze) { /* 303 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.17 Object.seal(O) +// 19.1.2.5 Object.freeze(O) var isObject = __webpack_require__(14); var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('seal', function ($seal) { - return function seal(it) { - return $seal && isObject(it) ? $seal(meta(it)) : it; +__webpack_require__(67)('freeze', function ($freeze) { + return function freeze(it) { + return $freeze && isObject(it) ? $freeze(meta(it)) : it; }; }); @@ -60849,13 +61181,13 @@ __webpack_require__(66)('seal', function ($seal) { /* 304 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.15 Object.preventExtensions(O) +// 19.1.2.17 Object.seal(O) var isObject = __webpack_require__(14); var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('preventExtensions', function ($preventExtensions) { - return function preventExtensions(it) { - return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; +__webpack_require__(67)('seal', function ($seal) { + return function seal(it) { + return $seal && isObject(it) ? $seal(meta(it)) : it; }; }); @@ -60864,12 +61196,13 @@ __webpack_require__(66)('preventExtensions', function ($preventExtensions) { /* 305 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.12 Object.isFrozen(O) +// 19.1.2.15 Object.preventExtensions(O) var isObject = __webpack_require__(14); +var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('isFrozen', function ($isFrozen) { - return function isFrozen(it) { - return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; +__webpack_require__(67)('preventExtensions', function ($preventExtensions) { + return function preventExtensions(it) { + return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; }; }); @@ -60878,12 +61211,12 @@ __webpack_require__(66)('isFrozen', function ($isFrozen) { /* 306 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.13 Object.isSealed(O) +// 19.1.2.12 Object.isFrozen(O) var isObject = __webpack_require__(14); -__webpack_require__(66)('isSealed', function ($isSealed) { - return function isSealed(it) { - return isObject(it) ? $isSealed ? $isSealed(it) : false : true; +__webpack_require__(67)('isFrozen', function ($isFrozen) { + return function isFrozen(it) { + return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; }; }); @@ -60892,10 +61225,24 @@ __webpack_require__(66)('isSealed', function ($isSealed) { /* 307 */ /***/ (function(module, exports, __webpack_require__) { +// 19.1.2.13 Object.isSealed(O) +var isObject = __webpack_require__(14); + +__webpack_require__(67)('isSealed', function ($isSealed) { + return function isSealed(it) { + return isObject(it) ? $isSealed ? $isSealed(it) : false : true; + }; +}); + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + // 19.1.2.11 Object.isExtensible(O) var isObject = __webpack_require__(14); -__webpack_require__(66)('isExtensible', function ($isExtensible) { +__webpack_require__(67)('isExtensible', function ($isExtensible) { return function isExtensible(it) { return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; }; @@ -60903,7 +61250,7 @@ __webpack_require__(66)('isExtensible', function ($isExtensible) { /***/ }), -/* 308 */ +/* 309 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) @@ -60913,7 +61260,7 @@ $export($export.S + $export.F, 'Object', { assign: __webpack_require__(218) }); /***/ }), -/* 309 */ +/* 310 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.10 Object.is(value1, value2) @@ -60922,7 +61269,7 @@ $export($export.S, 'Object', { is: __webpack_require__(219) }); /***/ }), -/* 310 */ +/* 311 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.19 Object.setPrototypeOf(O, proto) @@ -60931,7 +61278,7 @@ $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(169).set }); /***/ }), -/* 311 */ +/* 312 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60939,7 +61286,7 @@ $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(169).set }); // 19.1.3.6 Object.prototype.toString() var classof = __webpack_require__(124); var test = {}; -test[__webpack_require__(18)('toStringTag')] = 'z'; +test[__webpack_require__(19)('toStringTag')] = 'z'; if (test + '' != '[object z]') { __webpack_require__(45)(Object.prototype, 'toString', function toString() { return '[object ' + classof(this) + ']'; @@ -60948,7 +61295,7 @@ if (test + '' != '[object z]') { /***/ }), -/* 312 */ +/* 313 */ /***/ (function(module, exports, __webpack_require__) { // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) @@ -60958,7 +61305,7 @@ $export($export.P, 'Function', { bind: __webpack_require__(220) }); /***/ }), -/* 313 */ +/* 314 */ /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(29).f; @@ -60980,14 +61327,14 @@ NAME in FProto || __webpack_require__(28) && dP(FProto, NAME, { /***/ }), -/* 314 */ +/* 315 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var isObject = __webpack_require__(14); -var getPrototypeOf = __webpack_require__(93); -var HAS_INSTANCE = __webpack_require__(18)('hasInstance'); +var getPrototypeOf = __webpack_require__(94); +var HAS_INSTANCE = __webpack_require__(19)('hasInstance'); var FunctionProto = Function.prototype; // 19.2.3.6 Function.prototype[@@hasInstance](V) if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(29).f(FunctionProto, HAS_INSTANCE, { value: function (O) { @@ -61000,7 +61347,7 @@ if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(29).f(FunctionProto, H /***/ }), -/* 315 */ +/* 316 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61010,7 +61357,7 @@ $export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt } /***/ }), -/* 316 */ +/* 317 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61020,7 +61367,7 @@ $export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $pars /***/ }), -/* 317 */ +/* 318 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61031,8 +61378,8 @@ var cof = __webpack_require__(75); var inheritIfRequired = __webpack_require__(171); var toPrimitive = __webpack_require__(82); var fails = __webpack_require__(12); -var gOPN = __webpack_require__(92).f; -var gOPD = __webpack_require__(65).f; +var gOPN = __webpack_require__(93).f; +var gOPD = __webpack_require__(66).f; var dP = __webpack_require__(29).f; var $trim = __webpack_require__(104).trim; var NUMBER = 'Number'; @@ -61040,7 +61387,7 @@ var $Number = global[NUMBER]; var Base = $Number; var proto = $Number.prototype; // Opera ~12 has broken Object#toString -var BROKEN_COF = cof(__webpack_require__(91)(proto)) == NUMBER; +var BROKEN_COF = cof(__webpack_require__(92)(proto)) == NUMBER; var TRIM = 'trim' in String.prototype; // 7.1.3 ToNumber(argument) @@ -61096,13 +61443,13 @@ if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) { /***/ }), -/* 318 */ +/* 319 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var aNumberValue = __webpack_require__(224); var repeat = __webpack_require__(172); var $toFixed = 1.0.toFixed; @@ -61217,7 +61564,7 @@ $export($export.P + $export.F * (!!$toFixed && ( /***/ }), -/* 319 */ +/* 320 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61242,7 +61589,7 @@ $export($export.P + $export.F * ($fails(function () { /***/ }), -/* 320 */ +/* 321 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.1 Number.EPSILON @@ -61252,7 +61599,7 @@ $export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); /***/ }), -/* 321 */ +/* 322 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.2 Number.isFinite(number) @@ -61267,7 +61614,7 @@ $export($export.S, 'Number', { /***/ }), -/* 322 */ +/* 323 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.3 Number.isInteger(number) @@ -61277,7 +61624,7 @@ $export($export.S, 'Number', { isInteger: __webpack_require__(225) }); /***/ }), -/* 323 */ +/* 324 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.4 Number.isNaN(number) @@ -61292,7 +61639,7 @@ $export($export.S, 'Number', { /***/ }), -/* 324 */ +/* 325 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.5 Number.isSafeInteger(number) @@ -61308,7 +61655,7 @@ $export($export.S, 'Number', { /***/ }), -/* 325 */ +/* 326 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.6 Number.MAX_SAFE_INTEGER @@ -61318,7 +61665,7 @@ $export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff }); /***/ }), -/* 326 */ +/* 327 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.10 Number.MIN_SAFE_INTEGER @@ -61328,7 +61675,7 @@ $export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff }); /***/ }), -/* 327 */ +/* 328 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61338,7 +61685,7 @@ $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { /***/ }), -/* 328 */ +/* 329 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61348,7 +61695,7 @@ $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { pars /***/ }), -/* 329 */ +/* 330 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.3 Math.acosh(x) @@ -61372,7 +61719,7 @@ $export($export.S + $export.F * !($acosh /***/ }), -/* 330 */ +/* 331 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.5 Math.asinh(x) @@ -61388,7 +61735,7 @@ $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: /***/ }), -/* 331 */ +/* 332 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.7 Math.atanh(x) @@ -61404,7 +61751,7 @@ $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { /***/ }), -/* 332 */ +/* 333 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.9 Math.cbrt(x) @@ -61419,7 +61766,7 @@ $export($export.S, 'Math', { /***/ }), -/* 333 */ +/* 334 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.11 Math.clz32(x) @@ -61433,7 +61780,7 @@ $export($export.S, 'Math', { /***/ }), -/* 334 */ +/* 335 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.12 Math.cosh(x) @@ -61448,7 +61795,7 @@ $export($export.S, 'Math', { /***/ }), -/* 335 */ +/* 336 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.14 Math.expm1(x) @@ -61459,17 +61806,17 @@ $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 /***/ }), -/* 336 */ +/* 337 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) var $export = __webpack_require__(3); -$export($export.S, 'Math', { fround: __webpack_require__(337) }); +$export($export.S, 'Math', { fround: __webpack_require__(338) }); /***/ }), -/* 337 */ +/* 338 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) @@ -61498,7 +61845,7 @@ module.exports = Math.fround || function fround(x) { /***/ }), -/* 338 */ +/* 339 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) @@ -61529,7 +61876,7 @@ $export($export.S, 'Math', { /***/ }), -/* 339 */ +/* 340 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.18 Math.imul(x, y) @@ -61552,7 +61899,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 340 */ +/* 341 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.21 Math.log10(x) @@ -61566,7 +61913,7 @@ $export($export.S, 'Math', { /***/ }), -/* 341 */ +/* 342 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.20 Math.log1p(x) @@ -61576,7 +61923,7 @@ $export($export.S, 'Math', { log1p: __webpack_require__(226) }); /***/ }), -/* 342 */ +/* 343 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.22 Math.log2(x) @@ -61590,7 +61937,7 @@ $export($export.S, 'Math', { /***/ }), -/* 343 */ +/* 344 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.28 Math.sign(x) @@ -61600,7 +61947,7 @@ $export($export.S, 'Math', { sign: __webpack_require__(173) }); /***/ }), -/* 344 */ +/* 345 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.30 Math.sinh(x) @@ -61621,7 +61968,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 345 */ +/* 346 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.33 Math.tanh(x) @@ -61639,7 +61986,7 @@ $export($export.S, 'Math', { /***/ }), -/* 346 */ +/* 347 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.34 Math.trunc(x) @@ -61653,11 +62000,11 @@ $export($export.S, 'Math', { /***/ }), -/* 347 */ +/* 348 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var fromCharCode = String.fromCharCode; var $fromCodePoint = String.fromCodePoint; @@ -61682,7 +62029,7 @@ $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1) /***/ }), -/* 348 */ +/* 349 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61706,7 +62053,7 @@ $export($export.S, 'String', { /***/ }), -/* 349 */ +/* 350 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61720,7 +62067,7 @@ __webpack_require__(104)('trim', function ($trim) { /***/ }), -/* 350 */ +/* 351 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61744,7 +62091,7 @@ __webpack_require__(176)(String, 'String', function (iterated) { /***/ }), -/* 351 */ +/* 352 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61760,7 +62107,7 @@ $export($export.P, 'String', { /***/ }), -/* 352 */ +/* 353 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61787,7 +62134,7 @@ $export($export.P + $export.F * __webpack_require__(179)(ENDS_WITH), 'String', { /***/ }), -/* 353 */ +/* 354 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61806,7 +62153,7 @@ $export($export.P + $export.F * __webpack_require__(179)(INCLUDES), 'String', { /***/ }), -/* 354 */ +/* 355 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61818,7 +62165,7 @@ $export($export.P, 'String', { /***/ }), -/* 355 */ +/* 356 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61843,7 +62190,7 @@ $export($export.P + $export.F * __webpack_require__(179)(STARTS_WITH), 'String', /***/ }), -/* 356 */ +/* 357 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61857,7 +62204,7 @@ __webpack_require__(46)('anchor', function (createHTML) { /***/ }), -/* 357 */ +/* 358 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61871,7 +62218,7 @@ __webpack_require__(46)('big', function (createHTML) { /***/ }), -/* 358 */ +/* 359 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61885,7 +62232,7 @@ __webpack_require__(46)('blink', function (createHTML) { /***/ }), -/* 359 */ +/* 360 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61899,7 +62246,7 @@ __webpack_require__(46)('bold', function (createHTML) { /***/ }), -/* 360 */ +/* 361 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61913,7 +62260,7 @@ __webpack_require__(46)('fixed', function (createHTML) { /***/ }), -/* 361 */ +/* 362 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61927,7 +62274,7 @@ __webpack_require__(46)('fontcolor', function (createHTML) { /***/ }), -/* 362 */ +/* 363 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61941,7 +62288,7 @@ __webpack_require__(46)('fontsize', function (createHTML) { /***/ }), -/* 363 */ +/* 364 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61955,7 +62302,7 @@ __webpack_require__(46)('italics', function (createHTML) { /***/ }), -/* 364 */ +/* 365 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61969,7 +62316,7 @@ __webpack_require__(46)('link', function (createHTML) { /***/ }), -/* 365 */ +/* 366 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61983,7 +62330,7 @@ __webpack_require__(46)('small', function (createHTML) { /***/ }), -/* 366 */ +/* 367 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61997,7 +62344,7 @@ __webpack_require__(46)('strike', function (createHTML) { /***/ }), -/* 367 */ +/* 368 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62011,7 +62358,7 @@ __webpack_require__(46)('sub', function (createHTML) { /***/ }), -/* 368 */ +/* 369 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62025,7 +62372,7 @@ __webpack_require__(46)('sup', function (createHTML) { /***/ }), -/* 369 */ +/* 370 */ /***/ (function(module, exports, __webpack_require__) { // 20.3.3.1 / 15.9.4.4 Date.now() @@ -62035,7 +62382,7 @@ $export($export.S, 'Date', { now: function () { return new Date().getTime(); } } /***/ }), -/* 370 */ +/* 371 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62058,12 +62405,12 @@ $export($export.P + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 371 */ +/* 372 */ /***/ (function(module, exports, __webpack_require__) { // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() var $export = __webpack_require__(3); -var toISOString = __webpack_require__(372); +var toISOString = __webpack_require__(373); // PhantomJS / old WebKit has a broken implementations $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', { @@ -62072,7 +62419,7 @@ $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'D /***/ }), -/* 372 */ +/* 373 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62105,7 +62452,7 @@ module.exports = (fails(function () { /***/ }), -/* 373 */ +/* 374 */ /***/ (function(module, exports, __webpack_require__) { var DateProto = Date.prototype; @@ -62123,17 +62470,17 @@ if (new Date(NaN) + '' != INVALID_DATE) { /***/ }), -/* 374 */ +/* 375 */ /***/ (function(module, exports, __webpack_require__) { -var TO_PRIMITIVE = __webpack_require__(18)('toPrimitive'); +var TO_PRIMITIVE = __webpack_require__(19)('toPrimitive'); var proto = Date.prototype; -if (!(TO_PRIMITIVE in proto)) __webpack_require__(52)(proto, TO_PRIMITIVE, __webpack_require__(375)); +if (!(TO_PRIMITIVE in proto)) __webpack_require__(52)(proto, TO_PRIMITIVE, __webpack_require__(376)); /***/ }), -/* 375 */ +/* 376 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62149,7 +62496,7 @@ module.exports = function (hint) { /***/ }), -/* 376 */ +/* 377 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.2.2 / 15.4.3.2 Array.isArray(arg) @@ -62159,12 +62506,12 @@ $export($export.S, 'Array', { isArray: __webpack_require__(137) }); /***/ }), -/* 377 */ +/* 378 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var $export = __webpack_require__(3); var toObject = __webpack_require__(36); var call = __webpack_require__(228); @@ -62203,7 +62550,7 @@ $export($export.S + $export.F * !__webpack_require__(138)(function (iter) { Arra /***/ }), -/* 378 */ +/* 379 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62229,7 +62576,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 379 */ +/* 380 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62240,7 +62587,7 @@ var toIObject = __webpack_require__(53); var arrayJoin = [].join; // fallback for not array-like strings -$export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpack_require__(57)(arrayJoin)), 'Array', { +$export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpack_require__(58)(arrayJoin)), 'Array', { join: function join(separator) { return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); } @@ -62248,7 +62595,7 @@ $export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpac /***/ }), -/* 380 */ +/* 381 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62256,7 +62603,7 @@ $export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpac var $export = __webpack_require__(3); var html = __webpack_require__(168); var cof = __webpack_require__(75); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); var arraySlice = [].slice; @@ -62283,13 +62630,13 @@ $export($export.P + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 381 */ +/* 382 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var toObject = __webpack_require__(36); var fails = __webpack_require__(12); var $sort = [].sort; @@ -62302,7 +62649,7 @@ $export($export.P + $export.F * (fails(function () { // V8 bug test.sort(null); // Old WebKit -}) || !__webpack_require__(57)($sort)), 'Array', { +}) || !__webpack_require__(58)($sort)), 'Array', { // 22.1.3.25 Array.prototype.sort(comparefn) sort: function sort(comparefn) { return comparefn === undefined @@ -62313,14 +62660,14 @@ $export($export.P + $export.F * (fails(function () { /***/ }), -/* 382 */ +/* 383 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var $forEach = __webpack_require__(67)(0); -var STRICT = __webpack_require__(57)([].forEach, true); +var $forEach = __webpack_require__(68)(0); +var STRICT = __webpack_require__(58)([].forEach, true); $export($export.P + $export.F * !STRICT, 'Array', { // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) @@ -62331,12 +62678,12 @@ $export($export.P + $export.F * !STRICT, 'Array', { /***/ }), -/* 383 */ +/* 384 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(14); var isArray = __webpack_require__(137); -var SPECIES = __webpack_require__(18)('species'); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (original) { var C; @@ -62352,23 +62699,6 @@ module.exports = function (original) { }; -/***/ }), -/* 384 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $export = __webpack_require__(3); -var $map = __webpack_require__(67)(1); - -$export($export.P + $export.F * !__webpack_require__(57)([].map, true), 'Array', { - // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) - map: function map(callbackfn /* , thisArg */) { - return $map(this, callbackfn, arguments[1]); - } -}); - - /***/ }), /* 385 */ /***/ (function(module, exports, __webpack_require__) { @@ -62376,12 +62706,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].map, true), 'Array', "use strict"; var $export = __webpack_require__(3); -var $filter = __webpack_require__(67)(2); +var $map = __webpack_require__(68)(1); -$export($export.P + $export.F * !__webpack_require__(57)([].filter, true), 'Array', { - // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) - filter: function filter(callbackfn /* , thisArg */) { - return $filter(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments[1]); } }); @@ -62393,12 +62723,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].filter, true), 'Arra "use strict"; var $export = __webpack_require__(3); -var $some = __webpack_require__(67)(3); +var $filter = __webpack_require__(68)(2); -$export($export.P + $export.F * !__webpack_require__(57)([].some, true), 'Array', { - // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) - some: function some(callbackfn /* , thisArg */) { - return $some(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments[1]); } }); @@ -62410,12 +62740,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].some, true), 'Array' "use strict"; var $export = __webpack_require__(3); -var $every = __webpack_require__(67)(4); +var $some = __webpack_require__(68)(3); -$export($export.P + $export.F * !__webpack_require__(57)([].every, true), 'Array', { - // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) - every: function every(callbackfn /* , thisArg */) { - return $every(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments[1]); } }); @@ -62427,12 +62757,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].every, true), 'Array "use strict"; var $export = __webpack_require__(3); -var $reduce = __webpack_require__(230); +var $every = __webpack_require__(68)(4); -$export($export.P + $export.F * !__webpack_require__(57)([].reduce, true), 'Array', { - // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) - reduce: function reduce(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments[1], false); +$export($export.P + $export.F * !__webpack_require__(58)([].every, true), 'Array', { + // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments[1]); } }); @@ -62446,10 +62776,10 @@ $export($export.P + $export.F * !__webpack_require__(57)([].reduce, true), 'Arra var $export = __webpack_require__(3); var $reduce = __webpack_require__(230); -$export($export.P + $export.F * !__webpack_require__(57)([].reduceRight, true), 'Array', { - // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) - reduceRight: function reduceRight(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments[1], true); +$export($export.P + $export.F * !__webpack_require__(58)([].reduce, true), 'Array', { + // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], false); } }); @@ -62461,17 +62791,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].reduceRight, true), "use strict"; var $export = __webpack_require__(3); -var $indexOf = __webpack_require__(135)(false); -var $native = [].indexOf; -var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; +var $reduce = __webpack_require__(230); -$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($native)), 'Array', { - // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) - indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { - return NEGATIVE_ZERO - // convert -0 to +0 - ? $native.apply(this, arguments) || 0 - : $indexOf(this, searchElement, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].reduceRight, true), 'Array', { + // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) + reduceRight: function reduceRight(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], true); } }); @@ -62482,14 +62807,36 @@ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($nati "use strict"; +var $export = __webpack_require__(3); +var $indexOf = __webpack_require__(135)(false); +var $native = [].indexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(58)($native)), 'Array', { + // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? $native.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments[1]); + } +}); + + +/***/ }), +/* 392 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + var $export = __webpack_require__(3); var toIObject = __webpack_require__(53); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var $native = [].lastIndexOf; var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; -$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($native)), 'Array', { +$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(58)($native)), 'Array', { // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 @@ -62506,7 +62853,7 @@ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($nati /***/ }), -/* 392 */ +/* 393 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) @@ -62514,11 +62861,11 @@ var $export = __webpack_require__(3); $export($export.P, 'Array', { copyWithin: __webpack_require__(231) }); -__webpack_require__(94)('copyWithin'); +__webpack_require__(95)('copyWithin'); /***/ }), -/* 393 */ +/* 394 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) @@ -62526,18 +62873,18 @@ var $export = __webpack_require__(3); $export($export.P, 'Array', { fill: __webpack_require__(183) }); -__webpack_require__(94)('fill'); +__webpack_require__(95)('fill'); /***/ }), -/* 394 */ +/* 395 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) var $export = __webpack_require__(3); -var $find = __webpack_require__(67)(5); +var $find = __webpack_require__(68)(5); var KEY = 'find'; var forced = true; // Shouldn't skip holes @@ -62547,18 +62894,18 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(94)(KEY); +__webpack_require__(95)(KEY); /***/ }), -/* 395 */ +/* 396 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) var $export = __webpack_require__(3); -var $find = __webpack_require__(67)(6); +var $find = __webpack_require__(68)(6); var KEY = 'findIndex'; var forced = true; // Shouldn't skip holes @@ -62568,24 +62915,24 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(94)(KEY); - - -/***/ }), -/* 396 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(106)('Array'); +__webpack_require__(95)(KEY); /***/ }), /* 397 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(106)('Array'); + + +/***/ }), +/* 398 */ +/***/ (function(module, exports, __webpack_require__) { + var global = __webpack_require__(11); var inheritIfRequired = __webpack_require__(171); var dP = __webpack_require__(29).f; -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var isRegExp = __webpack_require__(178); var $flags = __webpack_require__(139); var $RegExp = global.RegExp; @@ -62597,7 +62944,7 @@ var re2 = /a/g; var CORRECT_NEW = new $RegExp(re1) !== re1; if (__webpack_require__(28) && (!CORRECT_NEW || __webpack_require__(12)(function () { - re2[__webpack_require__(18)('match')] = false; + re2[__webpack_require__(19)('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; }))) { @@ -62628,7 +62975,7 @@ __webpack_require__(106)('RegExp'); /***/ }), -/* 398 */ +/* 399 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62660,7 +63007,7 @@ if (__webpack_require__(12)(function () { return $toString.call({ source: 'a', f /***/ }), -/* 399 */ +/* 400 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62707,7 +63054,7 @@ __webpack_require__(141)('match', 1, function (defined, MATCH, $match, maybeCall /***/ }), -/* 400 */ +/* 401 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62716,7 +63063,7 @@ __webpack_require__(141)('match', 1, function (defined, MATCH, $match, maybeCall var anObject = __webpack_require__(13); var toObject = __webpack_require__(36); var toLength = __webpack_require__(23); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var advanceStringIndex = __webpack_require__(186); var regExpExec = __webpack_require__(140); var max = Math.max; @@ -62832,7 +63179,7 @@ __webpack_require__(141)('replace', 2, function (defined, REPLACE, $replace, may /***/ }), -/* 401 */ +/* 402 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62870,7 +63217,7 @@ __webpack_require__(141)('search', 1, function (defined, SEARCH, $search, maybeC /***/ }), -/* 402 */ +/* 403 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63011,7 +63358,7 @@ __webpack_require__(141)('split', 2, function (defined, SPLIT, $split, maybeCall /***/ }), -/* 403 */ +/* 404 */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(11); @@ -63086,7 +63433,7 @@ module.exports = function () { /***/ }), -/* 404 */ +/* 405 */ /***/ (function(module, exports) { module.exports = function (exec) { @@ -63099,13 +63446,13 @@ module.exports = function (exec) { /***/ }), -/* 405 */ +/* 406 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(238); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var MAP = 'Map'; // 23.1 Map Objects @@ -63125,13 +63472,13 @@ module.exports = __webpack_require__(144)(MAP, function (get) { /***/ }), -/* 406 */ +/* 407 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(238); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var SET = 'Set'; // 23.2 Set Objects @@ -63146,20 +63493,20 @@ module.exports = __webpack_require__(144)(SET, function (get) { /***/ }), -/* 407 */ +/* 408 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(11); -var each = __webpack_require__(67)(0); +var each = __webpack_require__(68)(0); var redefine = __webpack_require__(45); var meta = __webpack_require__(83); var assign = __webpack_require__(218); var weak = __webpack_require__(239); var isObject = __webpack_require__(14); -var validate = __webpack_require__(95); -var NATIVE_WEAK_MAP = __webpack_require__(95); +var validate = __webpack_require__(96); +var NATIVE_WEAK_MAP = __webpack_require__(96); var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; var WEAK_MAP = 'WeakMap'; var getWeak = meta.getWeak; @@ -63213,13 +63560,13 @@ if (NATIVE_WEAK_MAP && IS_IE11) { /***/ }), -/* 408 */ +/* 409 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var weak = __webpack_require__(239); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var WEAK_SET = 'WeakSet'; // 23.4 WeakSet Objects @@ -63234,7 +63581,7 @@ __webpack_require__(144)(WEAK_SET, function (get) { /***/ }), -/* 409 */ +/* 410 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63243,7 +63590,7 @@ var $export = __webpack_require__(3); var $typed = __webpack_require__(145); var buffer = __webpack_require__(188); var anObject = __webpack_require__(13); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); var isObject = __webpack_require__(14); var ArrayBuffer = __webpack_require__(11).ArrayBuffer; @@ -63287,7 +63634,7 @@ __webpack_require__(106)(ARRAY_BUFFER); /***/ }), -/* 410 */ +/* 411 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -63297,7 +63644,7 @@ $export($export.G + $export.W + $export.F * !__webpack_require__(145).ABV, { /***/ }), -/* 411 */ +/* 412 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int8', 1, function (init) { @@ -63308,7 +63655,7 @@ __webpack_require__(77)('Int8', 1, function (init) { /***/ }), -/* 412 */ +/* 413 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint8', 1, function (init) { @@ -63319,7 +63666,7 @@ __webpack_require__(77)('Uint8', 1, function (init) { /***/ }), -/* 413 */ +/* 414 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint8', 1, function (init) { @@ -63330,7 +63677,7 @@ __webpack_require__(77)('Uint8', 1, function (init) { /***/ }), -/* 414 */ +/* 415 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int16', 2, function (init) { @@ -63341,7 +63688,7 @@ __webpack_require__(77)('Int16', 2, function (init) { /***/ }), -/* 415 */ +/* 416 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint16', 2, function (init) { @@ -63352,7 +63699,7 @@ __webpack_require__(77)('Uint16', 2, function (init) { /***/ }), -/* 416 */ +/* 417 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int32', 4, function (init) { @@ -63363,7 +63710,7 @@ __webpack_require__(77)('Int32', 4, function (init) { /***/ }), -/* 417 */ +/* 418 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint32', 4, function (init) { @@ -63374,7 +63721,7 @@ __webpack_require__(77)('Uint32', 4, function (init) { /***/ }), -/* 418 */ +/* 419 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Float32', 4, function (init) { @@ -63385,7 +63732,7 @@ __webpack_require__(77)('Float32', 4, function (init) { /***/ }), -/* 419 */ +/* 420 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Float64', 8, function (init) { @@ -63396,12 +63743,12 @@ __webpack_require__(77)('Float64', 8, function (init) { /***/ }), -/* 420 */ +/* 421 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.1 Reflect.apply(target, thisArgument, argumentsList) var $export = __webpack_require__(3); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var anObject = __webpack_require__(13); var rApply = (__webpack_require__(11).Reflect || {}).apply; var fApply = Function.apply; @@ -63418,13 +63765,13 @@ $export($export.S + $export.F * !__webpack_require__(12)(function () { /***/ }), -/* 421 */ +/* 422 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) var $export = __webpack_require__(3); -var create = __webpack_require__(91); -var aFunction = __webpack_require__(63); +var create = __webpack_require__(92); +var aFunction = __webpack_require__(64); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var fails = __webpack_require__(12); @@ -63471,7 +63818,7 @@ $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { /***/ }), -/* 422 */ +/* 423 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) @@ -63500,12 +63847,12 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 423 */ +/* 424 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.4 Reflect.deleteProperty(target, propertyKey) var $export = __webpack_require__(3); -var gOPD = __webpack_require__(65).f; +var gOPD = __webpack_require__(66).f; var anObject = __webpack_require__(13); $export($export.S, 'Reflect', { @@ -63517,7 +63864,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 424 */ +/* 425 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63550,12 +63897,12 @@ $export($export.S, 'Reflect', { /***/ }), -/* 425 */ +/* 426 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.6 Reflect.get(target, propertyKey [, receiver]) -var gOPD = __webpack_require__(65); -var getPrototypeOf = __webpack_require__(93); +var gOPD = __webpack_require__(66); +var getPrototypeOf = __webpack_require__(94); var has = __webpack_require__(51); var $export = __webpack_require__(3); var isObject = __webpack_require__(14); @@ -63577,11 +63924,11 @@ $export($export.S, 'Reflect', { get: get }); /***/ }), -/* 426 */ +/* 427 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) -var gOPD = __webpack_require__(65); +var gOPD = __webpack_require__(66); var $export = __webpack_require__(3); var anObject = __webpack_require__(13); @@ -63593,12 +63940,12 @@ $export($export.S, 'Reflect', { /***/ }), -/* 427 */ +/* 428 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.8 Reflect.getPrototypeOf(target) var $export = __webpack_require__(3); -var getProto = __webpack_require__(93); +var getProto = __webpack_require__(94); var anObject = __webpack_require__(13); $export($export.S, 'Reflect', { @@ -63609,7 +63956,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 428 */ +/* 429 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.9 Reflect.has(target, propertyKey) @@ -63623,7 +63970,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 429 */ +/* 430 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.10 Reflect.isExtensible(target) @@ -63640,7 +63987,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 430 */ +/* 431 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.11 Reflect.ownKeys(target) @@ -63650,7 +63997,7 @@ $export($export.S, 'Reflect', { ownKeys: __webpack_require__(241) }); /***/ }), -/* 431 */ +/* 432 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.12 Reflect.preventExtensions(target) @@ -63672,16 +64019,16 @@ $export($export.S, 'Reflect', { /***/ }), -/* 432 */ +/* 433 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) var dP = __webpack_require__(29); -var gOPD = __webpack_require__(65); -var getPrototypeOf = __webpack_require__(93); +var gOPD = __webpack_require__(66); +var getPrototypeOf = __webpack_require__(94); var has = __webpack_require__(51); var $export = __webpack_require__(3); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); @@ -63711,7 +64058,7 @@ $export($export.S, 'Reflect', { set: set }); /***/ }), -/* 433 */ +/* 434 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.14 Reflect.setPrototypeOf(target, proto) @@ -63732,15 +64079,15 @@ if (setProto) $export($export.S, 'Reflect', { /***/ }), -/* 434 */ +/* 435 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(435); +__webpack_require__(436); module.exports = __webpack_require__(26).Array.includes; /***/ }), -/* 435 */ +/* 436 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63755,29 +64102,29 @@ $export($export.P, 'Array', { } }); -__webpack_require__(94)('includes'); - - -/***/ }), -/* 436 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(437); -module.exports = __webpack_require__(26).Array.flatMap; +__webpack_require__(95)('includes'); /***/ }), /* 437 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(438); +module.exports = __webpack_require__(26).Array.flatMap; + + +/***/ }), +/* 438 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap var $export = __webpack_require__(3); -var flattenIntoArray = __webpack_require__(438); +var flattenIntoArray = __webpack_require__(439); var toObject = __webpack_require__(36); var toLength = __webpack_require__(23); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var arraySpeciesCreate = __webpack_require__(229); $export($export.P, 'Array', { @@ -63792,11 +64139,11 @@ $export($export.P, 'Array', { } }); -__webpack_require__(94)('flatMap'); +__webpack_require__(95)('flatMap'); /***/ }), -/* 438 */ +/* 439 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63805,8 +64152,8 @@ __webpack_require__(94)('flatMap'); var isArray = __webpack_require__(137); var isObject = __webpack_require__(14); var toLength = __webpack_require__(23); -var ctx = __webpack_require__(62); -var IS_CONCAT_SPREADABLE = __webpack_require__(18)('isConcatSpreadable'); +var ctx = __webpack_require__(63); +var IS_CONCAT_SPREADABLE = __webpack_require__(19)('isConcatSpreadable'); function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) { var targetIndex = start; @@ -63842,15 +64189,15 @@ module.exports = flattenIntoArray; /***/ }), -/* 439 */ +/* 440 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(440); +__webpack_require__(441); module.exports = __webpack_require__(26).String.padStart; /***/ }), -/* 440 */ +/* 441 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63871,15 +64218,15 @@ $export($export.P + $export.F * WEBKIT_BUG, 'String', { /***/ }), -/* 441 */ +/* 442 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(442); +__webpack_require__(443); module.exports = __webpack_require__(26).String.padEnd; /***/ }), -/* 442 */ +/* 443 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63900,15 +64247,15 @@ $export($export.P + $export.F * WEBKIT_BUG, 'String', { /***/ }), -/* 443 */ +/* 444 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(444); +__webpack_require__(445); module.exports = __webpack_require__(26).String.trimLeft; /***/ }), -/* 444 */ +/* 445 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63922,15 +64269,15 @@ __webpack_require__(104)('trimLeft', function ($trim) { /***/ }), -/* 445 */ +/* 446 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(446); +__webpack_require__(447); module.exports = __webpack_require__(26).String.trimRight; /***/ }), -/* 446 */ +/* 447 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63943,38 +64290,38 @@ __webpack_require__(104)('trimRight', function ($trim) { }, 'trimEnd'); -/***/ }), -/* 447 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(448); -module.exports = __webpack_require__(165).f('asyncIterator'); - - /***/ }), /* 448 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(214)('asyncIterator'); +__webpack_require__(449); +module.exports = __webpack_require__(165).f('asyncIterator'); /***/ }), /* 449 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(450); -module.exports = __webpack_require__(26).Object.getOwnPropertyDescriptors; +__webpack_require__(214)('asyncIterator'); /***/ }), /* 450 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(451); +module.exports = __webpack_require__(26).Object.getOwnPropertyDescriptors; + + +/***/ }), +/* 451 */ +/***/ (function(module, exports, __webpack_require__) { + // https://github.com/tc39/proposal-object-getownpropertydescriptors var $export = __webpack_require__(3); var ownKeys = __webpack_require__(241); var toIObject = __webpack_require__(53); -var gOPD = __webpack_require__(65); +var gOPD = __webpack_require__(66); var createProperty = __webpack_require__(181); $export($export.S, 'Object', { @@ -63995,15 +64342,15 @@ $export($export.S, 'Object', { /***/ }), -/* 451 */ +/* 452 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(452); +__webpack_require__(453); module.exports = __webpack_require__(26).Object.values; /***/ }), -/* 452 */ +/* 453 */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries @@ -64018,15 +64365,15 @@ $export($export.S, 'Object', { /***/ }), -/* 453 */ +/* 454 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(454); +__webpack_require__(455); module.exports = __webpack_require__(26).Object.entries; /***/ }), -/* 454 */ +/* 455 */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries @@ -64041,18 +64388,18 @@ $export($export.S, 'Object', { /***/ }), -/* 455 */ +/* 456 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(235); -__webpack_require__(456); +__webpack_require__(457); module.exports = __webpack_require__(26).Promise['finally']; /***/ }), -/* 456 */ +/* 457 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64079,17 +64426,17 @@ $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { /***/ }), -/* 457 */ +/* 458 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(458); __webpack_require__(459); __webpack_require__(460); +__webpack_require__(461); module.exports = __webpack_require__(26); /***/ }), -/* 458 */ +/* 459 */ /***/ (function(module, exports, __webpack_require__) { // ie9- setTimeout & setInterval additional parameters fix @@ -64115,7 +64462,7 @@ $export($export.G + $export.B + $export.F * MSIE, { /***/ }), -/* 459 */ +/* 460 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -64127,16 +64474,16 @@ $export($export.G + $export.B, { /***/ }), -/* 460 */ +/* 461 */ /***/ (function(module, exports, __webpack_require__) { var $iterators = __webpack_require__(184); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var redefine = __webpack_require__(45); var global = __webpack_require__(11); var hide = __webpack_require__(52); var Iterators = __webpack_require__(105); -var wks = __webpack_require__(18); +var wks = __webpack_require__(19); var ITERATOR = wks('iterator'); var TO_STRING_TAG = wks('toStringTag'); var ArrayValues = Iterators.Array; @@ -64191,7 +64538,7 @@ for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++ /***/ }), -/* 461 */ +/* 462 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -64944,33 +65291,33 @@ try { } -/***/ }), -/* 462 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(463); -module.exports = __webpack_require__(244).global; - - /***/ }), /* 463 */ /***/ (function(module, exports, __webpack_require__) { -// https://github.com/tc39/proposal-global -var $export = __webpack_require__(464); - -$export($export.G, { global: __webpack_require__(189) }); +__webpack_require__(464); +module.exports = __webpack_require__(244).global; /***/ }), /* 464 */ /***/ (function(module, exports, __webpack_require__) { +// https://github.com/tc39/proposal-global +var $export = __webpack_require__(465); + +$export($export.G, { global: __webpack_require__(189) }); + + +/***/ }), +/* 465 */ +/***/ (function(module, exports, __webpack_require__) { + var global = __webpack_require__(189); var core = __webpack_require__(244); -var ctx = __webpack_require__(465); -var hide = __webpack_require__(467); -var has = __webpack_require__(474); +var ctx = __webpack_require__(466); +var hide = __webpack_require__(468); +var has = __webpack_require__(475); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { @@ -65031,11 +65378,11 @@ module.exports = $export; /***/ }), -/* 465 */ +/* 466 */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding -var aFunction = __webpack_require__(466); +var aFunction = __webpack_require__(467); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; @@ -65057,7 +65404,7 @@ module.exports = function (fn, that, length) { /***/ }), -/* 466 */ +/* 467 */ /***/ (function(module, exports) { module.exports = function (it) { @@ -65067,11 +65414,11 @@ module.exports = function (it) { /***/ }), -/* 467 */ +/* 468 */ /***/ (function(module, exports, __webpack_require__) { -var dP = __webpack_require__(468); -var createDesc = __webpack_require__(473); +var dP = __webpack_require__(469); +var createDesc = __webpack_require__(474); module.exports = __webpack_require__(191) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { @@ -65081,12 +65428,12 @@ module.exports = __webpack_require__(191) ? function (object, key, value) { /***/ }), -/* 468 */ +/* 469 */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(469); -var IE8_DOM_DEFINE = __webpack_require__(470); -var toPrimitive = __webpack_require__(472); +var anObject = __webpack_require__(470); +var IE8_DOM_DEFINE = __webpack_require__(471); +var toPrimitive = __webpack_require__(473); var dP = Object.defineProperty; exports.f = __webpack_require__(191) ? Object.defineProperty : function defineProperty(O, P, Attributes) { @@ -65103,7 +65450,7 @@ exports.f = __webpack_require__(191) ? Object.defineProperty : function definePr /***/ }), -/* 469 */ +/* 470 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(190); @@ -65114,16 +65461,16 @@ module.exports = function (it) { /***/ }), -/* 470 */ +/* 471 */ /***/ (function(module, exports, __webpack_require__) { module.exports = !__webpack_require__(191) && !__webpack_require__(245)(function () { - return Object.defineProperty(__webpack_require__(471)('div'), 'a', { get: function () { return 7; } }).a != 7; + return Object.defineProperty(__webpack_require__(472)('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), -/* 471 */ +/* 472 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(190); @@ -65136,7 +65483,7 @@ module.exports = function (it) { /***/ }), -/* 472 */ +/* 473 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) @@ -65154,7 +65501,7 @@ module.exports = function (it, S) { /***/ }), -/* 473 */ +/* 474 */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { @@ -65168,7 +65515,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 474 */ +/* 475 */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; @@ -65178,7 +65525,7 @@ module.exports = function (it, key) { /***/ }), -/* 475 */ +/* 476 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65206,7 +65553,7 @@ exports.Counter = Counter; //# sourceMappingURL=Counter.js.map /***/ }), -/* 476 */ +/* 477 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65295,7 +65642,7 @@ exports.DateHelper = DateHelper; //# sourceMappingURL=DateHelper.js.map /***/ }), -/* 477 */ +/* 478 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65513,7 +65860,7 @@ MigrationHelper.TYPES = { //# sourceMappingURL=MigrationHelper.js.map /***/ }), -/* 478 */ +/* 479 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process, global) {/*! ***************************************************************************** @@ -66651,7 +66998,7 @@ var Reflect; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(247), __webpack_require__(193))) /***/ }), -/* 479 */ +/* 480 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -66664,7 +67011,7 @@ var Reflect; var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -66751,7 +67098,7 @@ module.exports = Sha /***/ }), -/* 480 */ +/* 481 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66908,7 +67255,7 @@ function fromByteArray (uint8) { /***/ }), -/* 481 */ +/* 482 */ /***/ (function(module, exports) { /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ @@ -66999,7 +67346,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { /***/ }), -/* 482 */ +/* 483 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -67010,7 +67357,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 483 */ +/* 484 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -67024,7 +67371,7 @@ module.exports = Array.isArray || function (arr) { var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -67115,7 +67462,7 @@ module.exports = Sha1 /***/ }), -/* 484 */ +/* 485 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -67129,7 +67476,7 @@ module.exports = Sha1 var inherits = __webpack_require__(109) var Sha256 = __webpack_require__(248) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var W = new Array(64) @@ -67174,13 +67521,13 @@ module.exports = Sha224 /***/ }), -/* 485 */ +/* 486 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(109) var SHA512 = __webpack_require__(249) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var W = new Array(160) @@ -67237,7 +67584,7 @@ module.exports = Sha384 /***/ }), -/* 486 */ +/* 487 */ /***/ (function(module, exports, __webpack_require__) { @@ -67253,7 +67600,7 @@ function setup(env) { createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; - createDebug.humanize = __webpack_require__(487); + createDebug.humanize = __webpack_require__(488); createDebug.destroy = destroy; Object.keys(env).forEach(key => { @@ -67504,7 +67851,7 @@ module.exports = setup; /***/ }), -/* 487 */ +/* 488 */ /***/ (function(module, exports) { /** @@ -67672,7 +68019,7 @@ function plural(ms, msAbs, n, name) { /***/ }), -/* 488 */ +/* 489 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67793,7 +68140,7 @@ exports.Prioritized = Prioritized; //# sourceMappingURL=Prioritized.js.map /***/ }), -/* 489 */ +/* 490 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67829,7 +68176,7 @@ exports.PromiseWithHandlers = PromiseWithHandlers; //# sourceMappingURL=PromiseWithHandlers.js.map /***/ }), -/* 490 */ +/* 491 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67868,7 +68215,7 @@ exports.Random = Random; //# sourceMappingURL=Random.js.map /***/ }), -/* 491 */ +/* 492 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67947,7 +68294,7 @@ exports.DragHelper = DragHelper; //# sourceMappingURL=DragHelper.js.map /***/ }), -/* 492 */ +/* 493 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68024,7 +68371,7 @@ exports.HotkeyManager = HotkeyManager; //# sourceMappingURL=HotkeyManager.js.map /***/ }), -/* 493 */ +/* 494 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68163,7 +68510,7 @@ exports.InputSelect = InputSelect; //# sourceMappingURL=InputSelect.js.map /***/ }), -/* 494 */ +/* 495 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68172,11 +68519,11 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(495)); +__export(__webpack_require__(496)); /***/ }), -/* 495 */ +/* 496 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68191,7 +68538,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", { value: true }); -const js_helper_1 = __webpack_require__(22); +const js_helper_1 = __webpack_require__(17); class EventManager { constructor() { this._listeners = {}; @@ -68242,7 +68589,7 @@ EventManager._instance = null; /***/ }), -/* 496 */ +/* 497 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68271,9 +68618,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.ContainerSite = void 0; -var TemplateSite_1 = __webpack_require__(199); +var TemplateSite_1 = __webpack_require__(198); -var containerTemplate = __webpack_require__(497); +var containerTemplate = __webpack_require__(498); /** * Seite, welche das Container-Template benutzt */ @@ -68302,13 +68649,13 @@ var ContainerSite = /*#__PURE__*/function (_TemplateSite_1$Templ) { exports.ContainerSite = ContainerSite; /***/ }), -/* 497 */ +/* 498 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/container.html"; /***/ }), -/* 498 */ +/* 499 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68541,7 +68888,7 @@ var DelegateSite = /*#__PURE__*/function (_AbstractSite_1$Abstr) { exports.DelegateSite = DelegateSite; /***/ }), -/* 499 */ +/* 500 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68612,19 +68959,19 @@ exports.AbstractWindowFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Helper_1 = __webpack_require__(7); var ViewHelper_1 = __webpack_require__(27); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var NativeStoragePromise_1 = __webpack_require__(42); -var Toast_1 = __webpack_require__(101); +var Toast_1 = __webpack_require__(85); -var template = __webpack_require__(500); +var template = __webpack_require__(501); var AbstractWindowFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(AbstractWindowFragment, _AbstractFragment_1$A); @@ -69455,13 +69802,13 @@ var AbstractWindowFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.AbstractWindowFragment = AbstractWindowFragment; /***/ }), -/* 500 */ +/* 501 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/abstractWindowTemplate.html"; /***/ }), -/* 501 */ +/* 502 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69532,11 +69879,11 @@ exports.AlphabeticListFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var client_1 = __webpack_require__(197); +var client_1 = __webpack_require__(147); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); -var defaultView = __webpack_require__(502); +var defaultView = __webpack_require__(503); var AlphabeticListFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(AlphabeticListFragment, _AbstractFragment_1$A); @@ -69695,13 +70042,13 @@ var AlphabeticListFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.AlphabeticListFragment = AlphabeticListFragment; /***/ }), -/* 502 */ +/* 503 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/alphabeticListFragment.html"; /***/ }), -/* 503 */ +/* 504 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69772,13 +70119,13 @@ exports.TabFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var defaultTabView = __webpack_require__(504); +var defaultTabView = __webpack_require__(505); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var client_1 = __webpack_require__(197); +var client_1 = __webpack_require__(147); var TabFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(TabFragment, _AbstractFragment_1$A); @@ -69913,13 +70260,13 @@ var TabFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.TabFragment = TabFragment; /***/ }), -/* 504 */ +/* 505 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/tabFragment.html"; /***/ }), -/* 505 */ +/* 506 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69930,7 +70277,7 @@ Object.defineProperty(exports, "__esModule", { }); /***/ }), -/* 506 */ +/* 507 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69967,9 +70314,9 @@ var MenuAction_1 = __webpack_require__(80); var Dialog_1 = __webpack_require__(84); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var errorIcon = __webpack_require__(507); +var errorIcon = __webpack_require__(508); var ErrorAction = /*#__PURE__*/function (_MenuAction_1$MenuAct) { _inherits(ErrorAction, _MenuAction_1$MenuAct); @@ -70036,7 +70383,7 @@ ErrorAction._instance = null; ErrorAction._errors = []; /***/ }), -/* 507 */ +/* 508 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -70044,7 +70391,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/errorIcon.png"); /***/ }), -/* 508 */ +/* 509 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70106,19 +70453,19 @@ App_1.App.addInitialization(function (app) { }); /***/ }), -/* 509 */ +/* 510 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/navbar.html"; /***/ }), -/* 510 */ +/* 511 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/menuSite.html"; /***/ }), -/* 511 */ +/* 512 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70193,7 +70540,7 @@ var SwipeChildFragment_1 = __webpack_require__(263); var Helper_1 = __webpack_require__(15); -var view = __webpack_require__(512); +var view = __webpack_require__(513); var SwipeFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(SwipeFragment, _AbstractFragment_1$A); @@ -70388,13 +70735,13 @@ SwipeFragment.MAX_Y = 80; SwipeFragment.MIN_X = 150; /***/ }), -/* 512 */ +/* 513 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/swipeFragment.html"; /***/ }), -/* 513 */ +/* 514 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70448,7 +70795,7 @@ var ButtonChooseDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ButtonChooseDialog = ButtonChooseDialog; /***/ }), -/* 514 */ +/* 515 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70479,11 +70826,11 @@ exports.ChooseDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var view = __webpack_require__(264); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var Helper_1 = __webpack_require__(7); @@ -70540,7 +70887,7 @@ var ChooseDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ChooseDialog = ChooseDialog; /***/ }), -/* 515 */ +/* 516 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70676,7 +71023,7 @@ var ConfirmDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ConfirmDialog = ConfirmDialog; /***/ }), -/* 516 */ +/* 517 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70730,7 +71077,728 @@ var ImgChooseDialog = /*#__PURE__*/function (_ElemChooseDialog_1$E) { exports.ImgChooseDialog = ImgChooseDialog; /***/ }), -/* 517 */ +/* 518 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Form = void 0; + +var DataManager_1 = __webpack_require__(59); + +var Helper_1 = __webpack_require__(15); + +var Translator_1 = __webpack_require__(30); + +var Toast_1 = __webpack_require__(85); + +var ImageSelectionElement_1 = __webpack_require__(266); + +var js_helper_1 = __webpack_require__(17); + +var Form = /*#__PURE__*/function () { + function Form(formElem, urlOrCallback, method, imageSelectionSelector) { + var _this = this; + + _classCallCheck(this, Form); + + this.imageSelectionElementReady = new js_helper_1.PromiseWithHandlers(); + this.imageSelectionElements = {}; + this.formElem = formElem; + this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); + this._elementChangeListener = null; + this._validators = []; + this._isBusy = false; + + if (imageSelectionSelector === undefined) { + imageSelectionSelector = "input.image-selection"; + } + + if (typeof urlOrCallback === "string") { + this._submitHandler = function (values) { + if (_this._method.toLowerCase() === "get") { + return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); + } else {//TODO, wenn Serververbindung kommt + // return (DataManager.send(urlOrCallback, values)); + } + }; + } else { + this._submitHandler = urlOrCallback; + } + + this._editors = []; + this._submitCallback = null; + + this.errorCallback = function (errors) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.setErrors(errors); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }; + + formElem.addEventListener("submit", function (e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + _context2.next = 3; + return self.doSubmit(e); + + case 3: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + }); + this.prepareForImageSelection(imageSelectionSelector).then(function (r) { + return _this.imageSelectionElementReady.resolve(r); + }); + var self = this; + + _toConsumableArray(formElem.elements).forEach(function (element) { + element.addEventListener("change", function () { + if (this.value.trim() !== "") { + this.classList.add("notEmpty"); + } else { + this.classList.remove("notEmpty"); + } + + this.setCustomValidity(""); + + if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { + self._elementChangeListener(element, this); + } + + this.setCustomValidity(""); + + if (element.accept && element.accept.indexOf("image") !== -1) { + if (element.files && element.files[0]) { + var reader = new FileReader(); + + reader.onload = function (e) { + var previewElem = formElem.querySelector("." + element.name + "-preview"); + + if (previewElem) { + previewElem.src = e.target["result"]; + } + }; + + reader.readAsDataURL(element.files[0]); + } else { + formElem.querySelector("." + element.name + "-preview").src = ""; + } + } + }); + element.addEventListener("keydown", function () { + this.setCustomValidity(""); + }); + }); + } + + _createClass(Form, [{ + key: "prepareForImageSelection", + value: function prepareForImageSelection(imageSelectionSelector) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + var _this2 = this; + + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return Helper_1.Helper.asyncForEach(this.formElem.querySelectorAll(imageSelectionSelector), function (imgElement) { + return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + var name, value, imgSelectionElement; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + name = ""; + value = ""; + + if (imgElement instanceof HTMLInputElement) { + name = imgElement.name; + value = imgElement.value; + } + + if (Helper_1.Helper.isNull(name) || name === "") { + name = imgElement.dataset["name"]; + } + + if (Helper_1.Helper.isNull(value) || value === "") { + value = imgElement.dataset["value"]; + } + + imgSelectionElement = new ImageSelectionElement_1.ImageSelectionElement(name); + + if (!(value && value.trim() !== "")) { + _context3.next = 15; + break; + } + + _context3.prev = 7; + _context3.next = 10; + return imgSelectionElement.setValue(JSON.parse(value)); + + case 10: + _context3.next = 15; + break; + + case 12: + _context3.prev = 12; + _context3.t0 = _context3["catch"](7); + console.warn(_context3.t0); + + case 15: + this.imageSelectionElements[name] = imgSelectionElement; + _context3.t1 = imgElement; + _context3.next = 19; + return imgSelectionElement.getView(); + + case 19: + _context3.t2 = _context3.sent; + + _context3.t1.replaceWith.call(_context3.t1, _context3.t2); + + case 21: + case "end": + return _context3.stop(); + } + } + }, _callee3, this, [[7, 12]]); + })); + }, true); + + case 2: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + } + }, { + key: "setImagesForImageSelectionElement", + value: function setImagesForImageSelectionElement(name, images) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { + return regeneratorRuntime.wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + _context5.next = 2; + return this.imageSelectionElementReady; + + case 2: + if (this.imageSelectionElements[name]) { + this.imageSelectionElements[name].setImages(images); + } + + case 3: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + } + }, { + key: "addValidator", + value: function addValidator(validatorCallback) { + this._validators.push(validatorCallback); + } + }, { + key: "onError", + value: function onError(errorHandler) { + this.errorCallback = errorHandler; + } + }, { + key: "addEditor", + value: function addEditor(e) { + this._editors.push(e); + } + }, { + key: "doSubmit", + value: function doSubmit(e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { + var res; + return regeneratorRuntime.wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + if (this._isBusy) { + _context6.next = 5; + break; + } + + _context6.next = 3; + return this.submit(); + + case 3: + res = _context6.sent; + return _context6.abrupt("return", res); + + case 5: + return _context6.abrupt("return", false); + + case 6: + case "end": + return _context6.stop(); + } + } + }, _callee6, this); + })); + } + }, { + key: "setValues", + value: function setValues(valuePromise) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { + var values, k, options, val, option, previewImage; + return regeneratorRuntime.wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + this.setIsBusy(true); + _context7.next = 3; + return Promise.resolve(valuePromise); + + case 3: + values = _context7.sent; + this.setIsBusy(false); + + for (k in values) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k])) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { + options = this.formElem.elements[k].options; + + for (val in values[k + "Options"]) { + option = document.createElement("option"); + option.value = val; + option.innerText = values[k + "Options"][val]; + options.add(option); + } + } + + if (this.formElem.elements[k].type && (this.formElem.elements[k].type === "checkbox" || this.formElem.elements[k].type === "radio")) { + this.formElem.elements[k].checked = this.formElem.elements[k].value == values[k]; + } else if (this.formElem.elements[k].type && this.formElem.elements[k].type === "file") { + if (this.formElem.elements[k + "-hidden"]) { + this.formElem.elements[k + "-hidden"].value = values[k]; + } + + if (this.formElem.elements[k].accept && this.formElem.elements[k].accept.indexOf("image") !== -1) { + previewImage = this.formElem.querySelector("." + k + "-preview"); + + if (previewImage) { + previewImage.src = values[k]; + } + } + } else { + this.formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); + + if (this.formElem.elements[k].classList) { + if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { + this.formElem.elements[k].classList.add("notEmpty"); + } else { + this.formElem.elements[k].classList.remove("notEmpty"); + } + } + } + } + + if (Helper_1.Helper.isNotNull(this.imageSelectionElements[k])) { + console.log("setImg", k, values[k]); + this.imageSelectionElements[k].setValue(values[k]); + } + } + + return _context7.abrupt("return", this); + + case 7: + case "end": + return _context7.stop(); + } + } + }, _callee7, this); + })); + } + }, { + key: "getValues", + value: function getValues(filesToBase64) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { + var valuesFormData, values; + return regeneratorRuntime.wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + valuesFormData = new FormData(this.formElem); + values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { + return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); + }, {}); + + if (!Helper_1.Helper.nonNull(filesToBase64, true)) { + _context8.next = 6; + break; + } + + _context8.next = 5; + return Form.filesToBase64(values); + + case 5: + values = _context8.sent; + + case 6: + return _context8.abrupt("return", values); + + case 7: + case "end": + return _context8.stop(); + } + } + }, _callee8, this); + })); + } + }, { + key: "setElementChangeListener", + value: function setElementChangeListener(listener) { + this._elementChangeListener = listener; + } + }, { + key: "clearErrors", + value: function clearErrors() { + var _this3 = this; + + Object.keys(this.formElem.elements).forEach(function (elemKey) { + _this3.formElem.elements[elemKey].setCustomValidity(""); + }); + } + }, { + key: "setErrors", + value: function setErrors(errors) { + var hasElem = false; + var firstError = null; // let notCatchedErrors = []; + + for (var k in errors) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k]) && this.formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this.formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this.formElem.elements[k].disabled) || !this.formElem.elements[k].disabled)) { + this.formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); + hasElem = true; + } else { + new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); + } // if (Helper.isNull(firstError)) { + // firstError = ; + // } + + } // if (!hasElem && Helper.isNotNull(firstError)) { + // for (let k in this._formElem.elements) { + // if (this._formElem.elements[k].type !== "hidden") { + // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); + // hasElem = true; + // break; + // } + // } + // } + + + if (hasElem) { + "reportValidity" in this.formElem && this.formElem.reportValidity(); + } + } + }, { + key: "setIsBusy", + value: function setIsBusy(isBusy) { + this._isBusy = isBusy; + + if (this._isBusy) { + this.formElem.classList.add("sending"); + } else { + this.formElem.classList.remove("sending"); + } + } + }, { + key: "submit", + value: function submit() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { + var res; + return regeneratorRuntime.wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + this._editors.forEach(function (e) { + return e.updateSourceElement(); + }); + + this.setIsBusy(true); + _context9.next = 4; + return this.validate(); + + case 4: + if (!_context9.sent) { + _context9.next = 24; + break; + } + + res = false; + _context9.prev = 6; + _context9.t0 = this; + _context9.next = 10; + return this.getValues(); + + case 10: + _context9.t1 = _context9.sent; + _context9.t2 = this; + _context9.next = 14; + return _context9.t0._submitHandler.call(_context9.t0, _context9.t1, _context9.t2); + + case 14: + res = _context9.sent; + _context9.next = 20; + break; + + case 17: + _context9.prev = 17; + _context9.t3 = _context9["catch"](6); + console.error(_context9.t3); + + case 20: + _context9.prev = 20; + this.setIsBusy(false); + return _context9.finish(20); + + case 23: + return _context9.abrupt("return", res); + + case 24: + this.setIsBusy(false); + return _context9.abrupt("return", false); + + case 26: + case "end": + return _context9.stop(); + } + } + }, _callee9, this, [[6, 17, 20, 23]]); + })); + } + }, { + key: "validate", + value: function validate() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee11() { + var _this4 = this; + + var values, res, hasErrors, errors; + return regeneratorRuntime.wrap(function _callee11$(_context11) { + while (1) { + switch (_context11.prev = _context11.next) { + case 0: + if (!("reportValidity" in this.formElem && !this.formElem.reportValidity())) { + _context11.next = 2; + break; + } + + return _context11.abrupt("return", false); + + case 2: + _context11.next = 4; + return this.getValues(); + + case 4: + values = _context11.sent; + _context11.next = 7; + return Helper_1.Helper.asyncForEach(this._validators, function (validator) { + return __awaiter(_this4, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee10() { + return regeneratorRuntime.wrap(function _callee10$(_context10) { + while (1) { + switch (_context10.prev = _context10.next) { + case 0: + return _context10.abrupt("return", validator(values, this)); + + case 1: + case "end": + return _context10.stop(); + } + } + }, _callee10, this); + })); + }, true); + + case 7: + res = _context11.sent; + hasErrors = false; + errors = {}; + res.forEach(function (value) { + if (value !== true) { + hasErrors = true; + + if (_typeof(value) === "object") { + for (var k in value) { + errors[k] = value[k]; + } + } + } + }); + + if (!hasErrors) { + _context11.next = 15; + break; + } + + _context11.next = 14; + return this.setErrors(errors); + + case 14: + return _context11.abrupt("return", false); + + case 15: + return _context11.abrupt("return", true); + + case 16: + case "end": + return _context11.stop(); + } + } + }, _callee11, this); + })); + } + }, { + key: "onSubmit", + value: function onSubmit(callback) { + this._submitCallback = callback; + } + }, { + key: "getFormElement", + value: function getFormElement() { + return this.formElem; + } + }], [{ + key: "filesToBase64", + value: function filesToBase64(values) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee12() { + var filePromises; + return regeneratorRuntime.wrap(function _callee12$(_context12) { + while (1) { + switch (_context12.prev = _context12.next) { + case 0: + filePromises = []; + Object.keys(values).forEach(function (key) { + if (values[key] instanceof Blob) { + filePromises.push(new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + return resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(values[key]); + }).then(function (base64) { + return values[key] = base64; + })); + } + }); + _context12.next = 4; + return Promise.all(filePromises); + + case 4: + return _context12.abrupt("return", values); + + case 5: + case "end": + return _context12.stop(); + } + } + }, _callee12); + })); + } + }]); + + return Form; +}(); + +exports.Form = Form; + +/***/ }), +/* 519 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__.p + "html/imageSelectionElement.html"; + +/***/ }), +/* 520 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70779,7 +71847,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.ScaleHelper = void 0; -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var ScaleHelper = /*#__PURE__*/function () { function ScaleHelper() { @@ -70956,7 +72024,7 @@ var ScaleHelper = /*#__PURE__*/function () { exports.ScaleHelper = ScaleHelper; /***/ }), -/* 518 */ +/* 521 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71162,25 +72230,25 @@ var PromiseHelper = /*#__PURE__*/function () { exports.PromiseHelper = PromiseHelper; /***/ }), -/* 519 */ +/* 522 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/shareDialog.html"; /***/ }), -/* 520 */ +/* 523 */ /***/ (function(module) { module.exports = JSON.parse("{\"Sunday\":\"Sonntag\",\"Monday\":\"Montag\",\"Tuesday\":\"Dienstag\",\"Wednesday\":\"Mittwoch\",\"Thursday\":\"Donnerstag\",\"Friday\":\"Freitag\",\"Saturday\":\"Samstag\",\"January\":\"Januar\",\"February\":\"Februar\",\"March\":\"März\",\"April\":\"April\",\"May\":\"Mai\",\"June\":\"Juni\",\"July\":\"Juli\",\"August\":\"August\",\"September\":\"September\",\"October\":\"Oktober\",\"November\":\"November\",\"December\":\"Dezember\",\"Sun\":\"So\",\"Mon\":\"Mo\",\"Tue\":\"Di\",\"Wed\":\"Mi\",\"Thu\":\"Do\",\"Fri\":\"Fr\",\"Sat\":\"Sa\",\"Jan\":\"Jan\",\"Feb\":\"Feb\",\"Mar\":\"Mär\",\"Apr\":\"Apr\",\"Jun\":\"Jun\",\"Jul\":\"Jul\",\"Aug\":\"Aug\",\"Sep\":\"Sep\",\"Oct\":\"Okt\",\"Nov\":\"Nov\",\"Dec\":\"Dez\",\"cannot open popups\":\"Bitte erlaube Popups, um die Funktion nutzen zu können.\"}"); /***/ }), -/* 521 */ +/* 524 */ /***/ (function(module) { module.exports = JSON.parse("{\"Sunday\":\"Sunday\",\"Monday\":\"Monday\",\"Tuesday\":\"Tuesday\",\"Wednesday\":\"Wednesday\",\"Thursday\":\"Thursday\",\"Friday\":\"Friday\",\"Saturday\":\"Saturday\",\"January\":\"January\",\"February\":\"February\",\"March\":\"March\",\"April\":\"April\",\"May\":\"May\",\"June\":\"June\",\"July\":\"July\",\"August\":\"August\",\"September\":\"September\",\"October\":\"October\",\"November\":\"November\",\"December\":\"December\",\"Sun\":\"Sun\",\"Mon\":\"Mon\",\"Tue\":\"Tue\",\"Wed\":\"Wed\",\"Thu\":\"Thu\",\"Fri\":\"Fri\",\"Sat\":\"Sat\",\"Jan\":\"Jan\",\"Feb\":\"Feb\",\"Mar\":\"Mar\",\"Apr\":\"Apr\",\"Jun\":\"Jun\",\"Jul\":\"Jul\",\"Aug\":\"Aug\",\"Sep\":\"Sep\",\"Oct\":\"Oct\",\"Nov\":\"Nov\",\"Dec\":\"Dec\",\"cannot open popups\":\"Please allow popups to use this function.\"}"); /***/ }), -/* 522 */ +/* 525 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71212,43 +72280,43 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(246), exports); /***/ }), -/* 523 */ +/* 526 */ /***/ (function(module) { module.exports = JSON.parse("{\"login\":\"Login\",\"logout\":\"Logout\",\"email\":\"E-Mail\",\"password\":\"Passwort\",\"email or password is wrong\":\"Die E-Mail oder das Passwort stimmt nicht!\",\"stay logged in\":\"Angemeldet bleiben\",\"goodbye\":\"Auf Wiedersehen\",\"welcome back\":\"Willkommen zurück\",\"registration successful\":\"Registrierung erfolgreich\",\"registration\":\"Anmelden\",\"I have read and accepted the terms and conditions.\":\"Ich habe die AGB gelesen und akzeptiert.\",\"retype password\":\"Passwort wiederholen\",\"the passwords do not match.\":\"Die Passwörter stimmen nicht überein.\",\"username\":\"Username\",\"email is already in use.\":\"Die E-Mail wird bereits verwendet.\",\"username is already in use.\":\"Der Username ist bereits vergeben.\",\"wrong email or password\":\"Falsche E-Mail oder falsches Passwort\",\"wrong rights\":\"Keine Berechtigung!\",\"passwort vergessen?\":\"Passwort vergessen?\",\"password forgotten\":\"Passwort vergessen\",\"request new password\":\"Neues Passwort setzen\",\"email is not in our database\":\"Die E-Mail ist nicht registriert!\",\"forgot-password-mail sent\":\"Es wurde eine E-Mail an die angegebene Adresse gesendet.\",\"password resetted\":\"Das Passwort wurde erfolgreich zurückgesetzt.\",\"token is not valid\":\"Der Link ist nicht mehr gültig.\",\"reset password\":\"Passwort zurücksetzen\",\"repeat password\":\"Passwort wiederholen\",\"token not valid\":\"Der Link ist nicht mehr gültig\",\"Not allowed\":\"Nicht erlaubt\",\"You don't have the rights to do this!\":\"Du hast nicht die Berechtigung, um das zu tun!\",\"If you are not logged in, please log in and try again.\":\"Wenn du noch nicht eingeloggt bist, logge dich ein und versuche es erneut.\"}"); /***/ }), -/* 524 */ +/* 527 */ /***/ (function(module) { module.exports = JSON.parse("{\"login\":\"Login\",\"logout\":\"Logout\",\"email\":\"E-Mail\",\"password\":\"Password\",\"email or password is wrong\":\"The e-mail or password is incorrect!\",\"stay logged in\":\"Stay logged in\",\"goodbye\":\"Goodbye\",\"welcome back\":\"Welcome back\",\"registration successful\":\"Registration successful\",\"registration\":\"Registration\",\"I have read and accepted the terms and conditions.\":\"I have read and accepted the terms and conditions.\",\"retype password\":\"Retype Password\",\"the passwords do not match.\":\"The passwords do not match.\",\"username\":\"Username\",\"email is already in use.\":\"This e-mail is already in use.\",\"username is already in use.\":\"This Username is already taken.\",\"wrong email or password\":\"Wrong E-Mail or Password!\",\"wrong rights\":\"Wrong Rights!\",\"passwort vergessen?\":\"password forgotten?\",\"password forgotten\":\"Password Forgotten\",\"request new password\":\"Request New Password\",\"email is not in our database\":\"The given E-Mailaddress is not registered!\",\"forgot-password-mail sent\":\"We sent you an E-Mail with instructions\",\"password resetted\":\"The password was successfully changed.\",\"token is not valid\":\"The given link is no longer valid.\",\"reset password\":\"Reset Password\",\"repeat password\":\"Repeat Password\",\"token not valid\":\"The link is not valid any more\",\"Not allowed\":\"Not allowed\",\"You don't have the rights to do this!\":\"You don't have the rights to do this!\",\"If you are not logged in, please log in and try again.\":\"If you are not logged in, please log in and try again.\"}"); /***/ }), -/* 525 */ +/* 528 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/loginSite.html"; /***/ }), -/* 526 */ +/* 529 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/forgotPasswordSite.html"; /***/ }), -/* 527 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/notAllowedSite.html"; /***/ }), -/* 528 */ +/* 531 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/selectUserDialog.html"; /***/ }), -/* 529 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71329,9 +72397,9 @@ var client_1 = __webpack_require__(132); var client_2 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var Role_1 = __webpack_require__(204); +var Role_1 = __webpack_require__(203); var User_1 = __webpack_require__(112); @@ -71732,7 +72800,7 @@ OfflineUserManager.DEFAULT_ROLES = []; OfflineUserManager._lastId = null; /***/ }), -/* 530 */ +/* 533 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71785,17 +72853,17 @@ var LastSyncDates_1 = __webpack_require__(129); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncClientDb_1 = __webpack_require__(128); var typeorm = __webpack_require__(47); -var EasySyncPartialModel_1 = __webpack_require__(202); +var EasySyncPartialModel_1 = __webpack_require__(201); var EasySyncBaseModel_1 = __webpack_require__(78); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); var SyncJob_old = /*#__PURE__*/function () { function SyncJob_old() { @@ -72379,7 +73447,7 @@ exports.SyncJob_old = SyncJob_old; SyncJob_old.SYNC_PATH_PREFIX = "sync"; /***/ }), -/* 531 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72450,9 +73518,9 @@ exports.ModifyEntitySite = void 0; var MenuSite_1 = __webpack_require__(69); -var Form_1 = __webpack_require__(161); +var Form_1 = __webpack_require__(210); -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var EasySyncBaseModel_1 = __webpack_require__(78); @@ -72822,7 +73890,7 @@ var ModifyEntitySite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { exports.ModifyEntitySite = ModifyEntitySite; /***/ }), -/* 532 */ +/* 535 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72873,7 +73941,7 @@ exports.SetupEasySync1000000000500 = void 0; var typeorm_1 = __webpack_require__(47); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var SetupEasySync1000000000500 = /*#__PURE__*/function () { function SetupEasySync1000000000500() { @@ -72960,7 +74028,7 @@ var SetupEasySync1000000000500 = /*#__PURE__*/function () { exports.SetupEasySync1000000000500 = SetupEasySync1000000000500; /***/ }), -/* 533 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73035,19 +74103,19 @@ var UserSite_1 = __webpack_require__(126); var Helper_1 = __webpack_require__(7); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var client_1 = __webpack_require__(4); var ViewHelper_1 = __webpack_require__(27); -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); -var SelectUserDialog_1 = __webpack_require__(273); +var SelectUserDialog_1 = __webpack_require__(274); -var view = __webpack_require__(534); +var view = __webpack_require__(537); var ChangeUserSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { _inherits(ChangeUserSite, _MenuSite_1$MenuSite); @@ -73307,13 +74375,13 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 534 */ +/* 537 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/changeUserSite.html"; /***/ }), -/* 535 */ +/* 538 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73384,13 +74452,13 @@ exports.RegistrationSite = void 0; var client_1 = __webpack_require__(4); -var view = __webpack_require__(536); +var view = __webpack_require__(539); var UserSite_1 = __webpack_require__(126); -var StartUserSiteMenuAction_1 = __webpack_require__(205); +var StartUserSiteMenuAction_1 = __webpack_require__(204); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); var User_1 = __webpack_require__(112); @@ -73513,13 +74581,13 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 536 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/registrationSite.html"; /***/ }), -/* 537 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73556,7 +74624,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.UserSyncModel = void 0; -var AccessEasySyncModel_1 = __webpack_require__(278); +var AccessEasySyncModel_1 = __webpack_require__(279); var User_1 = __webpack_require__(112); @@ -73596,7 +74664,7 @@ exports.UserSyncModel = UserSyncModel; UserSyncModel.NEED_USER = false; /***/ }), -/* 538 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73673,7 +74741,7 @@ exports.UserSyncPartialModel = UserSyncPartialModel; UserSyncPartialModel.NEED_USER = false; /***/ }), -/* 539 */ +/* 542 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73681,19 +74749,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/settings.png"); /***/ }), -/* 540 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/menu.html"; /***/ }), -/* 541 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/level.html"; /***/ }), -/* 542 */ +/* 545 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73701,55 +74769,55 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/single_coin_fall_on_concrete_.mp3"); /***/ }), -/* 543 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/end.html"; /***/ }), -/* 544 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/settingsSite.html"; /***/ }), -/* 545 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/tutorialSite.html"; /***/ }), -/* 546 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/settings.html"; /***/ }), -/* 547 */ +/* 550 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/credits.html"; /***/ }), -/* 548 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/privacyPolicy.html"; /***/ }), -/* 549 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/impressum.html"; /***/ }), -/* 550 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/contactSite.html"; /***/ }), -/* 551 */ +/* 554 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73757,7 +74825,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = (__webpack_require__.p + "index.css"); /***/ }), -/* 552 */ +/* 555 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73765,25 +74833,25 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./src/client/translations/de.json -var de = __webpack_require__(280); +var de = __webpack_require__(281); // EXTERNAL MODULE: ./src/client/translations/en.json -var en = __webpack_require__(281); +var en = __webpack_require__(282); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client.js var client = __webpack_require__(4); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/client/js/translationInit.js -var translationInit = __webpack_require__(269); +var translationInit = __webpack_require__(270); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/translationInit.js -var js_translationInit = __webpack_require__(268); +var js_translationInit = __webpack_require__(269); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/client.js var dist_client = __webpack_require__(133); // EXTERNAL MODULE: ./node_modules/cordova-sites-database/dist/cordova-sites-database.js -var cordova_sites_database = __webpack_require__(19); +var cordova_sites_database = __webpack_require__(20); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/shared/migrations/DeleteUserManagement.js var DeleteUserManagement = __webpack_require__(211); @@ -73792,10 +74860,10 @@ var DeleteUserManagement = __webpack_require__(211); var SetupUserManagement = __webpack_require__(212); // EXTERNAL MODULE: ./node_modules/js-helper/dist/shared.js -var shared = __webpack_require__(22); +var shared = __webpack_require__(17); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/shared.js -var dist_shared = __webpack_require__(287); +var dist_shared = __webpack_require__(288); // CONCATENATED MODULE: ./src/shared/model/LevelData.ts function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } @@ -76121,7 +77189,7 @@ function EndSite_isNativeReflectConstruct() { if (typeof Reflect === "undefined" function EndSite_getPrototypeOf(o) { EndSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return EndSite_getPrototypeOf(o); } -var view = __webpack_require__(543); +var view = __webpack_require__(546); var EndSite = /*#__PURE__*/function (_MenuSite) { @@ -76138,7 +77206,7 @@ var EndSite = /*#__PURE__*/function (_MenuSite) { return EndSite; }(client["MenuSite"]); // EXTERNAL MODULE: ./node_modules/cordova-sites-database/dist/BaseModel.js -var BaseModel = __webpack_require__(209); +var BaseModel = __webpack_require__(208); // CONCATENATED MODULE: ./src/client/js/model/LevelPlayed.ts function LevelPlayed_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LevelPlayed_typeof = function _typeof(obj) { return typeof obj; }; } else { LevelPlayed_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LevelPlayed_typeof(obj); } @@ -76330,7 +77398,7 @@ var LevelPlayed_LevelPlayed = /*#__PURE__*/function (_BaseModel) { }(BaseModel["BaseModel"]); cordova_sites_database["BaseDatabase"].addModel(LevelPlayed_LevelPlayed); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Sound/SoundManager.js -var SoundManager = __webpack_require__(17); +var SoundManager = __webpack_require__(18); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/MenuSite.js var MenuSite = __webpack_require__(69); @@ -76394,11 +77462,11 @@ var LevelSite_awaiter = undefined && undefined.__awaiter || function (thisArg, _ }); }; -var helpIcon = __webpack_require__(279).default; +var helpIcon = __webpack_require__(280).default; -var LevelSite_view = __webpack_require__(541); +var LevelSite_view = __webpack_require__(544); -var coinSound = __webpack_require__(542).default; +var coinSound = __webpack_require__(545).default; @@ -76598,7 +77666,7 @@ var LevelSite_LevelSite = /*#__PURE__*/function (_MenuSite) { case 22: this.continueButtonScaler = _context3.sent; _context3.next = 25; - return scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5); + return scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5); case 25: this.wonTextScaler = _context3.sent; @@ -77042,7 +78110,10 @@ var LevelSite_LevelSite = /*#__PURE__*/function (_MenuSite) { _this9.continueButtonScaler(); - _this9.levelScaler(); + _this9.levelScaler(); // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => { + // this.levelScaler(); + // }); + _context10.t0 = client["Matomo"]; _context10.t1 = parseInt; @@ -77499,16 +78570,16 @@ var MainMenuLevel = /*#__PURE__*/function (_FourWordsLevel) { return MainMenuLevel; }(FourWordsLevel_FourWordsLevel); // EXTERNAL MODULE: ./node_modules/cordova-sites-easy-sync/dist/client/SyncJob.js -var SyncJob = __webpack_require__(210); +var SyncJob = __webpack_require__(209); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/ShareManager/ShareManager.js -var ShareManager = __webpack_require__(208); +var ShareManager = __webpack_require__(207); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Translator.js -var Translator = __webpack_require__(32); +var Translator = __webpack_require__(30); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Legacy/Matomo.js -var Matomo = __webpack_require__(55); +var Matomo = __webpack_require__(56); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction.js var MenuAction = __webpack_require__(80); @@ -77583,7 +78654,7 @@ var TutorialSite_awaiter = undefined && undefined.__awaiter || function (thisArg -var TutorialSite_view = __webpack_require__(545); +var TutorialSite_view = __webpack_require__(548); var TutorialSite_TutorialSite = /*#__PURE__*/function (_MenuSite) { TutorialSite_inherits(TutorialSite, _MenuSite); @@ -77844,7 +78915,7 @@ function CreditsSite_isNativeReflectConstruct() { if (typeof Reflect === "undefi function CreditsSite_getPrototypeOf(o) { CreditsSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return CreditsSite_getPrototypeOf(o); } -var CreditsSite_view = __webpack_require__(547); +var CreditsSite_view = __webpack_require__(550); @@ -77923,7 +78994,7 @@ var PrivacyPolicySite_awaiter = undefined && undefined.__awaiter || function (th }); }; -var PrivacyPolicySite_view = __webpack_require__(548); +var PrivacyPolicySite_view = __webpack_require__(551); @@ -78036,7 +79107,7 @@ function ImpressumSite_isNativeReflectConstruct() { if (typeof Reflect === "unde function ImpressumSite_getPrototypeOf(o) { ImpressumSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ImpressumSite_getPrototypeOf(o); } -var ImpressumSite_view = __webpack_require__(549); +var ImpressumSite_view = __webpack_require__(552); @@ -78066,13 +79137,13 @@ var AbstractFragment = __webpack_require__(79); var LastSyncDates = __webpack_require__(129); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Form.js -var Form = __webpack_require__(161); +var Form = __webpack_require__(210); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/DataManager.js -var DataManager = __webpack_require__(68); +var DataManager = __webpack_require__(59); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Toast/Toast.js -var Toast = __webpack_require__(101); +var Toast = __webpack_require__(85); // CONCATENATED MODULE: ./src/client/js/Sites/ContactSite.ts function ContactSite_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ContactSite_typeof = function _typeof(obj) { return typeof obj; }; } else { ContactSite_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ContactSite_typeof(obj); } @@ -78133,7 +79204,7 @@ var ContactSite_awaiter = undefined && undefined.__awaiter || function (thisArg, }); }; -var ContactSite_view = __webpack_require__(550); +var ContactSite_view = __webpack_require__(553); @@ -78263,7 +79334,7 @@ var WordRotatorSettingFragment_awaiter = undefined && undefined.__awaiter || fun -var WordRotatorSettingFragment_view = __webpack_require__(546); +var WordRotatorSettingFragment_view = __webpack_require__(549); @@ -78488,7 +79559,7 @@ function SettingsSite_isNativeReflectConstruct() { if (typeof Reflect === "undef function SettingsSite_getPrototypeOf(o) { SettingsSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SettingsSite_getPrototypeOf(o); } -var SettingsSite_view = __webpack_require__(544); +var SettingsSite_view = __webpack_require__(547); @@ -78574,9 +79645,9 @@ var MainMenuSite_awaiter = undefined && undefined.__awaiter || function (thisArg }); }; -var settingsIcon = __webpack_require__(539).default; +var settingsIcon = __webpack_require__(542).default; -var MainMenuSite_view = __webpack_require__(540); +var MainMenuSite_view = __webpack_require__(543); @@ -79039,7 +80110,7 @@ var ClientSetup_ClientSetup1000000002001 = /*#__PURE__*/function () { var EasySyncClientDb = __webpack_require__(128); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/Menu/NavbarFragment.js -var NavbarFragment = __webpack_require__(160); +var NavbarFragment = __webpack_require__(161); // CONCATENATED MODULE: ./src/client/sound/brightAndBeautifull__.mp3 /* harmony default export */ var brightAndBeautifull_ = ("img/brightAndBeautifull__.mp3"); diff --git a/src/server/public/bundle.js.map b/src/server/public/bundle.js.map index 3e8e5ec..592b635 100644 --- a/src/server/public/bundle.js.map +++ b/src/server/public/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/typeorm/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js","webpack:///./node_modules/typeorm/browser/driver/Query.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///../src/client.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/Table.js","webpack:///./node_modules/typeorm/browser/util/OrmUtils.js","webpack:///./node_modules/js-helper/dist/shared/Helper.js","webpack:///./node_modules/typeorm/browser/subscriber/BroadcasterResult.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperator.js","webpack:///./node_modules/typeorm/browser/platform/BrowserPlatformTools.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///../../../../src/client/js/Legacy/Helper.ts","webpack:///./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js","webpack:///../../../../src/client/js/Sound/SoundManager.ts","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///../src/cordova-sites-database.ts","webpack:///./node_modules/typeorm/browser/driver/DriverUtils.js","webpack:///./node_modules/typeorm/browser/util/DateUtils.js","webpack:///./node_modules/js-helper/dist/shared.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/typeorm/browser/util/ObjectUtils.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableColumn.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/js-helper/dist/client/ViewHelper.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableUnique.js","webpack:///./node_modules/typeorm/browser/metadata/ColumnMetadata.js","webpack:///../../../src/client/js/Translator.ts","webpack:///../../../src/client/js/App.ts","webpack:///./node_modules/typeorm/browser/error/QueryRunnerAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/metadata/EntityMetadata.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/typeorm/browser/error/DriverOptionNotSetError.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableIndex.js","webpack:///./node_modules/typeorm/browser/error/QueryFailedError.js","webpack:///./node_modules/typeorm/browser/query-builder/Alias.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryExpressionMap.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsDriver.js","webpack:///../../../src/client/js/NativeStoragePromise.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableCheck.js","webpack:///./node_modules/typeorm/browser/error/TransactionNotStartedError.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/typeorm/browser/naming-strategy/DefaultNamingStrategy.js","webpack:///./node_modules/typeorm/browser/error/CannotExecuteNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/CannotConnectAlreadyConnectedError.js","webpack:///./node_modules/typeorm/browser/error/EntityMetadataNotFoundError.js","webpack:///./node_modules/typeorm/browser/migration/Migration.js","webpack:///./node_modules/typeorm/browser/driver/sqlserver/MssqlParameter.js","webpack:///./node_modules/typeorm/browser/migration/MigrationExecutor.js","webpack:///./node_modules/typeorm/browser/error/MissingPrimaryColumnError.js","webpack:///./node_modules/typeorm/browser/error/CircularRelationsError.js","webpack:///./node_modules/typeorm/browser/util/DepGraph.js","webpack:///./node_modules/typeorm/browser/error/DataTypeNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionOptionError.js","webpack:///./node_modules/typeorm/browser/error/InitializedRelationError.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataValidator.js","webpack:///./node_modules/typeorm/browser/error/QueryRunnerProviderAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/error/NoNeedToReleaseEntityManagerError.js","webpack:///./node_modules/typeorm/browser/repository/Repository.js","webpack:///./node_modules/typeorm/browser/repository/TreeRepository.js","webpack:///./node_modules/typeorm/browser/error/FindRelationsNotFoundError.js","webpack:///./node_modules/typeorm/browser/find-options/FindOptionsUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryDoesNotHaveEntityError.js","webpack:///./node_modules/typeorm/browser/repository/AbstractRepository.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryCannotInheritRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotTreeError.js","webpack:///./node_modules/typeorm/browser/repository/RepositoryFactory.js","webpack:///./node_modules/typeorm/browser/error/TreeRepositoryNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/MustBeEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectTopoligicalSorter.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js","webpack:///./node_modules/typeorm/browser/error/SubjectWithoutIdentifierError.js","webpack:///./node_modules/typeorm/browser/error/SubjectRemovedAndUpdatedError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/NestedSetSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotAttachTreeChildrenEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/ClosureSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/tree/MaterializedPathSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotDetermineEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/Subject.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/ManyToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectDatabaseEntityLoader.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/CascadesSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/EntityPersistExecutor.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/SqljsEntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManagerFactory.js","webpack:///./node_modules/typeorm/browser/error/MissingDriverError.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaDriver.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeDriver.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoDriver.js","webpack:///./node_modules/typeorm/browser/driver/postgres/PostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js","webpack:///./node_modules/typeorm/browser/driver/DriverFactory.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDirectoryExportedClassesLoader.js","webpack:///./node_modules/typeorm/browser/container.js","webpack:///./node_modules/typeorm/browser/metadata/IndexMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/EmbeddedMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationIdMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationCountMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/types/EventListenerTypes.js","webpack:///./node_modules/typeorm/browser/metadata-builder/MetadataUtils.js","webpack:///./node_modules/typeorm/browser/metadata/ForeignKeyMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/JunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/UniqueMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/RelationJoinColumnBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/EntityListenerMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/CheckMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/ExclusionMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-args/MetadataArgsStorage.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchemaTransformer.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/logger/SimpleConsoleLogger.js","webpack:///./node_modules/typeorm/browser/logger/AdvancedConsoleLogger.js","webpack:///./node_modules/typeorm/browser/platform/BrowserFileLoggerDummy.js","webpack:///./node_modules/typeorm/browser/logger/DebugLogger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerFactory.js","webpack:///./node_modules/typeorm/browser/cache/RedisQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/DbQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/QueryResultCacheFactory.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/connection/Connection.js","webpack:///./node_modules/typeorm/browser/error/ConnectionNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/AlreadyHasActiveConnectionError.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionManager.js","webpack:///./node_modules/typeorm/browser/platform/BrowserConnectionOptionsReaderDummy.js","webpack:///./node_modules/typeorm/browser/common/EntityTarget.js","webpack:///./node_modules/typeorm/browser/common/ObjectType.js","webpack:///./node_modules/typeorm/browser/common/ObjectLiteral.js","webpack:///./node_modules/typeorm/browser/common/DeepPartial.js","webpack:///./node_modules/typeorm/browser/error/CannotReflectMethodParameterTypeError.js","webpack:///./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js","webpack:///./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/PrimaryColumnCannotBeNullableError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinColumnError.js","webpack:///./node_modules/typeorm/browser/error/CannotGetEntityManagerNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/MetadataWithSuchNameAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/NamingStrategyNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinTableError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/PersistedEntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/ColumnTypeUndefinedError.js","webpack:///./node_modules/typeorm/browser/error/index.js","webpack:///./node_modules/typeorm/browser/decorator/columns/Column.js","webpack:///./node_modules/typeorm/browser/decorator/columns/CreateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/DeleteDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryGeneratedColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/UpdateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/VersionColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ViewColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ObjectIdColumn.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterLoad.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/EventSubscriber.js","webpack:///./node_modules/typeorm/browser/decorator/options/ColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/IndexOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinTableOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/RelationOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/EntityOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/ValueTransformer.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinColumn.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinTable.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationCount.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationId.js","webpack:///./node_modules/typeorm/browser/decorator/entity/Entity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/ChildEntity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/TableInheritance.js","webpack:///./node_modules/typeorm/browser/decorator/entity-view/ViewEntity.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/Transaction.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionManager.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionRepository.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeLevelColumn.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeParent.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeChildren.js","webpack:///./node_modules/typeorm/browser/decorator/tree/Tree.js","webpack:///./node_modules/typeorm/browser/decorator/Index.js","webpack:///./node_modules/typeorm/browser/decorator/Unique.js","webpack:///./node_modules/typeorm/browser/decorator/Check.js","webpack:///./node_modules/typeorm/browser/decorator/Exclusion.js","webpack:///./node_modules/typeorm/browser/decorator/Generated.js","webpack:///./node_modules/typeorm/browser/decorator/EntityRepository.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Any.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Between.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Equal.js","webpack:///./node_modules/typeorm/browser/find-options/operator/IsNull.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/ILike.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Like.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Not.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Raw.js","webpack:///./node_modules/typeorm/browser/find-options/FindConditions.js","webpack:///./node_modules/typeorm/browser/find-options/FindManyOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOneOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperatorType.js","webpack:///./node_modules/typeorm/browser/find-options/JoinOptions.js","webpack:///./node_modules/typeorm/browser/find-options/OrderByCondition.js","webpack:///./node_modules/typeorm/browser/logger/Logger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerOptions.js","webpack:///./node_modules/typeorm/browser/repository/BaseEntity.js","webpack:///./node_modules/typeorm/browser/repository/RemoveOptions.js","webpack:///./node_modules/typeorm/browser/repository/SaveOptions.js","webpack:///./node_modules/typeorm/browser/driver/mongodb/typings.js","webpack:///./node_modules/typeorm/browser/driver/types/DatabaseType.js","webpack:///./node_modules/typeorm/browser/driver/types/ReplicationMode.js","webpack:///./node_modules/typeorm/browser/index.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js","webpack:///./node_modules/typeorm/browser/util/StringUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilderUtils.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/typeorm/browser/subscriber/Broadcaster.js","webpack:///../../../../src/client/js/Legacy/Matomo.ts","webpack:///./node_modules/typeorm/browser/schema-builder/view/View.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///../../../src/client/js/ViewInflater.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js","webpack:///./node_modules/typeorm/browser/util/ApplyValueTransformers.js","webpack:///./node_modules/typeorm/browser/util/RandomGenerator.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///../../../src/client/js/DataManager.ts","webpack:///../../../../src/client/js/Context/MenuSite.ts","webpack:///./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js","webpack:///./node_modules/typeorm/browser/error/DriverPackageNotInstalledError.js","webpack:///./node_modules/typeorm/browser/error/ReturningStatementNotSupportedError.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchema.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///../../src/shared/EasySyncBaseModel.ts","webpack:///../../../../src/client/js/Context/AbstractFragment.ts","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/MenuAction.ts","webpack:///./node_modules/typeorm/node_modules/debug/src/browser.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///../../../../src/client/js/Dialog/Dialog.ts","webpack:///./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/OpenSubmenuAction.ts","webpack:///../../../src/client/js/UserManager.ts","webpack:///./node_modules/typeorm/browser/error/UpdateValuesMissingError.js","webpack:///../../../../src/client/js/Toast/Toast.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///../../../../src/client/js/Context/Context.ts","webpack:///../../../../src/shared/v1/model/User.ts","webpack:///./node_modules/typeorm/browser/error/EntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/EntityColumnNotFound.js","webpack:///./node_modules/typeorm/browser/query-builder/result/UpdateResult.js","webpack:///./node_modules/typeorm/browser/error/LimitOnUpdateNotSupportedError.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/SelectQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/ReturningResultsEntityUpdator.js","webpack:///./node_modules/typeorm/browser/schema-builder/util/TableUtils.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///../../../../src/client/js/Context/UserSite.ts","webpack:///../src/shared.ts","webpack:///../../src/client/EasySyncClientDb.ts","webpack:///../../src/client/LastSyncDates.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/InsertResult.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///../../../../src/client/js/Context/AbstractSite.ts","webpack:///../src/BaseDatabase.ts","webpack:///../../../../src/client/js/Site/LoginSite.ts","webpack:///../../../../src/client/js/MenuAction/UserMenuAction.ts","webpack:///../../src/client/ClientFileMedium.ts","webpack:///./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js","webpack:///./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js","webpack:///./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js","webpack:///./node_modules/typeorm/browser/query-builder/Brackets.js","webpack:///./node_modules/typeorm/browser/find-options/operator/In.js","webpack:///./node_modules/typeorm/browser/error/InsertValuesMissingError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/DeleteResult.js","webpack:///./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js","webpack:///./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js","webpack:///../../../../../src/client/js/Context/Menu/NavbarFragment.ts","webpack:///../../../src/client/js/Form.ts","webpack:///./node_modules/typeorm/browser/query-builder/JoinAttribute.js","webpack:///./node_modules/typeorm/browser/driver/SqlInMemory.js","webpack:///./node_modules/typeorm/browser/query-runner/BaseQueryRunner.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/js-helper/dist/shared/JsonHelper.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/typeorm/browser/query-builder/InsertQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/UpdateQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/DeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/client.js","webpack:///../../../../../src/client/js/Legacy/EventManager/EventManager.ts","webpack:///../../../../src/client/js/Context/TemplateSite.ts","webpack:///../../../../../src/client/js/Context/Menu/Menu.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/AccordionRenderer.ts","webpack:///../../src/shared/EasySyncPartialModel.ts","webpack:///../../src/shared/FileMedium.ts","webpack:///../../../../src/shared/v1/model/Role.ts","webpack:///../../../../src/client/js/MenuAction/StartUserSiteMenuAction.ts","webpack:///../../../src/client/FileWriter/FilePromise.ts","webpack:///./node_modules/typeorm/browser/query-builder/RelationUpdater.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationRemover.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js","webpack:///../../../../src/client/js/ShareManager/ShareManager.ts","webpack:///../src/BaseModel.ts","webpack:///../../src/client/SyncJob.ts","webpack:///../../../src/shared/migrations/DeleteUserManagement.ts","webpack:///../../../src/shared/migrations/SetupUserManagement.ts","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///../../src/shared/Translator.ts","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/typeorm/browser/query-builder/SoftDeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/shared/XSSHelper.js","webpack:///../../../../src/client/js/Context/SiteManager.ts","webpack:///./node_modules/js-helper/dist/client/Dragger/DraggedElement.js","webpack:///../../../../src/client/js/DataManager/NotOnlineError.ts","webpack:///../../../src/client/js/HistoryManager.ts","webpack:///../../../../src/client/js/ColorIndicator/ColorIndicator.ts","webpack:///../../../src/client/js/Singleton.ts","webpack:///../../../../../src/client/js/Context/Delegate/MasterSite.ts","webpack:///../../../../src/client/js/Toast/ToastManager.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/DropdownRenderer.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/MenuRenderer.ts","webpack:///../../../../../src/client/js/Context/Menu/Submenu.ts","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeChildFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Dialog/chooseDialog.html","webpack:///../../../../src/client/js/Dialog/ElemChooseDialog.ts","webpack:///../../../../src/client/js/ShareManager/ShareDialog.ts","webpack:///../../../../src/client/js/Sound/AudioChain.ts","webpack:///../../../src/client/js/translationInit.ts","webpack:///../../../../src/shared/v1/model/Access.ts","webpack:///../../../../src/client/js/Site/ForgotPasswordSite.ts","webpack:///../../../../src/client/js/Site/NotAllowedSite.ts","webpack:///../../../../src/client/js/Dialog/SelectUserDialog.ts","webpack:///../../../src/client/FileWriter/FileTransferPromise.ts","webpack:///../../../src/client/FileWriter/FileWriterPromise.ts","webpack:///../../src/client/ClientModel.ts","webpack:///../../src/client/ClientPartialModel.ts","webpack:///../../../../src/shared/v1/model/AccessEasySyncModel.ts","webpack:///./src/client/img/help.png","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptQueryRunner.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/js-helper/dist/shared/Counter.js","webpack:///./node_modules/js-helper/dist/shared/DateHelper.js","webpack:///./node_modules/js-helper/dist/shared/MigrationHelper.js","webpack:///./node_modules/reflect-metadata/Reflect.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/typeorm/node_modules/debug/src/common.js","webpack:///./node_modules/typeorm/node_modules/ms/index.js","webpack:///./node_modules/js-helper/dist/shared/Prioritized.js","webpack:///./node_modules/js-helper/dist/shared/PromiseWithHandlers.js","webpack:///./node_modules/js-helper/dist/shared/Random.js","webpack:///./node_modules/js-helper/dist/client/Dragger/DragHelper.js","webpack:///./node_modules/js-helper/dist/client/HotkeyManager.js","webpack:///./node_modules/js-helper/dist/client/InputSelect.js","webpack:///./node_modules/cs-event-manager/dist/shared.js","webpack:///./node_modules/cs-event-manager/dist/shared/EventManager.js","webpack:///../../../../src/client/js/Context/ContainerSite.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/container.html","webpack:///../../../../../src/client/js/Context/Delegate/DelegateSite.ts","webpack:///../../../../../src/client/js/Context/Fragment/AbstractWindowFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/abstractWindowTemplate.html","webpack:///../../../../../src/client/js/Context/Fragment/AlphabeticListFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/alphabeticListFragment.html","webpack:///../../../../../src/client/js/Context/Fragment/TabFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/tabFragment.html","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/ErrorAction.ts","webpack:///./node_modules/cordova-sites/dist/client/img/errorIcon.png","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/StartSiteMenuAction.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/navbar.html","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/menuSite.html","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/swipeFragment.html","webpack:///../../../../src/client/js/Dialog/ButtonChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ConfirmDialog.ts","webpack:///../../../../src/client/js/Dialog/ImgChooseDialog.ts","webpack:///../../../../src/client/js/Legacy/ScaleHelper.ts","webpack:///../../../src/client/js/PromiseHelper.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Dialog/shareDialog.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/loginSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/forgotPasswordSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/notAllowedSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/dialog/selectUserDialog.html","webpack:///../../../src/client/js/OfflineUserManager.ts","webpack:///../../src/client/SyncJob_old.ts","webpack:///../../../src/client/editEntitySite/ModifyEntitySite.ts","webpack:///../../../src/client/migration/SetupEasySync.ts","webpack:///../../../../src/client/js/Site/ChangeUserSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/changeUserSite.html","webpack:///../../../../src/client/js/Site/RegistrationSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/registrationSite.html","webpack:///../../../../src/shared/v1/model/UserSyncModel.ts","webpack:///../../../../src/shared/v1/model/UserSyncPartialModel.ts","webpack:///./src/client/img/settings.png","webpack:///./src/client/html/sites/menu.html","webpack:///./src/client/html/sites/level.html","webpack:///./src/client/sound/single_coin_fall_on_concrete_.mp3","webpack:///./src/client/html/sites/end.html","webpack:///./src/client/html/sites/settingsSite.html","webpack:///./src/client/html/sites/tutorialSite.html","webpack:///./src/client/html/fragment/settings.html","webpack:///./src/client/html/sites/credits.html","webpack:///./src/client/html/sites/privacyPolicy.html","webpack:///./src/client/html/sites/impressum.html","webpack:///./src/client/html/sites/contactSite.html","webpack:///./src/client/sass/index.scss","webpack:///./src/shared/model/LevelData.ts","webpack:///./src/shared/model/migration/shared/Setup.ts","webpack:///./src/client/js/wordrotator/Segment/TemplateContainer.js","webpack:///./src/client/js/wordrotator/Segment/Segment.js","webpack:///./src/client/js/wordrotator/Segment/LeafSegment.js","webpack:///./src/client/js/wordrotator/Segment/ParentSegment.js","webpack:///./src/client/js/wordrotator/Level/Level.js","webpack:///./src/client/js/wordrotator/Segment/RowSegment.js","webpack:///./src/client/js/wordrotator/Level/RowLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleLevel.js","webpack:///./src/client/js/wordrotator/Level/RowLevel8.js","webpack:///./src/client/js/wordrotator/Level/RowLevel10.js","webpack:///./src/client/js/wordrotator/Segment/TriangleSegment.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel8.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel12.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel8.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel12.js","webpack:///./src/client/js/wordrotator/Segment/ColumnSegment.js","webpack:///./src/client/js/wordrotator/Level/BigSegmentsLevels.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_0.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_1.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_2.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_1_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_2.js","webpack:///./src/client/js/wordrotator/Level/LevelHelper.ts","webpack:///./src/client/js/Sites/EndSite.ts","webpack:///./src/client/js/model/LevelPlayed.ts","webpack:///./src/client/js/Sites/LevelSite.ts","webpack:///./src/client/js/wordrotator/Level/MainMenuLevel.js","webpack:///./src/client/js/Sites/TutorialSite.ts","webpack:///./src/client/js/Sites/CreditsSite.ts","webpack:///./src/client/js/Sites/PrivacyPolicySite.ts","webpack:///./src/client/js/Sites/ImpressumSite.ts","webpack:///./src/client/js/Sites/ContactSite.ts","webpack:///./src/client/js/Fragment/WordRotatorSettingFragment.ts","webpack:///./src/client/js/Sites/SettingsSite.ts","webpack:///./src/client/js/Sites/MainMenuSite.ts","webpack:///./src/client/js/model/migration/ClientSetup.ts","webpack:///./src/client/sound/brightAndBeautifull__.mp3","webpack:///./src/client/js/script.js"],"names":["TemplateContainer","leafTemplate","parentTemplate","rowTemplate","triangleTemplate","columnTemplate","cloneNode","Segment","element","rotation","parent","rotations","otherSegment","getLevel","Promise","resolve","locks","lockedArray","LeafSegment","leaf","Helper","isNotNull","setLeaf","ViewHelper","removeAllChildren","querySelector","appendChild","document","createTextNode","ParentSegment","children","class","rotatable","userRotationDelta","lastUserRotation","touchendListener","e","now","Date","getTime","target","position","changedTouches","length","elementFromPoint","pageX","pageY","x","y","targetTouches","contains","mouseDownTarget","stopPropagation","preventDefault","segmentClicked","rotate","clickPosition","mouseupListener","_updateElement","getHasWon","firstElem","secondElem","firstPosition","secondPosition","timeout","clickTolerance","rotationDirection","isNull","Math","abs","firstIndex","secondIndex","rotationIndexes","i","canRotate","currentRotation","_updateRotationClass","classList","add","delayPromise","setTimeout","then","remove","checkHasWon","sameAs","isNaN","splice","n","applyRotations","applyLocks","push","getCurrentRotations","locked","getCurrentLocked","checkChildren","nonNull","isSolved","addChild","child","setParent","layer","_getLayer","childContainer","removeEventListener","addEventListener","getElement","createElement","window","initListener","Level","templateContainer","rootSegment","words","startRotations","levelData","hasWon","id","saveAsCurrentAfterCheckWon","wonResolver","giveUpResolver","_shakeLeafs","_shakeLeafsTimeout","_lastRotation","wonPromise","reject","segmentClickedListener","NativeStoragePromise","setItem","JSON","stringify","replace","toUpperCase","self","saveAsCurrentLevel","shouldSave","_getRotatableSegmentsFrom","segment","clearTimeout","shakeLeafs","Random","getIntRandom","listener","_getLeafSegmentsFrom","leafs","getLeafSegments","index","apply","word","leafSegmentTemplate","leafSegments","charAt","RowSegment","onclick","RowLevel","container","wordLength","leafsWordOne","_createLeafsForWord","copyLeafTemplate","leafsWordTwo","copyRowTemplate","copyParentTemplate","setRootSegment","SimpleLevel","RowLevel8","RowLevel10","TriangleSegment","SixWordsRowLevel","leafsWords","parents","triangle","copyTriangleTemplate","rowSegment","SixWordsRowLevel8","SixWordsRowLevel12","FourWordsLevel","FourWordsLevel8","FourWordsLevel12","ColumnSegment","BigSegmentsLevels","bigSegmentPositions","parentSegment","indexOf","copyColumnTemplate","SimpleFourWordsLevel","bigSegmentPosition","SimpleFourWordsLevel10_0","SimpleFourWordsLevel10_1","SimpleFourWordsLevel10_2","SimpleFourWordsLevel10_3","TwoSegmentFourWordsLevel10_0_3","TwoSegmentFourWordsLevel10_1_3","TwoSegmentFourWordsLevel10_0_2","MainMenuLevel","Object","LoginSite","ADD_LOGIN_ACTION","RegistrationSite","ADD_REGISTRATION_ACTION","App","addInitialization","Translator","init","translations","translationGerman","translationEn","fallbackLanguage","markUntranslatedTranslations","NavbarFragment","title","soundManager","SoundManager","getInstance","CHANNELS","MUSIC","music","getItem","audio","loop","volume","muted","play","catch","console","error","UserManager","getMe","addLoginChangeCallback","isLoggedIn","DataManager","_basePath","__HOST_ADDRESS__","onlineCallback","isOnline","Toast","show","assign","BaseDatabase","CONNECTION_OPTIONS","logging","synchronize","migrationsRun","migrations","DeleteUserManagement1000000000000","SetupEasySync1000000000500","SetupUserManagement1000000001000","Setup1000000002000","ClientSetup1000000002001","app","start","MainMenuSite","sql","EasySyncClientDb","rawQuery","res","log","ready","device","platform","navigator","serviceWorker","register"],"mappings":"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AgD,gBAAgB,EAAE,KAAK;AACjJ;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEA;AACA,yCAAyC,6BAA6B;AACtE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;ACZA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,WAAW,mBAAO,CAAC,EAAS;AAC5B,eAAe,mBAAO,CAAC,EAAa;AACpC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,gD;;;;;;;ACpDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACU;AACJ;AACJ;AACF;AACQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,qEAAqE,YAAY,8DAAU,QAAQ,EAAE;AACrG;AACA,kFAAkF,YAAY,wEAAe,aAAa,EAAE;AAC5H;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,mEAAmE,YAAY,8DAAU,QAAQ,EAAE;AACnG;AACA,+EAA+E,YAAY,sEAAc,YAAY,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB,EAAE;AACrF,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uBAAuB,EAAE;AAClF,6DAA6D,2BAA2B,EAAE;AAC1F,qEAAqE,2BAA2B,EAAE;AAClG,6DAA6D,2BAA2B,EAAE;AAC1F,2DAA2D,2BAA2B,EAAE;AACxF,mEAAmE,2BAA2B,EAAE;AAChG;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,+BAA+B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,wDAAwD,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2CAA2C,EAAE;AAC5G;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,yCAAyC,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,iDAAiD,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAmD,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD,wDAAwD,uCAAuC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC,EAAE;AACzG;AACA,0EAA0E,iGAAiG,EAAE;AAC7K;AACA;AACA;AACA;AACA,oDAAoD,6BAA6B,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC,EAAE;AACzG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAe,EAAE;AAC5D,wCAAwC,QAAQ,mEAAU,0CAA0C,EAAE;AACtG;AACA,0CAA0C,mCAAmC,EAAE;AAC/E,uCAAuC,QAAQ,8DAAU,eAAe,EAAE;AAC1E,mEAAmE,QAAQ,gEAAW,gBAAgB,EAAE;AACxG,gEAAgE,QAAQ,8DAAU,eAAe,EAAE;AACnG,4EAA4E,QAAQ,sEAAc,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;;AC5QA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qDAAqD,gCAAgC,EAAE;AACvF,qDAAqD,gCAAgC,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB,EAAE;AACjF;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uDAAuD,EAAE;AAC3H;AACA;AACA,kEAAkE,oEAAoE,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,0CAA0C,mEAAa,WAAW,4DAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,yCAAyC,OAAO;AAChD,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;;;;;;;ACpPa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,GAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,gBAAgB;AAChD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA,4CAA4C,IAAI,EAAE;AAClD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,4DAA4D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,kC;;;;;;;AC/RA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;;AClBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACuB;;AAExB;;;;;;;;AC5GA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gIAAgI,4BAA4B;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI,KAAK;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;;AAEA;;;;;;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e,OAAlE;AACH;;;WAED,iCAA4B;AACxB,UAAI,QAAQ,GAAG,IAAf;AACA,UAAI,QAAQ,GAAG,IAAf;AAEA,UAAI,OAAO,GAAG,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAU,MAAV,EAAoB;AAC1C,gBAAQ,GAAG,OAAX;AACA,gBAAQ,GAAG,MAAX;AACH,OAHa,CAAd;AAIA,aAAO,CAAC,SAAD,CAAP,GAAqB,QAArB;AACA,aAAO,CAAC,QAAD,CAAP,GAAoB,QAApB;AAEA,aAAO,OAAP;AACH;;;;;;AAvXL,wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLyD;AACe;AAClC;AACY;AACQ;AACV;AACD;AACoB;AACT;AACR;AACF;AACQ;AACrB;AACiD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uGAAuG,EAAE;AACxL,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,sHAAsH,8DAA8D,EAAE;AACtL;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,0LAA0L,0BAA0B,EAAE;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA,wGAAwG,uCAAuC,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mEAAmE,EAAE;AAC5K;AACA;AACA,yCAAyC;AACzC,wEAAwE,QAAQ,sCAAS;AACzF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,mGAAmG,+CAA+C,EAAE;AACpJ,yCAAyC;AACzC;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2IAA2I,iDAAiD,EAAE;AAC9L,yCAAyC;AACzC;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2GAA2G,uDAAuD,EAAE;AACpK,yCAAyC;AACzC;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,gDAAgD,sBAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,qGAAqG,yDAAyD,EAAE;AAChK,yCAAyC;AACzC;AACA;AACA,wKAAwK,oBAAoB,EAAE;AAC9L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+FAA+F,yDAAyD,EAAE;AAC1J,yCAAyC;AACzC;AACA;AACA;AACA,uGAAuG,YAAY,kCAAW,SAAS,EAAE;AACzI;AACA;AACA,mJAAmJ,4BAA4B,EAAE;AACjL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA,4GAA4G,yBAAyB,EAAE;AACvI,sGAAsG,yBAAyB,EAAE;AACjI;AACA;AACA,uDAAuD,kCAAW,CAAC,gCAAU;AAC7E,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA,oFAAoF,kDAAW,yCAAyC,0DAAmB;AAC3J;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,uGAAuG,mDAAmD,EAAE;AAC5J,wEAAwE,gCAAU;AAClF,qEAAqE,kCAAW;AAChF;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,iLAAiL,4BAA4B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,mDAAmD,+CAA+C,EAAE,wCAAwC,EAAE;AAC5N,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,0IAA0I,iCAAiC,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,kDAAkD,+CAA+C,EAAE,EAAE,EAAE;AACrL,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+EAA+E,yFAAyF,iDAAiD,EAAE,EAAE,EAAE;AAC/N,4EAA4E,QAAQ,kCAAW,wBAAwB,EAAE;AACzH;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,kFAAkF,0DAA0D,uDAAuD,EAAE,EAAE,EAAE;AACzM,+EAA+E,QAAQ,wCAAc,2BAA2B,EAAE;AAClI;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA,oGAAoG,mDAAmD,EAAE;AACzJ,yCAAyC;AACzC;AACA;AACA,mGAAmG,QAAQ,0CAAe,4BAA4B,EAAE;AACxJ,2IAA2I,iBAAiB,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA;AACA,yFAAyF,0DAA0D,EAAE;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uFAAuF,uDAAuD,EAAE;AAChJ;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yCAAyC,qCAAQ;AACjD;AACA;AACA;AACA;AACA,iLAAiL,wBAAwB,EAAE;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,gFAAgF,qFAAqF,EAAE;AACvK;AACA;AACA,kLAAkL,mBAAmB,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,iFAAiF,uFAAuF,EAAE;AAC1K;AACA;AACA,8LAA8L,oBAAoB,EAAE;AACpN;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ,gCAAU,mEAAmE,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8EAA8E,sBAAK;AACnF;AACA;AACA;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,gEAAgE;AACpJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,8DAA8D;AAClJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;;AAEA;;;;;;;;;ACvsD+C;AACE;AAC4B;AAC9B;AAC4B;AAC3E;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,uEAAuE,+BAA+B,EAAE;AACxG,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wDAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qEAAqE,8CAA8C,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,4DAA4D,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,mBAAmB,4BAAQ;AAC3B,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,+CAA+C,EAAE;AAC/G;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrhBA;;AACA;;AACA;;AACA;;IAEa,Y;AAmBT;AAAA;;AAAA;;AACI,SAAK,QAAL,GAAgB,EAAhB;;AACA,QAAI,kBAAkB,MAAtB,EAA8B;AAC1B,WAAK,OAAL,GAAe,IAAI,YAAJ,EAAf;AACH,KAFD,MAEO,IAAI,wBAAwB,MAA5B,EAAoC;AACvC;AACA,WAAK,OAAL,GAAe,IAAI,kBAAJ,EAAf;AACH,KAHM,MAGA;AACH,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACH;;AACD,SAAK,OAAL,CAAa,aAAb,GAA6B;AACzB,aAAO,CAAC,GAAR,CAAY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AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAI,mBAAmB,yBAAyB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;ACrLA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA,mCAAmC,qCAAqC,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;;;AC9La;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAAkB;AACvC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,CAAiB;AACtC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,GAA0B;AAC/C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,GAA8B;AACnD,aAAa,mBAAO,CAAC,GAAiB;AACtC,aAAa,mBAAO,CAAC,GAAoB;AACzC,kC;;;;;;ACrBA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AAAA;AAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,iCAAiC,8DAAQ,0CAA0C,mBAAmB;AACtG;AACA;AACA,iDAAiD,8DAAQ,sDAAsD,UAAU;AACzH;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,gBAAgB;AACvD;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC9CA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;AC7GA,6BAA6B;AAC7B,uCAAuC;;;;;;;;ACD1B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACnDA;AACA,kBAAkB,mBAAO,CAAC,EAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;ACHD,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;ACfA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,4BAA4B,EAAE;AACrG,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACF;AACgB;AACA;AACY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB,EAAE;AAClE,yCAAyC,uCAAuC,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,QAAQ,KAAK,iBAAiB,GAAG,YAAY,UAAU,EAAE,GAAG,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE;AACrH;AACA;AACA;AACA;AACA,gCAAgC,0DAA0D;AAC1F;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC,iBAAiB,IAAI;AACrB;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,+EAAY;AACnH;AACA;AACA,wKAAwK,+EAAY;AACpL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,mGAAmG,+EAAY;AAC/G;AACA;AACA,4IAA4I,+EAAY;AACxJ;AACA;AACA;AACA;AACA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mFAAmF,EAAE;AACjJ;AACA;AACA;AACA;AACA,wDAAwD,yFAAyF,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wGAA4B;AAClD;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,qCAAqC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,kBAAkB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+CAA+C,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0GAA0G,EAAE;AAC/J;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA,uCAAuC,iCAAiC;AACxE;AACA;AACA;AACA,wCAAwC,mEAAa,KAAK,4DAAM;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,QAAQ,+DAAQ,qCAAqC,EAAE;AACrH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+DAAQ;AAC3E,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yEAAO,+BAA+B,mCAAmC;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,iDAAiD,EAAE;AAC9H,qEAAqE,yBAAyB,EAAE;AAChG;AACA,8EAA8E,mEAAmE,EAAE;AACnJ;AACA;AACA,yEAAyE,8CAA8C,EAAE;AACzH;AACA;AACA;AACA,8BAA8B,6BAA6B;AAC3D;AACA,qBAAqB,0CAA0C,gBAAgB,sBAAsB;AACrG;AACA,QAAQ,0BAA0B,8BAA8B;AAChE;AACA;AACA;AACA,gDAAgD,QAAQ,+DAAQ,4DAA4D,EAAE;AAC9H,oDAAoD,QAAQ,+DAAQ,gEAAgE,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oFAAY,wCAAwC,sFAAc,wCAAwC,uFAAe,wCAAwC,iFAAS;AACzO;AACA;AACA,iEAAiE,sFAAc;AAC/E,kEAAkE,uFAAe;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,sFAAc;AAClF;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;ACpjBA;AACA,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACJA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;;;ACjBA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,4BAA4B,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;;AC3DA;AAAA;AAAA;AAA4C;AACM;AAClD;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,eAAe,8DAAQ,CAAC,8DAAQ,GAAG,iBAAiB,uEAAuE;AAC9I;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;;;;;;;;;;;;;;ACrBkD;AAClD;AACA;AACA,IAAI,WAAK;AACT;AACA,QAAQ,kCAAW,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACgB;;AAEjB;;;;;;;;;;;;ACrCyC;AACT;AACgB;AACwB;AACS;AACjF;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iCAAiC,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA,6HAA6H;AAC7H;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,eAAe,EAAE;AAC3E;AACA;AACA,+CAA+C,6BAA6B,WAAK,SAAS,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,sCAAa,gCAAgC,EAAE;AACjI,wFAAwF,YAAY,kDAAmB,oBAAoB,EAAE;AAC7I,iGAAiG,YAAY,wDAAsB,uBAAuB,EAAE;AAC5J,uDAAuD,SAAS,qCAAQ,GAAG,UAAU,EAAE;AACvF,0DAA0D,SAAS,qCAAQ,GAAG,WAAW,EAAE;AAC3F,uCAAuC;AACvC,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;AChTgF;AACtB;AACpB;AACsB;AACF;AACS;AACK;AACF;AACT;AAC1B;AACyB;AACX;AACoB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qCAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,uBAAY;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAO,CAAC,GAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wDAAwD,iDAAiD,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAA0C,EAAE;AAClG,mDAAmD,yCAAyC,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kCAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8BAA8B,qBAAqB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA,qDAAqD,qCAAQ,CAAC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM,iDAAiD,UAAU;AAC9L;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,iCAAiC,EAAE;AACnC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B,qCAAQ,6CAA6C,UAAU;AACzF;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM;AAChE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,sCAAsC,sDAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC,mDAAY;AAC9C;AACA;AACA,2EAA2E;AAC3E;AACA,iBAAiB;AACjB;AACA,kCAAkC,sDAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uCAAuC,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,uDAAuD,wBAAE,+BAA+B,kDAAkD,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,6DAA6D,gCAAgC,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA,sCAAsC,oDAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,4HAA4H,oCAAoC,EAAE;AAClK;AACA;AACA;AACA,+DAA+D,oCAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAgC,qBAAqB,EAAE;AAChF,qBAAqB,gCAAgC,qBAAqB,EAAE;AAC5E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,2DAA2D,0BAA0B,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qDAAc,sBAAsB,sDAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,oCAAY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACr1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACzB;AACsC;AACd;AACjB;AACd;AAC/C;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0EAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,4BAA4B,6EAAa;AACzC,uCAAuC,6EAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6EAAa;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,6EAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6EAAa;AACrC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,6EAAa;AACzB;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACC;;AAEvB;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClB8C;AACY;AACY;AAChB;AACtD;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wCAAS,+BAA+B,wCAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,4BAA4B,0CAAe;AAC3C;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACzIkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;ACjBkC;AACM;AACxC;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvByD;AACH;AACd;AAC8B;AACF;AACR;AAC5D;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qCAAQ,4DAA4D,yBAAyB;AAChJ;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,gBAAgB;AAC/D;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA,2EAA2E,eAAe;AAC1F;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,QAAQ,sCAAS;AAChF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,0DAA0D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA,oFAAoF,2DAA2D;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,kEAAkE;AACtJ;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC,SAAS;AACT;AACA;AACA,gDAAgD,kCAAkC,EAAE;AACpF;AACA;AACA,kEAAkE,uBAAuB,EAAE;AAC3F,mGAAmG,sDAAsD,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB,EAAE,wBAAwB,yCAAyC,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,sDAAsD,cAAc,4DAA4D,kEAAkE;AAClM,iDAAiD,cAAc,uDAAuD,6DAA6D;AACnL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,0DAA0D,cAAc,4DAA4D,kEAAkE;AACtM,qDAAqD,cAAc,uDAAuD,6DAA6D;AACvL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACnpBkC;AAClC;AACA;AACA,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;ACjOkC;AAClC,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChBkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrB+E;AACN;AAC7B;AACmC;AACnB;AACU;AACZ;AACiB;AACE;AACO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gEAAgE,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAyB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,8DAA8D,EAAE;AACxI,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC,kDAAW;AAC3C;AACA;AACA;AACA,8BAA8B,mDAAyB;AACvD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8BAA8B,kDAAW,sBAAsB,0DAAmB;AAClF,oFAAoF,mEAAmE,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAW;AACzC,uFAAuF,0BAA0B,EAAE;AACnH;AACA,0BAA0B,+CAAuB;AACjD;AACA,8BAA8B,sDAAe;AAC7C,kFAAkF,uBAAuB,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAwB;AACtD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,yBAAyB;AAC9I;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA,6CAA6C,6BAA6B,EAAE;AAC5E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACvNkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,mEAAiC;AACrC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,mDAAmD,0CAAa,0CAA0C,mCAAM;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;ACnN0D;AAChB;AAC4C;AACtF;AACA;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,oFAAoF,wCAAwC,EAAE;AAC9H;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAsD;AAClG,8CAA8C,uDAAuD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4EAA4E,gDAAgD,EAAE;AAC9H,6EAA6E,uBAAuB,EAAE;AACtG,mEAAmE,8EAA8E,EAAE;AACnJ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,qBAAU;AACc;;AAE1B;;;ACpRkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA,sFAAsF,+BAA+B,EAAE,gCAAgC;AACvJ;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACrBiF;AACnC;AAC9C;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0EAA0E,iBAAiB,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iCAAiC,EAAE;AAChF,0CAA0C,uCAAuC,EAAE;AACnF,6CAA6C,wDAAwD,EAAE;AACvG;AACA;AACA,4EAA4E,wDAAwD,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sCAAO;AACvC;AACA;AACA;AACA;AACA;AACA,2EAA2E,2CAA2C,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4CAA4C,EAAE;AAC3H;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACtFuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAkD,EAAE;AAC/G,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,2DAA2D,uEAAuE,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,4CAA4C,EAAE;AACpG;AACA,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8CAA8C,EAAE;AAC1G;AACA,yCAAyC,mCAAM;AAC/C;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,6DAA6D,EAAE;AAC9H,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACiD;;AAElD;;;ACtIkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;AClByG;AACvD;AACqC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6EAAsC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC9FkC;AAClC;AACA;AACA;AACA,IAAI,yFAA4C;AAChD,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuD;;AAExD;;;AClBkC;AACM;AACxC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChCkC;AACM;AACxC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/BkD;AACR;AACkB;AACR;AACpD;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAAc;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kDAAW;AAChE,iCAAiC,sDAAe;AAChD;AACA;AACA,iCAAiC,qBAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AClDkC;AAClC,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;ACdkC;AAClC;AACA;AACA;AACA,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACjB8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,0CAAa,KAAK,mCAAM,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,mDAAmD,EAAE;AACjI,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;;;;;;;ACpK8C;AACF;AAC4B;AACxE;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA;AACA,0DAA0D,gDAAgD;AAC1G,kEAAkE,8CAA8C;AAChH,gCAAgC,4BAAQ;AACxC;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA,0CAA0C,wDAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4BAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mEAAmE,EAAE;AACzI;AACA;AACA;AACA,0EAA0E,wCAAwC,EAAE;AACpH,4BAA4B;AAC5B;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACnLkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;AClB+C;AACA;AAC/C;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,mDAAmD,0DAA0D;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrFkC;AAClC;AACA;AACA;AACA,IAAI,uEAAmC;AACvC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;ACjBsE;AACgC;AACtG;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAA0D;AAC/G;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA,uGAAuG,wDAAwD,EAAE;AACjK;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,0CAA0C,uEAAmC;AAC7E;AACA;AACA;AACA,yBAAyB;AACzB,wGAAwG,0CAAa,CAAC,0CAAa,KAAK,mCAAM,wBAAwB,mCAAM;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/G+C;AAC/C;AACA;AACA;AACA,IAAI,+DAA+B;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,4CAA4C,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AC/DiE;AACb;AACkB;AACU;AACO;AACA;AACjB;AACV;AACQ;AACP;AACc;AACJ;AACkB;AAC7C;AAC5C;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,gFAAgF,4BAA4B,EAAE;AAC9G,6EAA6E,4BAA4B,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,8BAA8B,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA,8FAA8F,kCAAkC,EAAE;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAA6B;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,2DAA6B;AACzC,0EAA0E,+BAA+B,EAAE;AAC3G,0EAA0E,8BAA8B,EAAE;AAC1G,0EAA0E,8BAA8B,EAAE;AAC1G,8EAA8E,kCAAkC,EAAE;AAClH,2EAA2E,gCAAgC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,2GAA2G,EAAE;AACzK;AACA,4DAA4D,+KAA+K,EAAE;AAC7O;AACA,4DAA4D,mIAAmI,EAAE;AACjM;AACA,gEAAgE,+KAA+K,EAAE;AACjP;AACA,6DAA6D,+KAA+K,EAAE;AAC9O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,0GAA0G,EAAE;AACxK;AACA,4DAA4D,8KAA8K,EAAE;AAC5O;AACA,4DAA4D,kIAAkI,EAAE;AAChM;AACA,gEAAgE,8KAA8K,EAAE;AAChP;AACA,6DAA6D,8KAA8K,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,kDAAW;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,iGAAiG,mDAAY;AAC7G;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG,mDAAY;AAC/G,mGAAmG,gDAAS;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,4EAA4E,uDAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,mDAAmD,wCAAW;AAC9D;AACA;AACA,2HAA2H;AAC3H;AACA,iFAAiF,iDAAwB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,iFAAiF,6CAAsB;AACvG;AACA;AACA;AACA;AACA;AACA,iFAAiF,+DAA+B;AAChH;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,gFAAgF,qCAAQ;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,iDAAiD,0BAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,yGAAyG,QAAQ,sCAAS;AAC1H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2DAA6B;AACvE;AACA,yBAAyB;AACzB,0DAA0D,uDAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,6GAA6G,QAAQ,sCAAS;AAC9H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0GAA0G,QAAQ,sCAAS;AAC3H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,6CAA6C,uDAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uIAAuI,wBAAwB,EAAE;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC0B;;AAE3B;;;AC7zBkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACjB8C;AACF;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ,2DAA2D;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kDAAkD;AACtG;AACA,sBAAsB;AACtB;AACA,oDAAoD,6CAA6C;AACjG;AACA;AACA,YAAY,4BAAQ;AACpB;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;;AAEnB;;;;;;AC9OqC;AACU;AACgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,6DAA6D;AAC1J;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6BAA6B,GAAG,sBAAsB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAO;AACtD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,wCAAc;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAO;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AClKqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yFAAyF,6DAA6D;AACtJ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B,GAAG,sBAAsB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+EAA+E,4BAAQ;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAO;AAClD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnJqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAO;AACjD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B,GAAG,sBAAsB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA,mGAAmG;AACnG,qGAAqG;AACrG;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb,SAAS;AACT;AACA;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;AC7MgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,QAAQ,sCAAS;AAC7G;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,uEAAuE,0CAAa,KAAK,mCAAM,gFAAgF,8BAA8B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA,iEAAiE,qCAAQ,sDAAsD,uBAAuB;AACtJ;AACA;AACA;AACA;AACA,uDAAuD,QAAQ,gBAAgB;AAC/E;AACA;AACA;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wDAAwD,EAAE;AAChH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsC;;AAEvC;;;AChK+B;AACM;AACrC;AACA;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;ACnFyD;AACM;AACX;AAC6B;AAC7C;AACgD;AACoB;AAClB;AACV;AACM;AACtC;AAC5C;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,mCAAiB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,4BAAQ;AAClH,mGAAmG,QAAQ,sCAAS;AACpH;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAA0B;AACxF,kEAAkE,eAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,6CAAsB;AAC/F;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,qEAAqE,uDAA2B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,+CAAuB;AAC3E,oDAAoD,mEAAiC;AACrF,oDAAoD,iDAAwB;AAC5E;AACA;AACA;AACA;AACA,4DAA4D,iDAAwB;AACpF;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,sEAAsE,+BAAe;AACrF;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA,kGAAkG,yCAAyC,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qCAAQ;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;;;;ACvMyD;AACU;AACwC;AACZ;AACjC;AACR;AACc;AAC+C;AACU;AACtC;AACvB;AACM;AAC+C;AACzD;AACe;AACF;AACL;AACuB;AACd;AAC3B;AAClD;AACA;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;AACnF;AACA;AACA;AACA;AACA,YAAY,kCAAW,2BAA2B,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,+CAA+C,0FAA0F,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qEAAqE,6EAAsC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,0DAA0D,iCAAgB;AAC1E,gBAAgB,iCAAgB;AAChC,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA,kEAAkE,iCAAgB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,kCAAkC,qCAAQ,CAAC,qCAAQ,GAAG,oBAAoB,KAAK,UAAU;AACzF;AACA,gBAAgB,iCAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA,sDAAsD,kDAAmB;AACzE;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA,uEAAuE,yCAAyC,EAAE;AAClH;AACA;AACA;AACA,gCAAgC,mCAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA+B;AACrD;AACA;AACA,oCAAoC,6BAAc;AAClD,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA;AACA,gDAAgD,qCAAkB;AAClE;AACA;AACA;AACA,gDAAgD,qBAAU;AAC1D;AACA,0BAA0B,yFAA4C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,8BAA8B,mEAAiC;AAC/D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACltB0D;AACV;AAChD;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,2BAAa;AACe;;AAE9B;;;;;;AC7DgD;AACU;AACE;AACF;AACA;AAC1D;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD,uBAAuB,yDAAkB;AACzC,yCAAyC,kCAAW;AACpD,uBAAuB,qCAAkB;AACzC,mBAAmB,2BAAa;AAChC;AACA;AACA,CAAC;AAC+B;;AAEhC;;;ACzBkC;AAClC;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;ACjB0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA,0DAA0D,UAAU,IAAI,QAAQ,YAAY,OAAO,sBAAsB,UAAU;AACnI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;;AAErB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACG;;AAE9B;;;;;;;;;AC9G0D;AACqB;AACrB;AACoB;AACc;AAC5F,IAAI,2BAAa;AACjB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qCAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACG;;AAEzB;;;AC3F0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACO;;AAElC;;;AC9E0D;AACqB;AACb;AACY;AACc;AAC5F,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAO,CAAC,qJAA6B;AAC/D;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACO;;AAE7B;;;;;;;;;;;;ACzF0D;AACoC;AAC9B;AACyB;AACG;AACR;AACzB;AACY;AACvE;AACA;AACA;AACA,IAAI,+BAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yCAAyC,4CAAgB;AACzD,6BAA6B;AAC7B,yBAAyB;AACzB;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,8DAAyB;AACA;;AAE3B;;;ACvM0D;AACqB;AAC3B;AAC0B;AAC9E,IAAI,qBAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,qBAAqB;AACrB,8BAA8B,6BAA6B;AAC3D,qBAAqB;AACrB,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,oDAAoB;AACA;;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvF4E;AACZ;AAC8B;AACF;AACR;AACf;AACZ;AACU;AACE;AACM;AACE;AACV;AACE;AACf;AACK;AACZ;AACd;AACsC;AACvE;AACA;AACA;AACA,IAAI,uCAAmB;AACvB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAAgB;AAClD;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,gEAAgE,EAAE;AAChJ;AACA;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,qEAAqE,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sBAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,6EAA6E,mEAAmE,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,oBAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,wDAAwD,sBAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA,yFAAyF,oBAAoB,EAAE;AAC/G;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,iFAAiF,gEAAgE,EAAE;AACnJ;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,iJAAiJ,oBAAoB,EAAE;AACvK,sFAAsF,kCAAkC,EAAE;AAC1H,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,2IAA2I,oBAAoB,EAAE;AACjK,gFAAgF,kCAAkC,EAAE;AACpH,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kCAAW;AAC9D;AACA;AACA,6BAA6B;AAC7B;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,4DAA4D,kCAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW;AAC/E;AACA,oEAAoE,6CAA6C,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,gFAAgF,oBAAoB,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,iCAAiC,4BAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,kFAAkF,kCAAkC,EAAE;AACtH;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA,mJAAmJ,oBAAoB,EAAE;AACzK,wFAAwF,kCAAkC,EAAE;AAC5H,uDAAuD,sBAAK;AAC5D,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,kCAAW;AAClE;AACA;AACA,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+HAA+H,sCAAsC,EAAE;AACvK,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,2CAA2C,qCAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,kCAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,oBAAoB,EAAE;AAC7K,mGAAmG,yCAAyC,EAAE;AAC9I,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA,6JAA6J,oBAAoB,EAAE;AACnL,yGAAyG,yCAAyC,EAAE;AACpJ,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA,gFAAgF,sGAAsG,EAAE;AACxL;AACA;AACA;AACA;AACA;AACA,mFAAmF,iFAAiF,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,oBAAoB,EAAE;AAC3F;AACA;AACA;AACA;AACA,6IAA6I,oBAAoB,EAAE;AACnK,wFAAwF,kCAAkC,EAAE;AAC5H,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,uDAAuD,gDAAgD,EAAE;AACzG,wDAAwD,gCAAgC,EAAE;AAC1F;AACA,mFAAmF,iCAAiC,EAAE;AACtH,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,oBAAoB,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kCAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,kEAAkE,EAAE;AACxJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,gEAAgE,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,0EAA0E,EAAE;AACxK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,wCAAc,yDAAyD,mCAAmC,EAAE;AACrL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,wEAAwE,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,0CAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB,EAAE;AACnF;AACA,kFAAkF,mCAAmC,EAAE;AACvH;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uIAAuI;AACvI;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAAM;AACnC;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,sCAAS;AAC5G;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA,wDAAwD,sBAAK;AAC7D,yFAAyF,oGAAoG;AAC7L;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,wGAAwG,EAAE;AAC3L,8EAA8E,QAAQ,sCAAS;AAC/F;AACA;AACA,2DAA2D,wCAAW;AACtE;AACA;AACA;AACA;AACA,iEAAiE;AACjE,kFAAkF,kCAAW;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,wBAAwB,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wIAAwI,oDAAoD,EAAE;AAC9L,iIAAiI,mDAAmD,EAAE;AACtL;AACA,oHAAoH;AACpH;AACA,mIAAmI,EAAE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iDAAiD,EAAE,EAAE;AACrD;AACA;AACA;AACA,qEAAqE,4BAAQ;AAC7E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,mGAAmG,iEAAiE,EAAE;AACtK,2DAA2D,kCAAW;AACtE;AACA,2FAA2F,yBAAyB,EAAE;AACtH,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,kGAAkG,iEAAiE,EAAE;AACrK,2DAA2D,gCAAU;AACrE;AACA,0FAA0F,yBAAyB,EAAE;AACrH;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,wEAAwE,4BAAQ;AAChF;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,2DAA2D,wCAAc;AACzE;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,4BAAQ;AACjF;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,wGAAwG,oEAAoE,EAAE;AAC9K;AACA;AACA;AACA,2DAA2D,0CAAe;AAC1E;AACA,kGAAkG,4BAA4B,EAAE;AAChI;AACA,4GAA4G,uCAAuC,EAAE;AACrJ;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA,6CAA6C,uBAAuB,mCAAmC,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,2DAA2D,gCAAU;AACrE;AACA;AACA,2FAA2F,yBAAyB,EAAE;AACtH;AACA;AACA,2FAA2F,+DAA+D,EAAE;AAC5J;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,kDAAkD,EAAE;AACzH;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,kCAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG;AACA,iIAAiI,oBAAoB,EAAE;AACvJ,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB,EAAE;AACxD,oCAAoC,iBAAiB,8GAA8G,EAAE;AACrK,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,qCAAqC,8DAA8D;AACnG;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yDAAyD,oBAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,2EAA2E,iBAAiB;AAC5F,uEAAuE,aAAa;AACpF;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gIAAgI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAgC,EAAE;AACzH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,6CAA6C,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD;AACA,4BAA4B,sBAAK,8DAA8D,sBAAK;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,iCAAiC,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,sEAAsE,oBAAoB,EAAE;AAC5F;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,8EAA8E,6BAA6B,EAAE;AAC7G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAc;AACrE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,wEAAwE,6BAA6B,EAAE;AACvG,4FAA4F,6BAA6B,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,yDAAyD,0CAAe;AACxE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK,sBAAsB,oBAAI;AACzE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0CAAe;AACc;;AAE/B;;;ACp6FkE;AAC4B;AACF;AACR;AACd;AACC;AACvE,IAAI,2DAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,uCAAmB;AACrB;AACA;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2DAA0B;AACgB;;AAE5C;;;AC7L0D;AACE;AACC;AAC6C;AAC/B;AAC3E,IAAI,2CAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,qDAAc;AAChB,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+KAA+K,4DAA4D,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iEAAgC,0JAA0J,4DAA4D,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6CAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2CAAe;AACsB;;AAEvC;;;AC1HiE;AACD;AACZ;AACU;AACT;AACA;AACG;AACa;AACE;AACrB;AACA;AACS;AACZ;AAC6B;AACmB;AACnD;AAC+B;AAC3E;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qDAAc;AACzC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,gDAAS;AACpC;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,2BAAa;AACxC;AACA,2BAA2B,gDAAkB;AAC7C;AACA,2BAA2B,mCAAiB;AAC5C;AACA,2BAA2B,kCAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qBAAU;AACrC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,uDAA2B;AACtD;AACA,0BAA0B,qCAAkB;AAC5C;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,6BAA6B,EAAE;AACxF;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA,kBAAkB;AAClB;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,kJAAkJ,4BAA4B,EAAE;AAChL;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACxH8C;AACI;AAClD;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA,eAAe,wCAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,+CAA+C,0CAAa,KAAK,mCAAM;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACtY8C;AACc;AAC5D;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mCAAmC,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD;AACA;AACA;AACA;AACA,sCAAsC,0CAAa,KAAK,mCAAM;AAC9D,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,8DAA8D,EAAE;AACrI;AACA;AACA,qEAAqE,iEAAiE,EAAE;AACxI;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B,4CAA4C,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE;AAC1G;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B,EAAE;AAC7F,mFAAmF,4BAA4B,EAAE;AACjH;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACnD8C;AACY;AACE;AACA;AACQ;AACV;AAC0B;AACpF;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,oBAAoB,mCAAM;AACpG,6DAA6D,2CAA2C,EAAE;AAC1G;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,0CAA0C,EAAE;AAC/J;AACA,6EAA6E,yBAAyB,EAAE;AACxG;AACA;AACA;AACA,+FAA+F,gEAAgE,EAAE;AACjK;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,0CAA0C,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,yGAAyG,gEAAgE,EAAE;AAC3K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;AC5N4D;AACA;AACQ;AACV;AAC1D;AACA;AACA;AACA;AACA,IAAI,yEAAoC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC+C;;AAEhD;;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,6JAA6J,4BAA4B,EAAE;AAC3L;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACxF0D;AACE;AACA;AACQ;AACP;AACuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uDAAuD;AAChE,SAAS,uDAAuD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAwE;AAC5F,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,mDAAY,qCAAqC,yBAAyB,EAAE;AAC1H,oBAAoB;AACpB;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA,wJAAwJ,uBAAuB,EAAE;AACjL;AACA;AACA,aAAa;AACb;AACA,oBAAoB;AACpB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,8CAA8C,EAAE;AACrI;AACA;AACA,wFAAwF;AACxF;AACA;AACA,cAAc;AACd;AACA,yGAAyG,gEAAgE,EAAE,EAAE;AAC7K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8FAA8F,+CAA+C,EAAE;AAC/I;AACA,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kDAAW,uCAAuC,0DAAmB;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iEAAiE;AACjE,0DAA0D;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC9B8C;AAC0B;AACpB;AACQ;AACA;AACF;AACM;AACA;AACI;AACM;AACA;AAC1B;AACgC;AACc;AACtB;AACI;AAChB;AACF;AACA;AACY;AACH;AACD;AACkB;AACpF;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2DAA6B;AAC9E,wDAAwD,yEAAoC;AAC5F,6CAA6C,mDAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,uHAAuH,EAAE;AACrL;AACA,mEAAmE,8CAA8C,EAAE;AACnH;AACA,2DAA2D,2EAA2E,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC,aAAa;AACb,SAAS;AACT;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA,2DAA2D,yDAAyD,EAAE;AACtH;AACA,2DAA2D,wEAAwE,EAAE;AACrI;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA,iEAAiE,oDAAoD,EAAE;AACvH;AACA,gLAAgL;AAChL;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAW,uCAAuC,0DAAmB;AAChI,8DAA8D,sDAAe,uCAAuC,gDAAS;AAC7H,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+DAA+D,sDAAe;AAC9E;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sDAAe;AACpF,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,iEAAiE,8BAA8B,EAAE;AACjG;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,6DAA6D,0CAAa,KAAK,mCAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,2GAA2G,kCAAkC,EAAE;AAC/I,uHAAuH,mDAAmD,EAAE;AAC5K,SAAS;AACT;AACA;AACA,yCAAyC,8CAA8C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,8EAA8E,EAAE;AACzH,gDAAgD,4DAA4D,EAAE;AAC9G;AACA;AACA,6DAA6D,qDAAqD,EAAE;AACpH,SAAS;AACT;AACA;AACA,8DAA8D,sDAAsD,EAAE;AACtH,SAAS;AACT;AACA;AACA,4DAA4D,qDAAqD,EAAE;AACnH,SAAS;AACT;AACA;AACA,oEAAoE,yDAAyD,EAAE;AAC/H,SAAS;AACT;AACA;AACA,yCAAyC,4CAA4C,EAAE;AACvF;AACA;AACA,6CAA6C,wBAAwB,EAAE;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB,EAAE;AAC5D,2CAA2C,mCAAmC,EAAE;AAChF,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA,mBAAmB,wCAAc;AACjC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8FAA8F,kDAAkD,EAAE;AAClJ,6BAA6B,wCAAc,EAAE,2EAA2E;AACxH;AACA,4GAA4G,uGAAuG,EAAE;AACrN;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wFAAwF,0DAA0D,EAAE;AACpJ;AACA,0CAA0C,wCAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,+BAA+B,EAAE;AAChJ,4FAA4F,yCAAyC,EAAE;AACvI;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7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AA4C,EAAE;AAC1I;AACA,2FAA2F,gDAAgD,EAAE;AAC7I,kGAAkG,mEAAmE,EAAE;AACvK,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,sFAAsF,yBAAyB,EAAE;AACjH,4FAA4F,+BAA+B,EAAE;AAC7H,wFAAwF,2BAA2B,EAAE;AACrH,4FAA4F,+BAA+B,EAAE;AAC7H,6FAA6F,gCAAgC,EAAE;AAC/H,+FAA+F,kCAAkC,EAAE;AACnI,uFAAuF,0BAA0B,EAAE;AACnH,kEAAkE,0DAA0D,EAAE;AAC9H;AACA,kEAAkE,2BAA2B,EAAE;AAC/F,wEAAwE,8BAA8B,EAAE;AACxG;AACA,wEAAwE,2BAA2B,EAAE;AACrG,8EAA8E,8BAA8B,EAAE;AAC9G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,oJAAoJ,EAAE;AACjO;AACA;AACA;AACA;AACA;AACA,sGAAsG,wEAAwE,EAAE;AAChL,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;AChmBkE;AAClE;AACA;AACA;AACA;AACA;AACA,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA,SAAS;AACT;AACA;AACA,8DAA8D,sCAAsC,EAAE;AACtG;AACA;AACA,4EAA4E,6CAA6C,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mDAAmD,EAAE;AAC5G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC7KiC;AAC0C;AAC3E;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uCAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gEAAgE;AACtH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qCAAQ,2EAA2E,8BAA8B;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,gBAAgB;AACnE;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;AC5O8C;AACwC;AAC1C;AACI;AACE;AACgC;AACC;AACtB;AAC7D;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kCAAkC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,qBAAqB,mCAAM,CAAC,4BAA4B;AAChI,kEAAkE,QAAQ,gBAAgB,iBAAiB,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,mCAAmC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,sBAAsB,mCAAM,CAAC,4BAA4B;AAClI,eAAe,sBAAsB;AACrC;AACA,sCAAsC,QAAQ,gBAAgB,kBAAkB,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kFAAkF,gCAAgC,oCAAY,YAAY,EAAE;AAC5I,kFAAkF,+BAA+B,oCAAY,CAAC,EAAE;AAChI,+BAA+B,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM,CAAC,4BAA4B;AAC1H;AACA,uCAAuC,oCAAY;AACnD;AACA;AACA;AACA,SAAS;AACT,2CAA2C,2CAAqB,kBAAkB,sBAAsB;AACxG,gDAAgD,+CAAuB;AACvE,wCAAwC,2CAAqB;AAC7D,eAAe,0CAAa,CAAC,0CAAa,KAAK,mCAAM,6BAA6B,mCAAM;AACxF;AACA;AACA,CAAC;AACoC;;AAErC;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC9F0D;AAC1D;AACA;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,mBAAmB,6CAAa;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,2BAA2B,6CAAa;AACjE,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa,2BAA2B,6CAAa;AAC7D,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,iCAAiC,6CAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;AC/FkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,IAAI,iCAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;ACzD0B;AACgC;AAC1D;AACA;AACA;AACA,IAAI,uBAAW;AACf;AACA,6BAA6B,iBAAK;AAClC,+BAA+B,iBAAK;AACpC,8BAA8B,iBAAK;AACnC,gCAAgC,iBAAK;AACrC,8BAA8B,iBAAK;AACnC,wBAAwB,iBAAK;AAC7B,yBAAyB,iBAAK;AAC9B,yBAAyB,iBAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAa,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAa,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAa,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;AC9F4D;AACI;AACtB;AACE;AAC5C;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA,+BAA+B,iCAAU;AACzC;AACA,+BAA+B,2CAAqB;AACpD;AACA,+BAA+B,uBAAW;AAC1C;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA;AACA,CAAC;AACwB;;AAEzB;;;AClC+C;AACW;AAC1D;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACtN+C;AACc;AACO;AACE;AAChB;AACtD;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,uCAAuC;AAC3G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,+CAA+C;AACnH;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,yCAAyC;AAC7G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,6CAA6C;AACjH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,0CAA0C;AAC9G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,2CAA2C;AAC/G;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+CAA+C,sDAAe,OAAO,cAAc,uDAAuD;AAC1K;AACA;AACA;AACA,kDAAkD,mDAAY;AAC9D;AACA,mHAAmH,uBAAuB;AAC1I;AACA;AACA;AACA;AACA,gCAAgC,0CAA0C,sDAAe,OAAO,cAAc,6CAA6C;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8DAA8D,sDAAe,GAAG;AAChF;AACA,gDAAgD,cAAc;AAC9D,0CAA0C,cAAc;AACxD,8CAA8C,cAAc;AAC5D,2CAA2C,cAAc;AACzD,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,uCAAuC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAY;AAC1E,qFAAqF,kCAAkC;AACvH;AACA;AACA,4EAA4E,kCAAkC;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,oFAAoF,yBAAyB;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC3PgE;AACN;AAC1D;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0JAA0J,wCAAwC;AAClM;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAqB;AAC5C;AACA;AACA,uBAAuB,qCAAkB;AACzC;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACpC8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,0CAA0C,EAAE;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,2DAA2D,EAAE;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,uEAAuE;AACvE,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0EAA0E,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,wGAAwG,EAAE;AAChN;AACA,aAAa;AACb;AACA,+CAA+C;AAC/C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvN+C;AACiB;AAChE;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,gDAAgD,iCAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,UAAU,mDAAmD,EAAE,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,gCAAgC,EAAE;AAC9I,iHAAiH,gCAAgC,EAAE;AACnJ;AACA;AACA,0GAA0G,gCAAgC,EAAE;AAC5I,mHAAmH,gCAAgC,EAAE;AACrJ;AACA;AACA,kFAAkF,gCAAgC,EAAE;AACpH;AACA;AACA;AACA;AACA,yGAAyG,gCAAgC,EAAE;AAC3I;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uEAAuE,2DAA2D,EAAE;AACpI,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA,kFAAkF,kEAAkE,EAAE;AACtJ,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,4BAA4B,8BAA8B,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,yEAAyE,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;AChSyD;AACwB;AACQ;AACQ;AACd;AAChB;AACP;AACc;AACY;AACqB;AAC7B;AACtB;AACgB;AACC;AACjB;AACmB;AACD;AACT;AACI;AAClC;AACmC;AACZ;AACR;AACkC;AAChC;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAa;AACvC,0BAA0B,2BAAa;AACvC;AACA,4DAA4D,2CAAqB;AACjF,oDAAoD,+CAAuB;AAC3E,kCAAkC,6BAAc;AAChD,oCAAoC,iCAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yDAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,qEAAkC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,oBAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAsD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,qBAAqB;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sDAAe,2BAA2B,kDAAW,2BAA2B,0DAAmB;AACxJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kDAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4CAA4C,yDAAkB;AAC9D;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAkB;AAC9C;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yCAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,mDAAyB;AACrE,0CAA0C,+CAAuB;AACjE;AACA;AACA,QAAQ,kCAAW,eAAe,2BAA2B;AAC7D;AACA;AACA,QAAQ,kCAAW,eAAe,mCAAmC;AACrE;AACA;AACA,QAAQ,kCAAW,eAAe,yBAAyB;AAC3D;AACA;AACA,8FAA8F,sCAAsC,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;AC7hBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClB0C;AACiC;AACgB;AAC3F;AACA;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iCAAiC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sEAAsE,iCAAiC,EAAE;AACzG;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wDAAwD,EAAE;AACrI;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC7D+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2DAAuB;AAC3B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AC5FU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFkC;AAClC;AACA;AACA;AACA;AACA,IAAI,2EAAqC;AACzC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgD;;AAEjD;;;;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;;;;;;;;;;AClBkC;AAClC,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;AClBkC;AAClC;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClBkC;AAClC;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;ACxBkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;;;;ACnBkC;AAClC;AACA;AACA,IAAI,2CAAqB;AACzB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACxBkC;AAClC;AACA;AACA,IAAI,iFAAwC;AAC5C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmD;;AAEpD;;;AClBkC;AAClC;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,yDAA4B;AAChC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;ACjBkC;AAClC;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2C;;AAE5C;;;ACjBkC;AAClC;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;ACrBwD;AACN;AACF;AACK;AACA;AACX;AACK;AACF;AACA;AACF;AACO;AACF;AACH;AACI;AACX;AACQ;AACV;AACiB;AACJ;AACI;AACU;AACL;AACJ;AACG;AACV;AACE;AACR;AACa;AACJ;AACT;AACG;AACL;AACF;AACY;AACS;AAChB;AACS;AACR;AACO;AACO;AACf;AACG;AACH;AACI;AACY;AACjB;AACG;AACD;AACH;AACL;AACiB;AACO;AACD;AACV;AACD;AACI;AACR;AACO;AACI;AACL;AACP;;AAE1C;;;AC9DgD;AACgC;AAChF;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA;AACA,0BAA0B,iDAAwB;AAClD;AACA;AACA,gBAAgB,sBAAsB,iBAAiB,sDAAsD;AAC7G,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;;;AC9DgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtDgD;AACgC;AACoB;AACpG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAwB;AAC9C;AACA;AACA,sBAAsB,qEAAkC;AACxD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACpDgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA,SAAS;AACT;AACA;;AAEA;;;ACbU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,iHAAiH;AACjH;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC9BgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAChD;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACrBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,sFAAsF,uBAAuB;AAC7G,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtB8C;AAC8D;AACrG;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB;AAC9E;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uEAAuE;AACvE,wEAAwE,0CAAa,kBAAkB,mCAAM;AAC7G;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA,6BAA6B,sDAAe;AAC5C;AACA;AACA,6BAA6B,6BAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;;AAEA;;;ACpFgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAC0D;AAC1G;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2EAAqC;AAC3D;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACtBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC/BkD;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;;AAEA;;;AC5B6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8BAA8B,wBAAwB;AACtD;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;;;;ACf+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA;AACA,aAAa,sBAAsB;AACnC;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACV+C;AACxC;AACP;AACA,mBAAmB,oCAAY;AAC/B;AACA,eAAe,oCAAY;AAC3B;;AAEA;;;ACRU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFsE;AAC7B;AACS;AAClD;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW;AACnC;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2DAA2D,0CAAa,oBAAoB,mCAAM;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;ACjPU;;AAEV;;;ACFU;;AAEV;;;ACFgF;;AAEhF;;;ACFU;;AAEV;;;ACFU;;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACF+C;AAC/C;AACA;AAC0B;AACyC;AACO;AAC3B;AACU;AACsB;AAC/E;AACA;AACA;AAC4B;AACU;AACF;AACG;AACF;AACb;AACmB;AACU;AACA;AACM;AACT;AACG;AACH;AACH;AACI;AACD;AACF;AACE;AACA;AACC;AACA;AACA;AACG;AACJ;AACD;AACK;AACD;AACD;AACF;AACG;AACJ;AACD;AACC;AACD;AACA;AACD;AACK;AACH;AACP;AACK;AACK;AACD;AACC;AACO;AACG;AACb;AACL;AACE;AACR;AACJ;AACC;AACD;AACI;AACA;AACO;AACD;AACI;AACF;AACH;AACI;AACE;AACO;AACV;AACD;AACI;AACO;AACZ;AACA;AACE;AACC;AACD;AACF;AACI;AACL;AACK;AACA;AAChB;AACO;AACQ;AACF;AACT;AACM;AACK;AACC;AACR;AACA;AACI;AACC;AACF;AACF;AACS;AACC;AACG;AACC;AACL;AACC;AACN;AACJ;AACG;AACG;AACG;AAC6B;AAC1B;AACc;AACP;AACY;AACA;AACA;AACA;AACI;AACxB;AACe;AACA;AACA;AACM;AACvB;AACgB;AACc;AACpB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAa;AACnC;AACA,qDAAqD,uCAAmB;AACxE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE,WAAW,sCAAS;AACpB,eAAe,wCAAW;AAC1B,sCAAsC,2DAAuB;AAC7D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP,WAAW,gBAAgB,CAAC,mCAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA,6CAA6C,2DAAuB;AACpE;AACA;AACA;AACA;AACA,kEAAkE,+CAA+C,EAAE;AACnH,6FAA6F,6BAA6B,EAAE;AAC5H;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACxSA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,mCAAmC,mEAAa,KAAK,4DAAM;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;;AC/DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAC3B;AACA;AACA;AACA;AACA;AACO;AACP,kCAAkC,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iDAAiD,kEAAkE,EAAE;AACrH;AACA;AACA;AACA;AACO;AACP,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM,2CAA2C;AACjD;AACO;AACP,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,+BAA+B,EAAE;AAC9F;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,cAAc;AAC3C,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACjGA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM,6DAA6D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;AChCA,uBAAuB;AACvB;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,EAAc;AAC/B,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,iBAAiB,mBAAO,CAAC,EAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA;AACA,cAAc,mBAAO,CAAC,GAAY;AAClC,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,a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AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D,uBAAuB,QAAQ;AAC/B;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;AC5IA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA,UAAU,mBAAO,CAAC,GAAe;AACjC,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,gBA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,EAAmB,CAAG;;;;EA5DI,2B;;AAA9B,4B;;;;;;;ACXA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AAC0B;AACR;AACf;AACN;AACN;AACU;AACU;AACvB;AACiB;AACtC;AACoC;AACA;AACtB;AACoB;AACnE;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,4GAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA,gFAAgF,sCAAsC,EAAE;AACxH;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,sEAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,wDAAwD,yEAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAK;AACtC,mCAAmC,qDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA;AACA,4DAA4D,qFAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,yEAAyE,6CAA6C;AACtH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,8FAA8F,wDAAwD,EAAE;AACxJ;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qFAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,oDAAoD,EAAE;AACpJ,6FAA6F,wCAAwC,EAAE;AACvI,8FAA8F,0CAA0C,EAAE;AAC1I,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI,sFAAsF,iCAAiC,EAAE;AACzH,uFAAuF,mCAAmC,EAAE;AAC5H,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,2DAA2D,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,sFAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,yDAAyD,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oFAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4DAA4D,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+CAA+C,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6FAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAkD,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,8CAA8C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mFAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,4CAA4C,EAAE;AAC/G;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,yBAAyB,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sEAAI;AACnD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,gFAAgF,8BAA8B,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,+DAAS;AAC5G;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA,wDAAwD,yEAAK,EAAE,wBAAwB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oDAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,qFAAW;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,2BAA2B,EAAE;AAC/I;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA,6CAA6C;AAC7C,yEAAyE,gEAAQ,8CAA8C,2BAA2B,EAAE;AAC5J;AACA,mHAAmH,iGAAiG,EAAE;AACtN,8GAA8G,6BAA6B,EAAE;AAC7I,wHAAwH,2BAA2B,EAAE;AACrJ;AACA;AACA,2DAA2D,6FAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA;AACA,uHAAuH,oCAAoC,EAAE;AAC7J,iEAAiE;AACjE;AACA;AACA;AACA;AACA,sFAAsF,sFAAW;AACjG;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,oFAAU,EAAE,yCAAyC;AAC3H;AACA;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,gHAAgH,2CAA2C,EAAE;AAC7J;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA,sFAAsF,mFAAU;AAChG;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA,6FAA6F,gBAAgB,EAAE;AAC/G;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA,qEAAqE,wDAAwD,EAAE;AAC/H;AACA;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,sFAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA,sFAAsF,0CAA0C,EAAE;AAClI;AACA;AACA;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,yEAAK;AACpD;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,mFAAU;AACzD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,wBAAwB,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,kCAAkC,EAAE;AACzH,qFAAqF,kCAAkC,EAAE;AACzH;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA,+CAA+C,qDAAK;AACpD,iDAAiD,qDAAK;AACtD;AACA;AACA;AACA;AACA;AACA,2CAA2C,qDAAK;AAChD,6CAA6C,qDAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,sFAAe;AACoB;;AAErC;;;;;;;;AChuDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;ACXA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJa;AACb,IAAI,mBAAO,CAAC,EAAgB;AAC5B,gBAAgB,mBAAO,CAAC,EAAY;AACpC,eAAe,mBAAO,CAAC,EAAW;AAClC,cAAc,mBAAO,CAAC,EAAU;AAChC,gBAAgB,mBAAO,CAAC,CAAW;AACnC,eAAe,mBAAO,CAAC,GAAU;AACjC,gBAAgB,mBAAO,CAAC,GAAiB;AACzC,YAAY,mBAAO,CAAC,EAAQ;AAC5B,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,qBAAqB,mBAAO,CAAC,EAAkB;AAC/C,aAAa,mBAAO,CAAC,EAAS;AAC9B,oBAAoB,mBAAO,CAAC,GAAiB;AAC7C,kBAAkB,mBAAO,CAAC,EAAe;AACzC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,wBAAwB,mBAAO,CAAC,EAAsB;AACtD,oBAAoB,mBAAO,CAAC,EAAiB;AAC7C,YAAY,mBAAO,CAAC,EAAQ;AAC5B,gBAAgB,mBAAO,CAAC,GAAY;AACpC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,oBAAoB,mBAAO,CAAC,GAAkB;AAC9C,eAAe,mBAAO,CAAC,EAAkB;AACzC,uBAAuB,mBAAO,CAAC,EAAe;AAC9C,aAAa,mBAAO,CAAC,EAAgB;AACrC,kBAAkB,mBAAO,CAAC,GAA4B;AACtD,YAAY,mBAAO,CAAC,EAAQ;AAC5B,YAAY,mBAAO,CAAC,EAAQ;AAC5B,0BAA0B,mBAAO,CAAC,EAAkB;AACpD,4BAA4B,mBAAO,CAAC,GAAmB;AACvD,2BAA2B,mBAAO,CAAC,GAAwB;AAC3D,uBAAuB,mBAAO,CAAC,GAAsB;AACrD,kBAAkB,mBAAO,CAAC,GAAc;AACxC,oBAAoB,mBAAO,CAAC,GAAgB;AAC5C,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,kBAAkB,mBAAO,CAAC,GAAe;AACzC,wBAAwB,mBAAO,CAAC,GAAsB;AACtD,YAAY,mBAAO,CAAC,EAAc;AAClC,cAAc,mBAAO,CAAC,EAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB,0BAA0B,EAAE,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAgC;AACzF;AACA,OAAO;AACP;AACA;AACA,6EAA6E,YAAY;AACzF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,6CAA6C,EAAE;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mDAAmD;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,oCAAoC;AACpC;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,8DAA8D;AAC9D;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB,sBAAsB,EAAE,EAAE;AACnD;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,uBAAuB;AACvB,2BAA2B;AAC3B,0BAA0B;AAC1B,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,aAAa;AACvC,OAAO;AACP;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,uDAAuD,6BAA6B,EAAE;AACt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KAAK,KAAZ;AACH;AAED;;;;AAIG;;;;WACH,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACH;;;;;;AA7OL;AAkBI;;;AAGG;;AACY,oBAAiB,CAAjB;AA0NnB;;;;;AAKG;;AACH,UAAU,CAAC,WAAX,GAAyB,QAAzB;AACA;;;;;AAKG;;AACH,UAAU,CAAC,gBAAX,GAA8B,SAA9B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,eAAX,GAA6B,QAA7B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,cAAX,GAA4B,OAA5B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,UAAX,GAAwB,OAAxB,C;;;;;;ACvRA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,GAAU;;AAEnC,OAAO,WAAW;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;AC5QA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,EAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,EAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;;AACA;;AACA;;IAEa,M;AAcT,kBAAY,OAAZ,EAAqB,KAArB,EAA0B;AAAA;;AAAA;;AACtB,SAAK,SAAL,GAAiB,IAAjB;AACA,SAAK,QAAL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AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,GAAW;AAChC,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;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tEqB,0B;;AAA1B;AAyEA,sCAAa,QAAb,CAAsB,IAAtB,E;;;;;;;AC7EA;AAAA;AAAA;AAAkC;AACM;AACxC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,mDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACvCA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACpBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBsE;AACf;AACvD,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B,oFAAoF,QAAQ,sCAAS;AACrG;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,kCAAW;AAC5I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,oIAAoI,kCAAW;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kCAAW;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE,4BAA4B,8BAA8B,EAAE;AAChI;AACA;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,kCAAW;AAC5F;AACA,qCAAqC,IAAI;AACzC,iCAAiC;AACjC;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM;AAClG;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrN4D;AAC5D,IAAI,iFAAwC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAmB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmD;;AAEpD;;;ACrD+C;AAC/C,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,0FAA0F,QAAQ,sCAAS;AAC3G;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA,0JAA0J,8CAA8C,EAAE;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC8B;;AAE/B;;;ACnHkE;AAClE,IAAI,uFAA2C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAsB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsD;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;ACrDiF;AAC7B;AAC8C;AAC5B;AACqC;AACd;AACI;AACN;AAC3C;AACwB;AACS;AACf;AACgD;AACvC;AACgD;AAC7E;AACmD;AACvC;AACS;AACN;AACyB;AACa;AAC/B;AAClB;AACE;AACgC;AACZ;AACL;AACnE;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU,uBAAuB,EAAE,EAAE;AACpJ;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,6CAA6C,sDAAsD;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wDAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAiC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,gCAAgC,sCAAa;AAC7C;AACA;AACA;AACA,0DAA0D;AAC1D,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0CAAa,KAAK,mCAAM;AACtE,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E,4DAA4D,0CAAa,KAAK,mCAAM;AACpF;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI;AACA,qCAAqC,kDAAkD;AACvF,6FAA6F,6CAA6C,EAAE;AAC5I;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF,wCAAwC,yBAAyB,uFAAuF,EAAE,EAAE;AAC5J;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAqE,EAAE;AAC7G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0DAA0D,6FAA6F,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAc;AAC5C,0EAA0E,uCAAuC,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kDAAW,sCAAsC,0DAAmB,sCAAsC,gDAAS;AACtK;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAAmC;AAC7D;AACA,mDAAmD,oDAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mDAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB;AAC1F;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,mDAAY;AACvD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB,sBAAsB,mDAAY;AAC5H;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,uCAAuC,EAAE;AACvH;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM,4CAA4C,iCAAiC,EAAE;AAC/I;AACA,oCAAoC,0CAAa,KAAK,mCAAM;AAC5D,uEAAuE,mEAAmE,EAAE;AAC5I,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kIAAkI,8CAA8C,EAAE;AAClL,yBAAyB,0CAAa,CAAC,0CAAa,KAAK,mCAAM,YAAY,mCAAM;AACjF;AACA,gFAAgF,mEAAmE,EAAE;AACrJ;AACA;AACA,uDAAuD,kDAAW,uCAAuC,0DAAmB;AAC5H;AACA;AACA;AACA;AACA,uDAAuD,qDAAc;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sDAAe;AACtE;AACA;AACA;AACA;AACA,oFAAoF,kCAAW;AAC/F;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4EAA4E,uCAAuC,EAAE;AACrH;AACA;AACA;AACA,4DAA4D,mEAAmE,EAAE;AACjI,SAAS;AACT;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe,sCAAsC,qDAAc;AACjH;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,kDAAW;AACzD;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA,iFAAiF,uEAAuE,EAAE,aAAa;AACvK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE,eAAe;AACzH;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,0FAAuC;AAC7E;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA,+CAA+C,iCAAgB;AAC/D,kDAAkD,uCAAmB;AACrE,4DAA4D,iFAAwC;AACpG;AACA,+DAA+D,uFAA2C;AAC1G;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA,2DAA2D,kCAAW;AACtE;AACA;AACA,wCAAwC,kCAAW;AACnD;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA,sCAAsC,kCAAW;AACjD,oEAAoE,wBAAwB,EAAE;AAC9F,qEAAqE,+BAA+B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,4CAA4C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA;AACA,8CAA8C,8CAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,kCAAW;AACjF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,kCAAW;AACxF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,kCAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oCAAY;AACgB;;AAE9B;;;;;;;;ACtoDA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,uCAAuC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,0CAA0C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAA+C;AACH;AACiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sGAAsG,QAAQ,+DAAS;AACvH;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA;AACA,8FAA8F,gFAAY;AAC1G;AACA;AACA;AACA,iDAAiD,IAAI;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,wDAAwD,EAAE;AACrK,yHAAyH,wDAAwD,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,+EAA+E,gFAAY;AAC3F;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAAQ;AAChD;AACA,iCAAiC;AACjC;AACA,mGAAmG;AACnG;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uFAAuF,wDAAwD,EAAE;AACjJ,mFAAmF,wDAAwD,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;;;ACvLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;ACrBa;AACb;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZa;;AAEb,cAAc,mBAAO,CAAC,GAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBa;AACb,mBAAO,CAAC,GAAmB;AAC3B,eAAe,mBAAO,CAAC,EAAa;AACpC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B,cAAc,mBAAO,CAAC,EAAY;AAClC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;AC/FA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAc;AACjC,kBAAkB,mBAAO,CAAC,G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A,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4EAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACwB;;AAEzB;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;ACZgF;AACxC;AACY;AACpD,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,sEAAsE,+BAA+B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,yEAAyE,iCAAiC,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wEAAwE,wCAAwC,EAAE;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,iDAAiD,sBAAK;AACtD;AACA,mDAAmD,sBAAK;AACxD;AAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAQ;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnFa;AACb,aAAa,mBAAO,CAAC,EAAW;AAChC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAY;AAClC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,EAAS;AAC5B,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,YAAY,mBAAO,CAAC,EAAU;AAC9B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,GAAa;AACnC,WAAW,mBAAO,CAAC,EAAgB;AACnC,SAAS,mBAAO,CAAC,EAAc;AAC/B,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,QAAQ,UAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB,uBAAuB,EAAE,EAAE;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,uBAAuB;AACvB,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;ACLzC;AACA;AACA;;;;;;;ACFA;AACA,kBAAkB,mBAAO,CAAC,GAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHY;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACjKA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACT;AACA;AACL;AAC8C;AACtB;AACG;AACM;AAC5B;AACU;AACP;AACA;AACuB;AACpF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,yEAAY;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA,4FAA4F,wFAAY;AACxG;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,iCAAiC,EAAE;AACnJ;AACA;AACA;AACA,2FAA2F,+CAA+C,EAAE;AAC5I;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH,mGAAmG,6CAA6C,EAAE;AAClJ;AACA,uDAAuD,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AACpL,mGAAmG,qEAAqE,EAAE;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D,qEAAqE,wFAAY,8EAA8E;AAC/J;AACA;AACA,8CAA8C,uFAAW,sCAAsC,+FAAmB;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,uFAAW,sCAAsC,+FAAmB;AAC5I;AACA;AACA;AACA,qEAAqE,2FAAe;AACpF;AACA;AACA;AACA;AACA,kDAAkD,wFAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB,GAAG;AACzH;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAW,sCAAsC,+FAAmB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA;AACA;AACA,8CAA8C,2FAAe;AAC7D;AACA;AACA,2CAA2C,+IAA+I,EAAE;AAC5L,yCAAyC,wDAAwD,EAAE;AACnG,8DAA8D,eAAe;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,wFAAY;AACpE,wDAAwD,yGAAoB;AAC5E,wDAAwD,uFAAW;AACnE,wDAAwD,+FAAmB;AAC3E,wDAAwD,2FAAe;AACvE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAA0C,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,2EAA2E,iCAAiC,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wFAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,YAAY,QAAQ,EAAE,0BAA0B;AACpG;AACA,+GAA+G;AAC/G;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,gCAAgC,6EAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wFAAY,gEAAgE,yGAAoB,uCAAuC,qFAAS,GAAG;AACnN,0FAA0F;AAC1F;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yGAAoB,uCAAuC,qFAAS;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gGAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC5kBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACP;AACP;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AAC5B;AACgB;AACR;AACe;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA,8DAA8D,0FAAc;AAC5E;AACA;AACA;AACA,mEAAmE,uFAAW;AAC9E;AACA;AACA;AACA,mEAAmE,+FAAmB;AACtF;AACA;AACA;AACA,mEAAmE,+FAAmB,GAAG;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW;AAC3E,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA,YAAY,+EAAc;AAC1B;AACA;AACA;AACA,8BAA8B,yFAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,gEAAgE,qFAAS;AACzE;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA,gCAAgC;AAChC;AACA;AACA,+DAA+D,uFAAW;AAC1E,+DAA+D,+FAAmB;AAClF,+DAA+D,wFAAY;AAC3E,+DAA+D,yGAAoB;AACnF,+DAA+D,qFAAS;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,yHAAyH;AACzH;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,4DAA4D,qFAAS;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uFAAW;AACtE,2DAA2D,+FAAmB;AAC9E,2DAA2D,wFAAY;AACvE,2DAA2D,yGAAoB;AAC/E,2DAA2D,qFAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH;AACA;AACA;AACA,0BAA0B,6GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iGAAwB;AAC1C;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC1gBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACX;AACf;AACwB;AACH;AACd;AAC8C;AACzC;AACA;AACU;AAC5B;AAC4C;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,6BAA6B,4DAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD;AACA;AACA;AACA,mDAAmD,+FAAmB;AACtE;AACA;AACA;AACA,mDAAmD,2FAAe,sBAAsB,0FAAc,sBAAsB,2FAAe;AAC3I;AACA;AACA;AACA;AACA,mDAAmD,wFAAY;AAC/D;AACA;AACA,mDAAmD,+FAAmB,GAAG;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mDAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,2FAAe;AACzI;AACA;AACA,iFAAiF,2FAAe;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC1Pa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAA6B;AAClD,aAAa,mBAAO,CAAC,GAAiC;AACtD,aAAa,mBAAO,CAAC,GAAwB;AAC7C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,EAAqB;AAC1C,kC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;;IAEa,Y;;;;;;;;;;;;EAAqB,+B;;AAAlC,oC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;AACA;AAEA;;;AAGG;;;IACU,Y;;;;;AAET;;;;;;;AAOG;AACH,wBAAY,WAAZ,EAAyB,IAAzB,EAA+B,QAA/B,EAAyC,iBAAzC,EAA0D;AAAA;;AAAA;;AACtD,8BAAM,WAAN,EAAmB,QAAnB;AACA,UAAK,YAAL,GAAoB,OAAO,CAAC,GAAR,CAAY,CAAC,MAAK,YAAN,EAAoB,4BAAa,WAAb,GAA2B,IAA3B,CAAgC,IAAhC,CAApB,CAAZ,EAAwE,IAAxE,CAA6E,aAAG,EAAG;AACnG,SAAG,CAAC,CAAD,CAAH,CAAO,aAAP,CAAqB,iBAArB,EAAwC,WAAxC,CAAoD,GAAG,CAAC,CAAD,CAAvD;AACA,kCAAa,mBAAb,CAAiC,GAAG,CAAC,CAAD,CAApC;AACA,YAAK,KAAL,GAAa,GAAG,CAAC,CAAD,CAAhB;AACA,aAAO,GAAG,CAAC,CAAD,CAAV;AACH,KALmB,EAKjB,KALiB,CAKX,WAAC;AAAA,aAAI,OAAO,CAAC,KAAR,CAAc,CAAd,CAAJ;AAAA,KALU,CAApB;AAFsD;AAQzD;;;EAlB6B,uB;;AAAlC,oC;;;;;;;;;;;;;;;;;;;;ACPA;;AACA;;AACA;AAEA;;;AAGG;;;IACU,I;AAOT;;;;;AAKG;AACH,gBAAY,QAAZ,EAAuB,OAAvB,EAA+B;AAAA;;AAAA;;AAC3B,SAAK,QAAL,GAAgB,EAAhB;AACA,SAAK,UAAL,GAAkB,EAAlB;AACA,SAAK,SAAL,GAAiB,EAAjB;;AAEA,QAAI,KAAK,CAAC,OAAN,CAAc,QAAd,CAAJ,EAA6B;AACzB,WAAK,UAAL,GAAkB,QAAlB;AACH,KAFD,MAEO;AACH,WAAK,UAAL,GAAkB,CAAC,QAAD,CAAlB;AACH,KAT0B,CAW3B;;;AACA,SAAK,gBAAL,GAAwB,KAAK,wBAAL,EAAxB,CAZ2B,CAc3B;;AACA,oBAAO,OAAP,CAAe,OAAf,EAAwB,EAAxB,EAA4B,OAA5B,CAAoC,gBAAM,EAAG;AACzC,WAAI,CAAC,SAAL,CAAe,MAAf,EAAuB,KAAvB;AACH,KAFD;AAIA,SAAK,oBAAL,GAA4B,IAA5B;AACH;AAED;;;;AAIG;;;;;WACH,cAAK,IAAL,EAAS;AACL,UAAI,GAAG,gBAAO,OAAP,CAAe,IAAf,EAAqB,IAAI,IAAJ,EAArB,CAAP;AACA,UAAI,CAAC,QAAL,GAAgB,EAAhB;;AACA,WAAK,QAAL,CAAc,OAAd,CAAsB,gBAAM,EAAG;AAC3B,YAAI,CAAC,SAAL,CAAe,MAAM,CAAC,IAAP,EAAf;AACH,OAFD;;AAGA,UAAI,CAAC,UAAL,GAAkB,KAAK,UAAvB;AACA,UAAI,CAAC,gBAAL,GAAwB,KAAK,gBAA7B;AAEA,aAAO,IAAP;AACH;AAED;;;AAGG;;;;WACH,iBAAK;AACD,WAAK,SAAL,CAAe,OAAf,CAAuB,iBAAO,EAAG;AAC7B,eAAO,CAAC,KAAR;AACH,OAFD;AAGH;AAED;;;;;AAKG;;;;WACH,mBAAU,MAAV,EAAkB,MAAlB,EAAyB;AACrB;AACA,UAAI,MAAM,YAAY,uBAAlB,IAAgC,KAAK,QAAL,CAAc,OAAd,CAAsB,MAAtB,MAAkC,CAAC,CAAvE,EAA0E;AAEtE;AACA,YAAI,MAAM,YAAY,qCAAtB,EAAyC;AACrC,eAAK,SAAL,CAAe,IAAf,CAAoB,MAAM,CAAC,UAAP,EAApB;AACH;;AAED,aAAK,QAAL,CAAc,IAAd,CAAmB,MAAnB;;AACA,cAAM,CAAC,OAAP,CAAe,IAAf,EARsE,CAUtE;;AACA,YAAI,gBAAO,OAAP,CAAe,MAAf,EAAuB,IAAvB,CAAJ,EAAkC;AAC9B,eAAK,MAAL;AACH;AACJ;AACJ;;;WAED,0BAAiB,MAAjB,EAAuB;AACnB,WAAK,QAAL,CAAc,OAAd,CAAsB,gBAAM;AAAA,eAAI,MAAM,CAAC,OAAP,CAAe,IAAf,CAAJ;AAAA,OAA5B;;AACA,WAAK,QAAL,GAAgB,EAAhB;AACA,WAAK,SAAL,GAAiB,EAAjB,CAHmB,CAKnB;;AACA,UAAI,gBAAO,OAAP,CAAe,MAAf,EAAuB,IAAvB,CAAJ,EAAkC;AAC9B,aAAK,MAAL;AACH;AACJ;AAED;;AAEG;;;;WACH,gBAAI;AAAA;;AACA,UAAI;AACA,aAAK,WAAL;;AACA,aAAK,UAAL,CAAgB,OAAhB,CAAwB,kBAAQ,EAAG;AAC/B,kBAAQ,CAAC,MAAT,CAAgB,MAAhB;AACH,SAFD;AAGH,OALD,CAKE,OAAO,CAAP,EAAU;AACR,eAAO,CAAC,KAAR,CAAc,CAAd;AACH;AACJ;AAED;;AAEG;;;;WACH,uBAAW;AACP,WAAK,QAAL,GAAgB,KAAK,QAAL,CAAc,IAAd,CAAmB,UAAU,KAAV,EAAiB,MAAjB,EAAuB;AACtD,eAAO,KAAK,CAAC,QAAN,KAAmB,MAAM,CAAC,QAAP,EAA1B;AACH,OAFe,CAAhB;AAGH;;;WAED,qBAAY,OAAZ,EAAmB;AACf,UAAI,KAAK,oBAAT,EAA+B;AAC3B,aAAK,oBAAL,CAA0B,OAA1B;AACH;AACJ;;;WAED,gCAAuB,QAAvB,EAA+B;AAC3B,WAAK,oBAAL,GAA4B,QAA5B;AACH;AAED;;;;AAIG;;;;WACH,oCAAwB;AAAA;;AACpB,aAAO,UAAC,KAAD,EAAU;AACb,YAAI,QAAQ,GAAG,KAAK,CAAC,MAArB,CADa,CAGb;;AACA,YAAI,QAAQ,CAAC,OAAT,CAAiB,IAAjB,KAA0B,QAAQ,CAAC,OAAT,CAAiB,MAAjB,CAA9B,EAAwD;AACpD;AACA,kBAAQ,GAAG,QAAQ,CAAC,OAAT,CAAiB,IAAjB,CAAX;AACA,cAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAT,CAAiB,IAAjB,CAAD,CAAvB,CAHoD,CAKpD;;AACA,eAAK,IAAI,CAAC,GAAG,CAAR,EAAW,CAAC,GAAG,MAAI,CAAC,QAAL,CAAc,MAAlC,EAA0C,CAAC,GAAG,CAA9C,EAAiD,CAAC,EAAlD,EAAsD;AAClD,gBAAI,MAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,KAAjB,OAA6B,QAAjC,EAA2C;AACvC;AACA,kBAAI,OAAO,MAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,SAAjB,EAAP,KAAwC,UAAxC,IAAsD,MAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,WAAjB,EAA1D,EAA0F;AACtF,sBAAI,CAAC,QAAL,CAAc,CAAd,EAAiB,SAAjB,GAA6B,MAAI,CAAC,QAAL,CAAc,CAAd,CAA7B,EAA+C,KAA/C;;AACA,qBAAK,CAAC,cAAN;AACH,eALsC,CAMvC;;;AACA,qBAAO,MAAI,CAAC,QAAL,CAAc,CAAd,CAAP;AACH;AACJ,WAhBmD,CAkBpD;;;AACA,eAAK,IAAI,EAAC,GAAG,CAAR,EAAW,EAAC,GAAG,MAAI,CAAC,SAAL,CAAe,MAAnC,EAA2C,EAAC,GAAG,EAA/C,EAAkD,EAAC,EAAnD,EAAuD;AACnD,gBAAI,MAAM,GAAG,MAAI,CAAC,SAAL,CAAe,EAAf,EAAkB,KAAlB,CAAwB,QAAxB,EAAkC,KAAlC,CAAb;;AACA,gBAAI,MAAJ,EAAY;AACR,qBAAO,MAAP;AACH;AACJ;AACJ;;AACD,eAAO,IAAP;AACH,OA/BD;AAgCH;AAED;;;;AAIG;;;;WACH,4BAAmB,QAAnB,EAA2B;AACvB,WAAK,gBAAL,GAAwB,QAAxB;AACH;AAED;;;;AAIG;;;;WACH,8BAAkB;AACd,aAAO,KAAK,gBAAZ;AACH;AAED;;;AAGG;;;;WACH,sBAAU;AACN,aAAO,KAAK,QAAZ;AACH;AAED;;;AAGG;;;;WACH,sBAAa,MAAb,EAAmB;AACf,WAAK,UAAL,CAAgB,OAAhB,CAAwB,kBAAQ,EAAG;AAC/B,gBAAQ,CAAC,oBAAT,CAA8B,MAA9B;AACH,OAFD;AAGH;AAED;;;AAGG;;;;WACH,sBAAa,MAAb,EAAmB;AACf,WAAK,UAAL,CAAgB,OAAhB,CAAwB,kBAAQ,EAAG;AAC/B,gBAAQ,CAAC,YAAT,CAAsB,MAAtB;AACH,OAFD;AAGH;AAED;;AAEG;;;;WACH,kBAAM;AACF,WAAK,IAAL;AACH;;;;;;AA9NL,oB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;;AACA;;AACA;;AACA;AAEA;;AAEG;;;IACU,iB;;;;;;;;;;;;;;AAET;;;;;AAKG;AACH,0BAAa,MAAb,EAAmB;AACf,UAAI,WAAW,GAAG,KAAK,iBAAL,CAAuB,MAAvB,CAAlB;AACA,UAAI,SAAS,GAAG,KAAK,eAAL,CAAqB,MAArB,CAAhB;AAEA,eAAS,CAAC,YAAV,CAAuB,WAAvB,EAAoC,SAAS,CAAC,UAA9C;AACA,aAAO,SAAP;AACH;AAED;;;;AAIG;;;;WACH,2BAAkB,MAAlB,EAAwB;AACpB,UAAI,QAAQ,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAf;;AACA,UAAI,OAAO,MAAM,CAAC,SAAP,EAAP,KAA8B,QAAlC,EAA4C;AACxC,gBAAQ,CAAC,IAAT,GAAgB,MAAM,CAAC,SAAP,EAAhB;AACH;;AAED,UAAI,gBAAO,SAAP,CAAiB,MAAM,CAAC,OAAP,EAAjB,CAAJ,EAAwC;AACpC,YAAI,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAlB;AACA,mBAAW,CAAC,GAAZ,GAAkB,MAAM,CAAC,OAAP,EAAlB;AACA,mBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,cAA1B;;AACA,YAAI,MAAM,CAAC,iBAAP,EAAJ,EAAgC;AAC5B,qBAAW,CAAC,OAAZ,CAAoB,kBAApB,IAA0C,MAAM,CAAC,OAAP,EAA1C;AACA,qBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAAuC,wBAAW,WAAX,GAA0B,mBAA1B,EAAvC;AACH,SAHD,MAGO;AACH,qBAAW,CAAC,KAAZ,GAAoB,MAAM,CAAC,OAAP,EAApB;AACH;;AACD,gBAAQ,CAAC,WAAT,CAAqB,WAArB;AACH;;AACD,UAAI,IAAI,GAAG,MAAM,CAAC,OAAP,EAAX,CAlBoB,CAmBpB;;AACA,UAAI,MAAM,CAAC,iBAAP,EAAJ,EAAgC;AAC5B,YAAI,GAAG,wBAAW,yBAAX,CAAqC,IAArC,CAAP;AACH,OAFD,MAEO;AACH,YAAI,GAAG,QAAQ,CAAC,cAAT,CAAwB,IAAxB,CAAP;AACH;;AACD,cAAQ,CAAC,WAAT,CAAqB,IAArB;AACA,aAAO,QAAP;AACH;AAED;;;;;AAKG;;;;WACH,yBAAgB,MAAhB,EAAsB;AAClB,UAAI,SAAS,GAAG,QAAQ,CAAC,aAAT,CAAuB,IAAvB,CAAhB;;AAEA,UAAI,MAAM,CAAC,UAAP,GAAoB,IAApB,OAA+B,EAAnC,EAAuC;AAAA;;AACnC,yCAAS,CAAC,SAAV,EAAoB,GAApB,gDAA2B,MAAM,CAAC,UAAP,GAAoB,KAApB,CAA0B,GAA1B,CAA3B;AACH,OALiB,CAMlB;;;AACA,eAAS,CAAC,OAAV,CAAkB,IAAlB,IAA0B,MAAM,CAAC,KAAP,EAA1B;;AAEA,UAAI,gBAAO,SAAP,CAAiB,MAAM,CAAC,OAAP,EAAjB,CAAJ,EAAwC;AACpC,iBAAS,CAAC,SAAV,CAAoB,GAApB,CAAwB,KAAxB;AACH;;AAED,UAAI,CAAC,MAAM,CAAC,SAAP,EAAL,EAAyB;AACrB,iBAAS,CAAC,SAAV,CAAoB,GAApB,CAAwB,QAAxB;AACH;;AAED,eAAS,CAAC,SAAV,CAAoB,GAApB,CAAwB,MAAM,CAAC,UAAP,EAAxB;AAEA,aAAO,SAAP;AACH;AAED;;;;;AAKG;;;;WACH,6BAAoB,MAApB,EAA0B;AACtB,UAAI,oBAAoB,8FAA6B,MAA7B,CAAxB;;AACA,0BAAoB,CAAC,SAArB,CAA+B,MAA/B,CAAsC,4BAAtC;AACA,0BAAoB,CAAC,SAArB,CAA+B,GAA/B,CAAmC,6BAAnC;AACA,aAAO,oBAAP;AACH;AAED;;;;AAIG;;;;WACH,oCAA2B,MAA3B,EAAiC;AAC7B,UAAI,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,IAAvB,CAAlB;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,MAA1B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,UAA1B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,SAA1B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,gBAA1B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,sBAA1B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,WAA1B;AAEA,aAAO,WAAP;AACH;AAED;;;AAGG;;;;WACH,sBAAa,MAAb,EAAmB;AACf,UAAI,MAAM,YAAY,qCAAtB,EAAwC;AACpC,YAAI,cAAc,GAAG,KAAK,mBAAL,CAAyB,MAAzB,EAAiC,aAAjC,CAA+C,UAA/C,CAArB;;AACA,YAAI,MAAM,CAAC,UAAP,GAAoB,MAApB,EAAJ,EAAkC;AAC9B,eAAK,mBAAL,CAAyB,MAAzB,EAAiC,YAAjC,CAA8C,eAA9C,EAA+D,IAA/D;AACA,wBAAc,CAAC,SAAf,CAAyB,GAAzB,CAA6B,WAA7B;AACA,wBAAc,CAAC,KAAf,GAAqB,EAArB;AACH,SAJD,MAKI;AACA,eAAK,mBAAL,CAAyB,MAAzB,EAAiC,eAAjC,CAAiD,eAAjD;AACA,wBAAc,CAAC,SAAf,CAAyB,MAAzB,CAAgC,UAAhC;AACA,wBAAc,CAAC,KAAf,GAAqB,eAArB;AACH;AACJ;AACJ;;;;EA9HkC,2B;;AAAvC,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAI,OAAO,GAAG,QAAd,C,CACA;AACA;AACA;;IAEa,oB;;;;;;;;;;;;;WAuBT,gBAAO,WAAP,EAAmB;AAAA;;AACf,UAAI,SAAS,GAAiC,KAAK,WAAL,CAAkB,sBAAlB,EAA9C;AACA,UAAI,OAAO,GAAiC,KAAK,WAAL,CAAkB,oBAAlB,EAA5C;AAEA,UAAI,GAAG,GAAG,EAAV;AACA,YAAM,CAAC,IAAP,CAAY,OAAZ,EAAqB,OAArB,CAA6B,mBAAS,EAAG;AACrC,YAAI,SAAS,KAAK,UAAlB,EAA8B;AAC1B,aAAG,CAAC,SAAD,CAAH,GAAiB,KAAI,CAAC,SAAD,CAArB;AACH;AACJ,OAJD;AAKA,YAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,sBAAY,EAAG;AAC1C,YAAI,WAAW,KAAK,IAApB,EAA0B;AACtB,aAAG,CAAC,YAAD,CAAH,GAAoB,KAAI,CAAC,YAAD,CAAxB;AACH,SAFD,MAEO;AACH,cAAI,KAAK,CAAC,OAAN,CAAc,KAAI,CAAC,YAAD,CAAlB,CAAJ,EAAuC;AACnC,gBAAI,GAAG,GAAG,EAAV;;AACA,iBAAI,CAAC,YAAD,CAAJ,CAAmB,OAAnB,CAA2B,eAAK;AAAA,qBAAK,KAAK,IAAI,GAAG,CAAC,IAAJ,CAAS,KAAK,CAAC,EAAf,CAAd;AAAA,aAAhC;;AACA,eAAG,CAAC,YAAD,CAAH,GAAoB,GAApB;AACH,WAJD,MAIO,IAAI,KAAI,CAAC,YAAD,CAAJ,YAA8B,kCAAlC,EAA6C;AAChD,eAAG,CAAC,YAAD,CAAH,GAAoB,KAAI,CAAC,YAAD,CAAJ,CAAmB,EAAvC;AACH,WAFM,MAEA;AACH,eAAG,CAAC,YAAD,CAAH,GAAoB,IAApB;AACH;AACJ;AACJ,OAdD;AAeA,aAAO,GAAP;AACH;;;WA/CD,mBAAuB,GAAvB,EAA4B,SAA5B,EAAsC;;;;;;iDAC3B,KAAK,IAAL,CAAU;AACb,wBACI,OAAO,CAAC,EAAR,CAAW,GAAX;AAFS,iBAAV,EAGJ,IAHI,EAGE,IAHF,EAGQ,IAHR,EAGc,SAHd,C;;;;;;;;;AAIV;;;WAED,kBAAsB,EAAtB,EAA0B,SAA1B,EAAoC;;;;;;kDACzB,KAAK,OAAL,CAAa;AAChB,wBAAM;AADU,iBAAb,EAEJ,IAFI,EAEE,IAFF,EAEQ,SAFR,C;;;;;;;;;AAGV;;;WAED,wBAA4B,EAA5B,EAAgC,SAAhC,EAA0C;AAAA;;;;;;;;;;;;;;;kDAC/B,OAAM,QAAN,CAAc,IAAd,CAAc,IAAd,EAAe,EAAf,EAAmB,SAAnB,C;;;;;;;;;AACV;;;WAED,yBAA6B,GAA7B,EAAkC,SAAlC,EAA4C;AAAA;;;;;;;;;;;;;;;kDACjC,OAAM,QAAN,CAAc,IAAd,CAAc,IAAd,EAAe,GAAf,EAAoB,SAApB,C;;;;;;;;;AACV;;;WA8BD,mBAAuB,WAAvB,EAAoC,QAApC,EAA8C,gBAA9C,EAA8D;;;;;;;;;AAC1D,wBAAQ,GAAG,QAAQ,IAAI,EAAvB;AACI,uB,GAAU,KAAK,CAAC,OAAN,CAAc,WAAd,C;;AACd,oBAAI,CAAC,OAAL,EAAc;AACV,6BAAW,GAAG,CAAC,WAAD,CAAd;AACH;;AACD,oBAAI,CAAC,KAAK,CAAC,OAAN,CAAc,QAAd,CAAL,EAA8B;AAC1B,0BAAQ,GAAG,CAAC,QAAD,CAAX;AACH;;AAEG,4B,GAAe,E;AACf,+B,GAAkB,E;AACtB,2BAAW,CAAC,OAAZ,CAAoB,UAAC,UAAD,EAAa,KAAb,EAAsB;AACtC,iCAAe,CAAC,IAAhB,CAAqB,IAAI,OAAJ,CAAY,UAAM,OAAN;AAAA,2BAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AACzC,oCADyC,GAChC,IADgC;;AAAA,oCAEzC,QAAQ,CAAC,MAAT,GAAkB,KAFuB;AAAA;AAAA;AAAA;;AAGzC,oCAAM,GAAG,QAAQ,CAAC,KAAD,CAAjB;AAHyC;AAAA;;AAAA;AAAA,mCAIlC,gBAAO,SAAP,CAAiB,UAAU,CAAC,EAA5B,CAJkC;AAAA;AAAA;AAAA;;AAAA;AAKhC,qCAAM,KAAK,QAAL,CAAc,UAAU,CAAC,EAAzB,EAA6B,KAAK,YAAL,EAA7B,CAAN;;AALgC;AAKzC,oCALyC;;AAAA;AAQ7C,kCAAI,MAAM,KAAK,IAAf,EAAqB;AACjB,sCAAM,GAAG,IAAI,IAAJ,EAAT;AACH;;AACD,kCAAI,CAAC,UAAU,CAAC,OAAhB,EAAyB;AACrB,0CAAU,CAAC,OAAX,GAAqB,CAArB;AACH;;AAED,sCAAQ,CAAC,KAAD,CAAR,GAAkB,MAAM,CAAC,MAAP,CAAc,MAAd,EAAsB,UAAtB,CAAlB;;AAEA,mCAAK,eAAL,CAAqB,QAAQ,CAAC,KAAD,CAA7B;;AACA,mCAAK,iBAAL,CAAuB,QAAQ,CAAC,KAAD,CAA/B,EAAwC,gBAAxC,EAA0D,YAA1D;;AACA,qCAAO;;AAnBsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAhB;AAAA,mBAAZ,CAArB;AAqBH,iBAtBD,E,CAuBA;;;AACA,uBAAM,OAAO,CAAC,GAAR,CAAY,eAAZ,CAAN;;;;AACA,uBAAM,OAAO,CAAC,GAAR,CAAY,YAAZ,CAAN;;;AACA,oBAAI,CAAC,OAAL,EAAc;AACV,0BAAQ,GAAI,QAAQ,CAAC,MAAT,GAAkB,CAAnB,GAAwB,QAAQ,CAAC,CAAD,CAAhC,GAAsC,IAAjD;AACH;;kDACM,Q;;;;;;;;;AACV;;;WAEO,2BAAyB,MAAzB,EAAiC,gBAAjC,EAAmD,YAAnD,EAA+D;AACnE,UAAI,SAAS,GAAG,KAAK,sBAAL,EAAhB;AACA,YAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,sBAAY,EAAG;AAC1C,YAAI,MAAM,GAAG,MAAM,CAAC,YAAD,CAAnB;;AACA,YAAI,OAAO,MAAP,KAAkB,QAAlB,IAA+B,KAAK,CAAC,OAAN,CAAc,MAAd,KAAyB,MAAM,CAAC,MAAP,IAAiB,CAA1C,IAA+C,OAAO,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAvG,EAAkH;AAC9G,cAAI,gBAAgB,KAAK,IAAzB,EAA+B;AAC3B,gBAAI,WAAW,GAAG,IAAlB;;AACA,gBAAI,KAAK,CAAC,OAAN,CAAc,MAAd,CAAJ,EAA2B;AACvB,yBAAW,GAAG,sCAAa,QAAb,CAAsB,SAAS,CAAC,YAAD,CAAT,CAAwB,MAA9C,EAAsD,SAAtD,CAAgE,MAAhE,CAAd;AACH,aAFD,MAEO;AACH,yBAAW,GAAG,sCAAa,QAAb,CAAsB,SAAS,CAAC,YAAD,CAAT,CAAwB,MAA9C,EAAsD,QAAtD,CAA+D,MAA/D,CAAd;AACH;;AACD,wBAAY,CAAC,IAAb,CAAkB,WAAW,CAAC,IAAZ,CAAiB,eAAK,EAAG;AACvC,oBAAM,CAAC,YAAD,CAAN,GAAuB,KAAvB;AACH,aAFiB,CAAlB;AAIH,WAXD,MAWO,IAAI,gBAAgB,KAAK,KAAzB,EAAgC;AACnC,gBAAI,SAAS,CAAC,YAAD,CAAT,CAAwB,IAAxB,KAAiC,cAAjC,IAAmD,SAAS,CAAC,YAAD,CAAT,CAAwB,IAAxB,KAAiC,aAAxF,EAAuG;AACnG,oBAAM,CAAC,YAAD,CAAN,GAAuB,EAAvB;AACH,aAFD,MAEO;AACH,oBAAM,CAAC,YAAD,CAAN,GAAuB,IAAvB;AACH;AACJ;AACJ;AACJ,OAtBD;AAuBH;;;WAEO,yBAAuB,MAAvB,EAA6B;AACjC,UAAI,gBAAgB,GAAG,KAAK,mBAAL,EAAvB;AACA,UAAI,OAAO,GAAE,gBAAgB,CAAC,SAAD,CAA7B;AAEA,YAAM,CAAC,IAAP,CAAY,OAAZ,EAAqB,OAArB,CAA6B,oBAAU,EAAG;AACtC,YAAI,OAAO,CAAC,UAAD,CAAP,CAAoB,UAAxB,EAAmC;AAC/B,gBAAM,CAAC,UAAD,CAAN,GAAqB,sBAAU,UAAV,CAAqB,MAAM,CAAC,UAAD,CAA3B,CAArB;AACH;;AACD,YAAI,OAAO,CAAC,UAAD,CAAP,CAAoB,QAAxB,EAAiC;AAC7B,gBAAM,CAAC,UAAD,CAAN,GAAqB,sBAAU,QAAV,CAAmB,MAAM,CAAC,UAAD,CAAzB,CAArB;AACH;AACJ,OAPD;AASH;;;;EAvIqC,qC;;AAA1C;AA0IA,oBAAoB,CAAC,aAArB,GAAqC,IAArC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrJA;;AACA;;AACA;;IAIa,U;;;;;AAAb;AAAA;;AAAA;;;AAIc,wBAAuB,IAAvB;AACA,0BAAyB,IAAzB;AALd;AAuCC;;;;WAzBG,sBAAa,UAAb,EAAwB;AACpB,gBAAU,GAAG,gBAAO,OAAP,CAAe,UAAf,EAA2B,IAA3B,CAAb;;AACA,UAAI,CAAC,KAAK,GAAL,CAAS,UAAT,CAAoB,MAApB,CAAD,IAAgC,CAAC,KAAK,GAAL,CAAS,UAAT,CAAoB,IAApB,CAAjC,IAA8D,CAAC,KAAK,GAAL,CAAS,UAAT,CAAoB,MAApB,CAAnE,EAAgG;AAC5F,YAAI,IAAI,GAAG,UAAU,CAAC,WAAX,GAAyB,KAAK,GAAzC;;AACA,YAAI,UAAJ,EAAgB;AACZ,cAAI,IAAI,QAAQ,IAAI,IAAJ,CAAS,KAAK,SAAd,EAAyB,OAAzB,EAAhB;AACH;;AACD,eAAO,IAAP;AACH;;AACD,aAAO,KAAK,GAAZ;AACH;;;WAED,kBAAM;AACF,UAAI,MAAM,CAAC,QAAP,KAAoB,SAApB,IAAiC,KAAK,WAAtC,IAAqD,KAAK,aAA1D,IAA2E,gBAAO,SAAP,CAAiB,KAAK,EAAtB,CAA3E,IAAwG,CAAC,KAAK,GAAL,CAAS,UAAT,CAAoB,MAApB,CAAzG,IAAwI,CAAC,KAAK,GAAL,CAAS,UAAT,CAAoB,MAApB,CAA7I,EAA0K;AACtK,eAAO,oCAAoC,KAAK,GAAhD;AACH,OAFD,MAEO;AACH,eAAO,KAAK,YAAL,EAAP;AACH;AACJ;;;WAED,oBAAQ;AACJ,aAAO,CAAC,IAAR,CAAa,yFAAb;AACA,aAAO,KAAK,MAAL,EAAP;AACH;;;WA9BD,gCAA2B;AACvB,UAAI,OAAO,6EAAX;;AACA,aAAO,CAAC,KAAD,CAAP,GAAiB,4BAAa,KAAb,CAAmB,UAApC;AACA,aAAO,CAAC,aAAD,CAAP,GAAyB;AAAC,YAAI,EAAE,4BAAa,KAAb,CAAmB,OAA1B;AAAmC,eAAO,EAAE;AAA5C,OAAzB;AACA,aAAO,OAAP;AACH;;;;EAZ2B,qC;;AAAhC;AAEW,yBAAc,IAAd;AAuCX,UAAU,CAAC,WAAX,GAAyB,YAAzB;AACA,4BAAa,QAAb,CAAsB,UAAtB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDA;;AACA;;AACA;;IAEa,I;;;;;AAQT;AAAA;;AAAA;;AACI;AACA,UAAK,IAAL,GAAY,IAAZ;AACA,UAAK,WAAL,GAAmB,IAAnB;AACA,UAAK,QAAL,GAAgB,IAAhB;AACA,UAAK,OAAL,GAAe,IAAf;AACA,UAAK,QAAL,GAAgB,IAAhB;AANJ;AAOC;;;;WAED,gCAA2B;AACvB,UAAI,OAAO,uEAAX;;AACA,aAAO,CAAC,MAAD,CAAP,GAAkB;AAAC,YAAI,EAAE,sCAAa,KAAb,CAAmB;AAA1B,OAAlB;AACA,aAAO,CAAC,aAAD,CAAP,GAAyB;AAAC,YAAI,EAAE,sCAAa,KAAb,CAAmB;AAA1B,OAAzB;AACA,aAAO,OAAP;AACH;;;WAED,kCAA6B;AACzB,UAAI,SAAS,yEAAb;;AACA,eAAS,CAAC,UAAD,CAAT,GAAwB;AACpB,cAAM,EAAE,gBAAO,aAAP,EADY;AAEpB,YAAI,EAAE,cAFc;AAGpB,iBAAS,EAAE;AACP,cAAI,EAAE;AADC,SAHS;AAMpB,eAAO,EAAE;AANW,OAAxB;AAQA,eAAS,CAAC,SAAD,CAAT,GAAuB;AACnB,cAAM,EAAE,IAAI,CAAC,aAAL,EADW;AAEnB,YAAI,EAAE,cAFa;AAGnB,iBAAS,EAAE;AACP,cAAI,EAAE,cADC;AAEP,oBAAU,EAAE;AACR,gBAAI,EAAE,SADE;AAER,gCAAoB,EAAE;AAFd,WAFL;AAMP,2BAAiB,EAAE;AACf,gBAAI,EAAE,UADS;AAEf,gCAAoB,EAAE;AAFP;AANZ,SAHQ;AAcnB,eAAO,EAAE;AAdU,OAAvB;AAgBA,eAAS,CAAC,UAAD,CAAT,GAAwB;AACpB,cAAM,EAAE,IAAI,CAAC,aAAL,EADY;AAEpB,YAAI,EAAE,cAFc;AAGpB,iBAAS,EAAE;AACP,cAAI,EAAE,cADC;AAEP,oBAAU,EAAE;AACR,gBAAI,EAAE,UADE;AAER,gCAAoB,EAAE;AAFd,WAFL;AAMP,2BAAiB,EAAE;AACf,gBAAI,EAAE,SADS;AAEf,gCAAoB,EAAE;AAFP;AANZ,SAHS;AAcpB,eAAO,EAAE;AAdW,OAAxB;AAgBA,aAAO,SAAP;AACH;;;;EAnEqB,0B;;AAA1B;AAqEA,IAAI,CAAC,aAAL,GAAqB,KAArB;AACA,sCAAa,QAAb,CAAsB,IAAtB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1EA;;AACA;;IAEa,uB;;;;;AACT,mCAAY,IAAZ,EAAmB,MAAnB,EAA4B,IAA5B,EAAmC,OAAnC,EAA6C,KAA7C,EAAqD,IAArD,EAA0D;AAAA;;AAAA,6BAChD,IADgD,EAC1C,MAD0C,EAClC,YAAK;AACrB,UAAI,6BAAoB,IAAxB,EAA8B;AAC1B,YAAI,KAAK,CAAC,OAAN,CAAc,IAAd,KAAuB,IAAI,CAAC,MAAL,IAAe,CAA1C,EAA6C;AACzC,uCAAoB,IAApB,CAAyB,SAAzB,CAAmC,IAAI,CAAC,CAAD,CAAvC,EAA4C,IAAI,CAAC,CAAD,CAAhD;AACH,SAFD,MAEO;AACH,uCAAoB,IAApB,CAAyB,SAAzB,CAAmC,IAAnC;AACH;AACJ;AACJ,KATqD,EASnD,OATmD,EAS1C,KAT0C,EASnC,IATmC;AAUzD;;;EAXwC,+B;;AAA7C,0D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;;AACA;;IAIa,W;AAIT,uBAAY,SAAZ,EAA0B;AAAA;;AACtB,SAAK,SAAL,GAAiB,SAAjB;AACH;;;;WAEK,wBAAY;;;;;;;;iDACP,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAQ;AACvB,uBAAI,CAAC,SAAL,CAAe,YAAf,CAA4B,gBAAM,EAAG;AACjC,uBAAG,CAAC,IAAI,qCAAJ,CAAsB,MAAtB,CAAD,CAAH;AACH,mBAFD;AAGH,iBAJM,C;;;;;;;;;AAKV;;;WAED,cAAkB,IAAlB,EAAwB,OAAxB,EAAgC;;;;;;AAC5B,uBAAO,GAAG,gBAAO,OAAP,CAAe,OAAf,EAAwB;AAAC,wBAAM,EAAE,IAAT;AAAe,2BAAS,EAAE;AAA1B,iBAAxB,CAAV;kDAEO,IAAI,OAAJ,CAAY,UAAC,CAAD,EAAI,GAAJ,EAAW;AAC1B,wBAAM,CAAC,2BAAD,CAAN,CAAoC,iCAApC,EAAuE,kBAAQ,EAAG;AAC9E,4BAAQ,CAAC,OAAT,CAAiB,IAAjB,EAAuB,OAAvB,EAAgC,mBAAS,EAAG;AACxC,uBAAC,CAAC,IAAI,WAAJ,CAAgB,SAAhB,CAAD,CAAD;AACH,qBAFD,EAEG,GAFH;AAGH,mBAJD,EAIG,GAJH;AAKH,iBANM,C;;;;;;;;;AAOV;;;;;;AA1BL,kC;;;;;;;;;;;;;;;;;;;;;;;ACL+C;AACK;AACS;AAC7D;AACA;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA,6EAA6E,mDAAY,mDAAmD,gDAAS;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACpJsE;AACtE;AACA;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACvG0D;AACZ;AACM;AACA;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,yCAAoB;AACxB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B,+EAA+E,mBAAmB,EAAE;AACpG,aAAa;AACb,SAAS;AACT;AACA;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C,GAAS;AAC5B,gBAAgB,mBAAO,CAAC,GAAc;AACtC,iCAAiC,mBAAO,CAAC,GAA2B;AACpE,cAAc,mBAAO,CAAC,GAAY;AAClC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C,EAAE,mBAAO,CAAC,EAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,kCAAkC;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA,uBAAuB,mBAAO,CAAC,GAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E,mBAAO,CAAC,GAAsB;AAC9B,mBAAO,CAAC,GAAgB;AACxB,UAAU,mBAAO,CAAC,EAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD,mBAAO,CAAC,GAAgB;AACxE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;AC7RY;AACb;AACA,gBAAgB,mBAAO,CAAC,EAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACjBA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,2BAA2B,mBAAO,CAAC,GAA2B;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXa;AACb,SAAS,mBAAO,CAAC,EAAc;AAC/B,aAAa,mBAAO,CAAC,EAAkB;AACvC,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,kBAAkB,mBAAO,CAAC,GAAgB;AAC1C,WAAW,mBAAO,CAAC,GAAc;AACjC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACpFA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,WAAW,mBAAO,CAAC,EAAgB;AACnC,WAAW,mBAAO,CAAC,GAAgB;AACnC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,EAAW;AACjC;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,aAAa,mBAAO,CAAC,GAAkB;AACvC,cAAc,mBAAO,CAAC,EAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAgB;AACtC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,aAAa,mBAAO,CAAC,GAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA,6BAA6B;AAC7B,uCAAuC;;;;;;;ACDvC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;;AAEG;;;IACU,U;AAiBT;;;AAGG;AA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,MAAD,CAAjC,GAA4C,KAAnD;AACH,OAFM,CAAP;AAGH;;;;;;AAnLL;AAsLA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;AC7LA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACtIA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACnQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AAC1B;AACwB;AACH;AACd;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AACJ;AACxB;AACgB;AAChB;AAC7D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,0FAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yGAA4B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH;AACrH;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW;AAC7D;AACA;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kEAAY;AACoB;;AAElC;;;;;;;;AC3Ya;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB,kBAAkB;AAC5D,SAAS;AACT;AACA;AACA;AACA,qC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AAEA;;AAEG;;;IACU,W;AAoBT;;AAEG;AACH;AAAA;;AACI,SAAK,OAAL,GAAe,KAAf;AACH;AAhBD;;;AAG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AAA;AAAA;AAAA;AAA0D;AACqB;AACX;AACU;AACc;AAC5F;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4GAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACQ;;AAE9B;;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC4D;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2EAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8GAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,4GAAyB;AACQ;;AAEnC;;;;;;;;ACxEA;AAAA;AAAA;AAAA;AAA8C;AACC;AACQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,uBAAuB,EAAE;AAChH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,+CAA+C,QAAQ,uEAAW,iEAAiE,EAAE;AAC/L;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,sDAAsD,QAAQ,uEAAW,iEAAiE,EAAE;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0EAA0E,eAAe,uEAAW,8FAA8F,EAAE;AACpM;AACA,2EAA2E,yDAAyD,EAAE;AACtI,aAAa;AACb;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,mCAAmC,EAAE,eAAe;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,wBAAwB,EAAE;AAC7I;AACA,sCAAsC,uEAAW;AACjD;AACA;AACA;AACA;AACA,qEAAqE,uGAAuG,EAAE;AAC9K;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mCAAmC,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA,kBAAkB;AAClB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAQ;AAC5B;AACA;AACA;AACA,8EAA8E,mBAAmB,EAAE;AACnG;AACA;AACA,uGAAuG,mBAAmB,EAAE;AAC5H,uHAAuH;AACvH;AACA,sBAAsB;AACtB;AACA,yFAAyF,mBAAmB,EAAE;AAC9G;AACA;AACA,kGAAkG,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA,iBAAiB,IAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,iFAAiF,EAAE;AAC1I;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA,wDAAwD,uEAAW,kEAAkE;AACrI;AACA;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAAE;AAC7G;AACA;AACA,sFAAsF,mBAAmB,EAAE;AAC3G;AACA;AACA;AACA,0EAA0E,mBAAmB,EAAE;AAC/F;AACA;AACA,iGAAiG,mBAAmB,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA,mGAAmG,uEAAW;AAC9G;AACA;AACA,mGAAmG,uEAAW;AAC9G;AACA,aAAa;AACb;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAAE;AAC7G;AACA;AACA,sFAAsF,mBAAmB,EAAE;AAC3G;AACA;AACA;AACA,0EAA0E,mBAAmB,EAAE;AAC/F;AACA;AACA,iGAAiG,mBAAmB,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA,CAAC;AAC2C;;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A7JhVA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,gD;;;;;;;;;;;;;;;;A8JPa;;AAEb,mBAAO,CAAC,GAAc;;AAEtB,qCAAqC,mBAAO,CAAC,GAA2B;;AAExE,sCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;;AAEA,yC;;;;;;;ACZa;;AAEb,mBAAO,CAAC,GAAa;;AAErB,mBAAO,CAAC,GAA2B;;AAEnC,mBAAO,CAAC,GAA2B;;AAEnC,mBAAO,CAAC,GAA6B;;AAErC,mBAAO,CAAC,GAA2B;;AAEnC,mBAAO,CAAC,GAA8B;;AAEtC,mBAAO,CAAC,GAA4B;;AAEpC,mBAAO,CAAC,GAAkC;;AAE1C,mBAAO,CAAC,GAAgD;;AAExD,mBAAO,CAAC,GAA0B;;AAElC,mBAAO,CAAC,GAA2B;;AAEnC,mBAAO,CAAC,GAA4B;;AAEpC,mBAAO,CAAC,GAAa;;AAErB,mBAAO,CAAC,GAA6B,E;;;;;;AC5BrC,mBAAO,CAAC,GAAuB;AAC/B,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAAuC;AAC/C,mBAAO,CAAC,GAAyC;AACjD,mBAAO,CAAC,GAAmD;AAC3D,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA8C;AACtD,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA0C;AAClD,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAqC;AAC7C,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAAsC;AAC9C,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAAgC;AACxC,mBAAO,CAAC,GAAoC;AAC5C,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAAuC;AAC/C,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAAuC;AAC/C,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAgC;AACxC,mBAAO,CAAC,GAAqC;AAC7C,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAgC;AACxC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAgC;AACxC,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAAyB;AACjC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAAyB;AACjC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAA0B;AAClC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAAoC;AAC5C,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAA2B;AACnC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAA+B;AACvC,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAA6B;AACrC,mBAAO,CAAC,GAAwB;AAChC,mBAAO,CAAC,GAAoB;AAC5B,mBAAO,CAAC,GAAoB;AAC5B,mBAAO,CAAC,GAAyB;AACjC,mBAAO,CAAC,GAAyB;AACjC,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAAgC;AACxC,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAA0C;AAClD,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAAmC;AAC3C,mBAAO,CAAC,GAAoC;AAC5C,mBAAO,CAAC,GAAoC;AAC5C,mBAAO,CAAC,GAA8B;AACtC,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAAwC;AAChD,mBAAO,CAAC,GAAkC;AAC1C,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAoD;AAC5D,mBAAO,CAAC,GAAyC;AACjD,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAsC;AAC9C,mBAAO,CAAC,GAAiC;AACzC,mBAAO,CAAC,GAA2C;AACnD,mBAAO,CAAC,GAA4B;AACpC,mBAAO,CAAC,GAAyC;AACjD,iBAAiB,mBAAO,CAAC,EAAkB;;;;;;;;AC1I9B;AACb;AACA,aAAa,mBAAO,CAAC,EAAW;AAChC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,CAAW;AACjC,eAAe,mBAAO,CAAC,EAAa;AACpC,WAAW,mBAAO,CAAC,EAAS;AAC5B,aAAa,mBAAO,CAAC,EAAU;AAC/B,aAAa,mBAAO,CAAC,GAAW;AAChC,qBAAqB,mBAAO,CAAC,GAAsB;AACnD,UAAU,mBAAO,CAAC,EAAQ;AAC1B,UAAU,mBAAO,CAAC,EAAQ;AAC1B,aAAa,mBAAO,CAAC,GAAY;AACjC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,eAAe,mBAAO,CAAC,GAAc;AACrC,cAAc,mBAAO,CAAC,GAAa;AACnC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,cAAc,mBAAO,CAAC,EAAkB;AACxC,cAAc,mBAAO,CAAC,GAAoB;AAC1C,YAAY,mBAAO,CAAC,EAAgB;AACpC,YAAY,mBAAO,CAAC,GAAgB;AACpC,UAAU,mBAAO,CAAC,EAAc;AAChC,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE,mBAAO,CAAC,EAAgB;AAC1B,EAAE,mBAAO,CAAC,GAAe;AACzB;;AAEA,sBAAsB,mBAAO,CAAC,EAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BAA0B,gBAAgB;AAC1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,8CAA8C,YAAY,EAAE;;AAE5D;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO,QAAQ,iCAAiC;AACpG,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AAC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yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,iBAAiB,mBAAO,CAAC,GAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,iBAAiB,mBAAO,CAAC,GAAyB;;AAElD;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC9BY;;AAEb,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,yBAAyB,mBAAO,CAAC,GAAwB;AACzD,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAyB;AACtD,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yBAAyB,EAAE;;AAEhE;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACrID,aAAa,mBAAO,CAAC,EAAW;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC;AACA;AACA;AACA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;ACpEA;AACA;AACA,YAAY;AACZ,GAAG;AACH,YAAY;AACZ;AACA;;;;;;;;ACNa;AACb,aAAa,mBAAO,CAAC,GAAsB;AAC3C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AAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,SAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3uBA,mBAAO,CAAC,GAAuB;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;;;;;;;ACD3C;AACA,cAAc,mBAAO,CAAC,GAAW;;AAEjC,oBAAoB,SAAS,mBAAO,CAAC,GAAW,GAAG;;;;;;;ACHnD,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;AC7DA;AACA,gBAAgB,mBAAO,CAAC,GAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,GAAc;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;AAC3C,iBAAiB,mBAAO,CAAC,GAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA,eAAe,mBAAO,CAAC,GAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,GAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;ACfA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA,kBAAkB,mBAAO,CAAC,GAAgB,MAAM,mBAAO,CAAC,GAAU;AAClE,+BAA+B,mBAAO,CAAC,GAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;ACFD,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,GAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACrBa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,sC;;;;;;;AClFa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,EAAS;AACnC,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,mEAAmE;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2C;;;;;;ACnNA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mDAAmD;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,6BAA6B,gBAAgB,kBAAkB;AAC/D;AACA;AACA;AACA;AACA,+BAA+B,4CAA4C;AAC3E;AACA,mCAAmC,wBAAwB,kBAAkB,EAAE;AAC/E,mCAAmC,yBAAyB,EAAE,EAAE;AAChE;AACA,uCAAuC,8BAA8B;AACrE,uCAAuC,mBAAmB,EAAE;AAC5D;AACA,uCAAuC,qDAAqD;AAC5F,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,aAAa;AAChF,qEAAqE,aAAa;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B,EAAE;AAClE;AACA;AACA,iBAAiB;AACjB,oDAAoD,+CAA+C;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0DAA0D;AAC5G,oDAAoD,4DAA4D;AAChH,qDAAqD,4DAA4D;AACjH,2DAA2D,uBAAuB;AAClF,6DAA6D,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB,EAAE;AAC/D;AACA;AACA,iBAAiB;AACjB,sDAAsD,6BAA6B;AACnF,sDAAsD,0CAA0C;AAChG,yDAAyD,gCAAgC;AACzF,mDAAmD,mBAAmB;AACtE,kDAAkD,yBAAyB;AAC3E,oDAAoD,2BAA2B;AAC/E,qDAAqD,4BAA4B;AACjF,2DAA2D,oBAAoB;AAC/E,6DAA6D,oBAAoB;AACjF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B;AACtF;AACA;AACA;AACA;AACA,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;;;;;;;;AC1mC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC7FY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;ACpFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACpDA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,GAAI;AACpC;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;ACpQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACjKa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;AClHa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+C;;;;;;;AC7Ba;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kC;;;;;;;AChCa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,GAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,mDAAmD;AAClF;AACA,SAAS;AACT;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,iEAAiE;AAChG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,iEAAiE;AACjG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;ACxEa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC;AAClC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;ACtEa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAkB;AAC3C,qBAAqB,mBAAO,CAAC,EAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uC;;;;;;;ACpIa;AACb;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,SAAS,mBAAO,CAAC,GAAuB;;;;;;;;ACL3B;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D,oBAAoB,mBAAO,CAAC,EAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;;AACA,IAAM,iBAAiB,GAAG,mBAAO,CAAE,GAAF,CAAjC;AAEA;;AAEG;;;IACU,a;;;;;AAET;;;;;AAKG;AACH,yBAAY,WAAZ,EAAyB,IAAzB,EAA6B;AAAA;;AAAA,6BACnB,WADmB,EACN,IADM,EACA,iBADA,EACmB,eADnB;AAE5B;;;EAV8B,2B;;AAAnC,sC;;;;;;ACNA,iBAAiB,qBAAuB,yB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;IAEa,Y;;;;;AAIT,wBAAY,IAAZ,EAAgB;AAAA;;AAAA;;AACZ,8BAAM,SAAN,EAAiB,QAAQ,CAAC,aAAT,CAAuB,MAAvB,CAAjB;AAEA;;AACA,UAAK,KAAL,GAAa,IAAb;AAJY;AAKf;;;;WAED,kBAAS,YAAT,EAAuB,KAAvB,EAA4B;AACxB,aAAO,KAAK,KAAL,CAAW,QAAX,CAAoB,YAApB,EAAkC,KAAlC,CAAP;AACH;;;WAED,sBAAa,IAAb,EAAmB,KAAnB,EAAwB,CACpB;AACA;AACH;;;WAED,uBAAc,UAAd,EAAwB,CACpB;AACA;AACH;;;WAED,yBAAa;AACT,aAAO,KAAK,KAAL,CAAW,aAAX,EAAP;AACH;;;WAEK,6BAAiB;;;;;;iDACZ,KAAK,KAAL,CAAW,iBAAX,E;;;;;;;;;AACV;;;WAEK,+BAAmB;;;;;;kDACd,KAAK,KAAL,CAAW,mBAAX,E;;;;;;;;;AACV;;;WAED,wBAAY;AACR,aAAO,KAAK,KAAL,CAAW,YAAX,EAAP;AACH;;;WAED,mBAAU,IAAV,EAAc,CACV;AACA;AACH;;;WAED,mBAAU,IAAV,EAAgB,IAAhB,EAAqB;AACjB,aAAO,KAAK,KAAL,CAAW,SAAX,CAAqB,IAArB,EAA2B,IAA3B,CAAP;AACH;;;WAED,4BAAmB,IAAnB,EAAyB,IAAzB,EAAgC,MAAhC,EAAuC;AACnC,aAAO,KAAK,KAAL,CAAW,kBAAX,CAA8B,IAA9B,EAAoC,IAApC,EAA0C,MAA1C,CAAP;AACH;;;WAED,gBAAO,MAAP,EAAc;AACV,aAAO,KAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB,CAAP;AACH;;;WAED,kBAAM;AACF,aAAO,KAAK,KAAL,CAAW,MAAX,EAAP;AACH;;;WAED,4BAAgB;AACZ,aAAO,KAAK,KAAL,CAAW,gBAAX,EAAP;AACH;;;WAED,mBAAU,MAAV,EAAgB;AACZ,aAAO,KAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAAP;AACH;;;WAED,6BAAiB;AACb,aAAO,KAAK,KAAL,CAAW,iBAAX,EAAP;AACH;;;WAED,qBAAY,SAAZ,EAAuB,QAAvB,EAA+B;AAC3B,aAAO,KAAK,KAAL,CAAW,WAAX,CAAuB,SAAvB,EAAkC,QAAlC,CAAP;AACH;;;WAED,gBAAO,KAAP,EAAc,GAAd,EAAmB,SAAnB,EAA4B;AACxB,aAAO,KAAK,KAAL,CAAW,MAAX,CAAkB,KAAlB,EAAyB,GAAzB,EAA8B,SAA9B,CAAP;AACH;;;WAED,4BAAmB,eAAnB,EAAkC;AAC9B,aAAO,KAAK,KAAL,CAAW,kBAAX,CAA8B,eAA9B,CAAP;AACH;;;WAED,0BAAc;AACV,aAAO,KAAK,KAAL,CAAW,cAAX,EAAP;AACH;;;WAED,oBAAQ;AACJ,aAAO,KAAK,KAAL,CAAW,QAAX,EAAP;AACH;;;WAED,oBAAQ;AACJ,aAAO,KAAK,KAAL,CAAW,QAAX,EAAP;AACH;;;WAED,qBAAS;AACL,aAAO,KAAK,KAAL,CAAW,SAAX,EAAP;AACH;;;WAED,wBAAY;AACR,aAAO,KAAK,KAAL,CAAW,YAAX,EAAP;AACH;;;;EAxG6B,2B;;AAAlC,oC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA,IAAM,QAAQ,GAAG,mBAAO,CAAC,GAAD,CAAxB;;IAEa,sB;;;;;AAmBT,kCAAY,IAAZ,EAAkB,IAAlB,EAAwB,QAAxB,EAA2D,KAA3D,EAA2E,EAA3E,EAAsF;AAAA;;AAAA;;AAClF,+BAAM,IAAN,EAAY,QAAZ;AAnBI,qBAAoC;AACxC,OAAC,EAAE,CADqC;AAExC,OAAC,EAAE,CAFqC;AAGxC,aAAO,EAAE,KAH+B;AAIxC,aAAO,EAAE;AAJ+B,KAApC;AAOA,kBAAgB,EAAhB;AAGA,oBAAe;AAAC,OAAC,EAAE,CAAJ;AAAO,OAAC,EAAE;AAAV,KAAf;AAGA,qBAAmC,EAAnC;AACA,kBAAwD,QAAxD;AACA,wBAAsB,IAAtB;AACE,2BAA0B,IAA1B;AAIN,UAAK,QAAL,GAAgB,MAAM,CAAC,MAAP,CAAc;AAAC,aAAO,EAAE,KAAV;AAAiB,aAAO,EAAE;AAA1B,KAAd,EAAiD,QAAjD,CAAhB;AAEA,UAAK,KAAL,GAAa,gBAAO,OAAP,CAAe,KAAf,EAAsB,QAAtB,CAAb;;AACA,QAAI,EAAJ,EAAQ;AACJ,YAAK,EAAL,GAAU,YAAY,EAAtB;AACH;;AAED,UAAK,YAAL,GAAoB,OAAO,CAAC,GAAR,CAAY,CAAC,MAAK,YAAN,EAAoB,4BAAa,WAAb,GAA2B,IAA3B,CAAgC,IAAhC,CAApB,CAAZ,EAAwE,IAAxE,CAA6E,aAAG,EAAG;AACnG,SAAG,CAAC,CAAD,CAAH,CAAO,aAAP,CAAqB,aAArB,EAAoC,WAApC,CAAgD,GAAG,CAAC,CAAD,CAAnD;AACA,kCAAa,mBAAb,CAAiC,GAAG,CAAC,CAAD,CAApC;AACA,YAAK,KAAL,GAAa,GAAG,CAAC,CAAD,CAAhB;AACA,aAAO,GAAG,CAAC,CAAD,CAAV;AACH,KALmB,EAKjB,KALiB,CAKX,WAAC;AAAA,aAAI,OAAO,CAAC,KAAR,CAAc,CAAd,CAAJ;AAAA,KALU,CAApB;AATkF;AAerF;;;;WAED,kBAAS,KAAT,EAAc;AACV,UAAI,KAAK,aAAT,EAAwB;AACpB,gCAAW,iBAAX,CAA6B,KAAK,aAAlC;;AACA,aAAK,aAAL,CAAmB,WAAnB,CAA+B,KAAK,cAAL,GAAsB,wBAAW,yBAAX,CAAqC,KAArC,CAAtB,GAAoE,QAAQ,CAAC,cAAT,CAAwB,KAAxB,CAAnG;AACH;;AACD,WAAK,KAAL,GAAa,KAAb;AACH;;;WAED,wBAAY;AACR,UAAI,aAAa,GAAG,MAAM,CAAC,gBAAP,CAAwB,KAAK,UAA7B,CAApB;AACA,UAAI,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,gBAAd,CAA+B,OAA/B,CAAD,CAAtB;AACA,UAAI,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,gBAAd,CAA+B,QAA/B,CAAD,CAAvB;;AAEA,UAAI,KAAK,CAAC,KAAD,CAAT,EAAiB;AACb,aAAK,GAAG,UAAU,CAAC,KAAK,UAAL,CAAgB,KAAhB,CAAsB,KAAvB,CAAlB;AACH;;AACD,UAAI,KAAK,CAAC,MAAD,CAAT,EAAkB;AACd,cAAM,GAAG,UAAU,CAAC,KAAK,UAAL,CAAgB,KAAhB,CAAsB,MAAvB,CAAnB;AACH;;AAED,aAAO;AAAC,SAAC,EAAE,IAAI,CAAC,IAAL,CAAU,KAAV,IAAmB,KAAK,OAAL,CAAa,CAApC;AAAuC,SAAC,EAAE,IAAI,CAAC,IAAL,CAAU,MAAV,IAAoB,KAAK,OAAL,CAAa;AAA3E,OAAP;AACH;;;WAED,sBAAa,CAAb,EAAgB,CAAhB,EAAiB;AACb,OAAC,IAAI,KAAK,OAAL,CAAa,CAAlB;AACA,OAAC,IAAI,KAAK,OAAL,CAAa,CAAlB;AAEA,WAAK,UAAL,CAAgB,KAAhB,CAAsB,KAAtB,GAA8B,CAAC,GAAG,IAAlC;AACA,WAAK,UAAL,CAAgB,KAAhB,CAAsB,MAAtB,GAA+B,CAAC,GAAG,IAAnC;AAEA,WAAK,QAAL,CAAc,SAAd,GAA0B;AACtB,SAAC,EAAE,CADmB;AAEtB,SAAC,EAAE;AAFmB,OAA1B;AAIA,WAAK,IAAL;AACH;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,UAAL,GAAkB,KAAK,MAAL,CAAY,mBAAZ,CAAlB;;AAEA,oBAAI,KAAK,QAAL,CAAc,KAAd,IAAuB,KAAK,QAAL,CAAc,MAAzC,EAAiD;AAC7C,uBAAK,UAAL,CAAgB,KAAhB,CAAsB,KAAtB,GAA8B,KAAK,QAAL,CAAc,KAAd,GAAsB,IAApD;AACA,uBAAK,UAAL,CAAgB,KAAhB,CAAsB,MAAtB,GAA+B,KAAK,QAAL,CAAc,MAAd,GAAuB,IAAtD;AACH;;AAED,qBAAK,OAAL,GAAe,KAAK,MAAL,CAAY,SAAZ,CAAf;AACA,qBAAK,aAAL,GAAqB,KAAK,MAAL,CAAY,QAAZ,CAArB;AAEA,qBAAK,eAAL,GAAuB;AACnB,mBAAC,EAAE,CACC,KAAK,OADN,EAEC,KAAK,MAAL,CAAY,qBAAZ,CAFD,EAGC,KAAK,MAAL,CAAY,sBAAZ,CAHD,CADgB;AAMnB,mBAAC,EAAE,CACC,KAAK,OADN,EAEC,KAAK,aAFN,EAGC,KAAK,MAAL,CAAY,oBAAZ,CAHD,EAIC,KAAK,MAAL,CAAY,uBAAZ,CAJD;AANgB,iBAAvB;;AAaA,uBAAM,KAAK,IAAL,EAAN;;;AAEA,qBAAK,0BAAL,G,CACA;;;AACA,qBAAK,QAAL,CAAc,KAAK,KAAnB;AAEA,qBAAK,YAAL;AAEM,+B,GAAkB,KAAK,MAAL,CAAY,gBAAZ,C;;AACxB,oBAAI,eAAJ,EAAqB;AACjB,iCAAe,CAAC,MAAhB;;AACA,uBAAK,aAAL,CAAmB,UAAnB,CAA8B,WAA9B,CAA0C,eAA1C;;AAEA,iCAAe,CAAC,gBAAhB,CAAiC,eAAjC,EAAkD,OAAlD,CAA0D,gBAAM,EAAG;AAC/D,0BAAM,CAAC,gBAAP,CAAwB,OAAxB,EAAiC,WAAC,EAAG;AACjC,4BAAI,CAAC,aAAL,CAAmB,MAAM,CAAC,EAA1B,EAA8B,MAA9B,EAAsC,CAAtC;AACH,qBAFD;AAGH,mBAJD;AAKH;;iDAEM,G;;;;;;;;;AACV;;;WAEa,wBAAY;;;;;;;;;AAClB,2B,GAAc,I;;AAId,mC,GAAsB,SAAtB,mBAAsB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAY;AAClC,sBAAI,CAAC,CAAC,MAAF,CAAS,SAAT,CAAmB,QAAnB,CAA4B,eAA5B,CAAJ,EAAkD;AAC9C,qBAAC,CAAC,eAAF;AACA,+BAAW,GAAG;AAAC,uBAAC,EAAE,CAAJ;AAAO,uBAAC,EAAE;AAAV,qBAAd;AAEA,wBAAI,SAAS,GAAG,CAAC,CAAC,MAAF,CAAS,OAAT,CAAiB,WAAjB,EAA8B,KAA9B,CAAoC,GAApC,CAAhB;AACA,8BAAU,GAAG;AAAC,uBAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAD,CAAV,CAAZ;AAA4B,uBAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAD,CAAV;AAAvC,qBAAb;AAEA,6BAAS,GAAG,MAAI,CAAC,YAAL,EAAZ;AACH;AACJ,iB;;AAED,qBAAK,MAAL,CAAY,gBAAZ,EAA8B,IAA9B,EAAoC,OAApC,CAA4C,iBAAO,EAAG;AAClD,yBAAO,CAAC,gBAAR,CAAyB,WAAzB,EAAsC,UAAC,CAAD,EAAM;AACxC,uCAAmB,CAAC,CAAC,CAAC,OAAH,EAAY,CAAC,CAAC,OAAd,EAAuB,CAAvB,CAAnB;AACH,mBAFD;AAGH,iBAJD;AAMI,4B,GAAe,I;AACf,mB,GAAM,I;;AACN,iC,GAAoB,SAApB,iBAAoB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAY;AAChC,sBAAI,CAAC,CAAC,MAAF,KAAa,MAAI,CAAC,UAAlB,IAAgC,CAAC,CAAC,MAAF,CAAS,OAAT,CAAiB,QAAjB,MAA+B,MAAI,CAAC,aAAxE,EAAuF;AACnF,gCAAY,GAAG;AAAC,uBAAC,EAAE,CAAJ;AAAO,uBAAC,EAAE;AAAV,qBAAf;AACA,uBAAG,GAAG,MAAM,CAAC,MAAP,CAAc,EAAd,EAAkB,MAAI,CAAC,WAAL,EAAlB,CAAN,CAFmF,CAEtC;;AAC7C,0BAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,GAA1B,CAA8B,QAA9B;AACH;;AACD,wBAAI,CAAC,gBAAL;AACH,iB;;AAED,qBAAK,UAAL,CAAgB,gBAAhB,CAAiC,WAAjC,EAA8C,UAAC,CAAD,EAAM;AAChD,mCAAiB,CAAC,CAAC,CAAC,OAAH,EAAY,CAAC,CAAC,OAAd,EAAuB,CAAvB,CAAjB;AACH,iBAFD;;AAGA,qBAAK,UAAL,CAAgB,gBAAhB,CAAiC,YAAjC,EAA+C,UAAC,CAAD,EAAM;AACjD,sBAAI,CAAC,CAAC,OAAF,CAAU,MAAV,KAAqB,CAAzB,EAA4B;AACxB,qCAAiB,CAAC,CAAC,CAAC,OAAF,CAAU,CAAV,EAAa,OAAd,EAAuB,CAAC,CAAC,OAAF,CAAU,CAAV,EAAa,OAApC,EAA6C,CAA7C,CAAjB;AACH;AACJ,iBAJD;;AAMI,4B,GAAe,SAAf,YAAe,CAAC,CAAD,EAAI,CAAJ,EAAS;AACxB,sBAAI,WAAW,KAAK,IAApB,EAA0B;AACtB,wBAAI,eAAe,GAAG;AAClB,uBAAC,EAAE,UAAU,CAAC,CADI;AAElB,uBAAC,EAAE,UAAU,CAAC;AAFI,qBAAtB;AAKA,wBAAI,IAAI,GAAG;AACP,uBAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAjB,IAAuB,eAAe,CAAC,CADnC;AAEP,uBAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAjB,IAAuB,eAAe,CAAC;AAFnC,qBAAX;AAIA,6BAAS,GAAG;AAAC,uBAAC,EAAE,SAAS,CAAC,CAAV,GAAc,IAAI,CAAC,CAAvB;AAA0B,uBAAC,EAAE,SAAS,CAAC,CAAV,GAAc,IAAI,CAAC;AAAhD,qBAAZ;;AAEA,0BAAI,CAAC,YAAL,CAAkB,SAAS,CAAC,CAA5B,EAA+B,SAAS,CAAC,CAAzC;;AACA,wBAAM,aAAa,GAAG,MAAI,CAAC,YAAL,EAAtB;;AACA,wBAAI,SAAS,CAAC,CAAV,KAAgB,aAAa,CAAC,CAAlC,EAAqC;AACjC,qCAAe,CAAC,CAAhB,GAAoB,CAApB;AACH;;AACD,wBAAI,SAAS,CAAC,CAAV,KAAgB,aAAa,CAAC,CAAlC,EAAqC;AACjC,qCAAe,CAAC,CAAhB,GAAoB,CAApB;AACH;;AAED,0BAAI,CAAC,0BAAL,GArBsB,CAuBtB;;;AACA,wBAAI,QAAQ,GAAG;AAAC,uBAAC,EAAE,CAAJ;AAAO,uBAAC,EAAE;AAAV,qBAAf;;AACA,wBAAI,eAAe,CAAC,CAAhB,KAAsB,CAA1B,EAA6B;AACzB,0BAAI,MAAI,CAAC,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AACpC,gCAAQ,CAAC,CAAT,GAAa,IAAI,CAAC,CAAL,GAAS,eAAe,CAAC,CAAzB,GAA6B,CAA1C;AACH,uBAFD,MAEO,IAAI,eAAe,CAAC,CAAhB,IAAqB,MAAI,CAAC,QAAL,CAAc,OAAd,KAA0B,MAA1B,GAAmC,CAAnC,GAAuC,CAAC,CAA7D,IAAkE,CAAtE,EAAyE;AAC5E,gCAAQ,CAAC,CAAT,GAAa,IAAI,CAAC,CAAL,GAAS,eAAe,CAAC,CAAtC;AACH;AACJ;;AAED,wBAAI,eAAe,CAAC,CAAhB,KAAsB,CAA1B,EAA6B;AACzB,0BAAI,MAAI,CAAC,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AACpC,gCAAQ,CAAC,CAAT,GAAa,IAAI,CAAC,CAAL,GAAS,eAAe,CAAC,CAAzB,GAA6B,CAA1C;AACH,uBAFD,MAEO,IAAI,eAAe,CAAC,CAAhB,IAAqB,MAAI,CAAC,QAAL,CAAc,OAAd,KAA0B,KAA1B,GAAkC,CAAlC,GAAsC,CAAC,CAA5D,IAAiE,CAArE,EAAwE;AAC3E,gCAAQ,CAAC,CAAT,GAAa,IAAI,CAAC,CAAL,GAAS,eAAe,CAAC,CAAtC;AACH;AACJ;;AAED,0BAAI,CAAC,MAAL,CAAY,QAAQ,CAAC,CAArB,EAAwB,QAAQ,CAAC,CAAjC;;AAEA,+BAAW,GAAG;AAAC,uBAAC,EAAE,CAAJ;AAAO,uBAAC,EAAE;AAAV,qBAAd;AACH,mBA5CD,MA4CO,IAAI,YAAY,KAAK,IAArB,EAA2B;AAC9B,wBAAI,KAAI,GAAG;AACP,uBAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CADb;AAEP,uBAAC,EAAE,CAAC,GAAG,YAAY,CAAC;AAFb,qBAAX;AAIA,gCAAY,GAAG;AAAC,uBAAC,EAAD,CAAD;AAAI,uBAAC,EAAD;AAAJ,qBAAf,CAL8B,CAM9B;;AACA,0BAAI,CAAC,MAAL,CAAY,KAAI,CAAC,CAAjB,EAAoB,KAAI,CAAC,CAAzB;AACH;AACJ,iB;;AACD,sBAAM,CAAC,gBAAP,CAAwB,WAAxB,EAAqC,UAAC,CAAD,EAAM;AACvC,8BAAY,CAAC,CAAC,CAAC,OAAH,EAAY,CAAC,CAAC,OAAd,CAAZ;AACH,iBAFD;AAGA,sBAAM,CAAC,gBAAP,CAAwB,WAAxB,EAAqC,UAAC,CAAD,EAAM;AACvC,sBAAI,CAAC,CAAC,OAAF,CAAU,MAAV,KAAqB,CAAzB,EAA4B;AACxB,gCAAY,CAAC,CAAC,CAAC,OAAF,CAAU,CAAV,EAAa,OAAd,EAAuB,CAAC,CAAC,OAAF,CAAU,CAAV,EAAa,OAApC,CAAZ;AACH;AACJ,iBAJD;;AAMI,2B,GAAc,SAAd,WAAc,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAY;AAC1B,8BAAY,GAAG,IAAf;AACA,6BAAW,GAAG,IAAd;;AACA,wBAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,QAAjC;AACH,iB;;AACD,sBAAM,CAAC,gBAAP,CAAwB,SAAxB,EAAmC,UAAC,CAAD,EAAM;AACrC,6BAAW,CAAC,CAAC,CAAC,OAAH,EAAY,CAAC,CAAC,OAAd,EAAuB,CAAvB,CAAX;AACH,iBAFD;AAGA,sBAAM,CAAC,gBAAP,CAAwB,UAAxB,EAAoC,UAAC,CAAD,EAAM;AACtC,sBAAI,CAAC,CAAC,OAAF,CAAU,MAAV,KAAqB,CAArB,IAA0B,CAAC,CAAC,cAAF,CAAiB,MAAjB,KAA4B,CAA1D,EAA6D;AACzD,+BAAW,CAAC,CAAC,CAAC,cAAF,CAAiB,CAAjB,EAAoB,OAArB,EAA8B,CAAC,CAAC,cAAF,CAAiB,CAAjB,EAAoB,OAAlD,EAA2D,CAA3D,CAAX;AACH;AACJ,iBAJD;;AAKA,qBAAK,UAAL,CAAgB,gBAAhB,CAAiC,UAAjC,EAA6C,UAAC,CAAD,EAAM;AAC/C,sBAAI,CAAC,CAAC,MAAF,KAAa,MAAI,CAAC,UAAlB,IAAgC,CAAC,CAAC,MAAF,CAAS,OAAT,CAAiB,QAAjB,MAA+B,MAAI,CAAC,aAAxE,EAAuF;AACnF,0BAAI,CAAC,cAAL;AACH;AACJ,iBAJD;;AAMA,sBAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,YAAK;AACnC,wBAAI,CAAC,0BAAL;AACH,iBAFD;AAIA,sBAAM,CAAC,gBAAP,CAAwB,cAAxB,EAAwC,YAAK;AACzC,sBAAI,MAAI,CAAC,WAAT,EAAsB;AAClB,0BAAI,CAAC,EAAL,GAAU,IAAV,CADkB,CACF;;AAChB,0BAAI,CAAC,WAAL,CAAiB,KAAjB;AACH;AACJ,iBALD;;;;;;;;;AAMH;;;WAED,4BAAgB;AACZ,UAAI,YAAY,GAAG,QAAQ,CAAC,aAAT,CAAuB,iCAAvB,CAAnB;;AACA,UAAI,YAAY,IAAI,YAAY,KAAK,KAAK,UAA1C,EAAsD;AAClD,oBAAY,CAAC,SAAb,CAAuB,MAAvB,CAA8B,eAA9B;AACH;;AACD,WAAK,UAAL,CAAgB,SAAhB,CAA0B,GAA1B,CAA8B,eAA9B;AACH;;;WAEa,gBAAI;;;;;;;;;qBACV,KAAK,E;;;;;;AACY,uBAAM,4CAAqB,OAArB,CAA6B,KAAK,EAAlC,CAAN;;;AAAX,wB;;qBACF,Q;;;;;AACA,oBAAI,QAAQ,CAAC,SAAb,EAAwB;AACpB,uBAAK,YAAL,CAAkB,QAAQ,CAAC,SAAT,CAAmB,CAArC,EAAwC,QAAQ,CAAC,SAAT,CAAmB,CAA3D;AACH;;AACD,oBAAI,QAAQ,CAAC,QAAb,EAAuB;AACnB,uBAAK,QAAL,GAAgB,QAAQ,CAAC,QAAzB;;AACA,uBAAK,0BAAL;AACH;;qBACG,QAAQ,CAAC,K;;;;;+BACD,QAAQ,CAAC,K;kDACR,W,yBAIA,W,yBAIA,O;;;;AAPD,qBAAK,cAAL;;;;AAIA,qBAAK,cAAL;;;;AAIA,qBAAK,kBAAL,CAAwB,IAAxB,CAA6B,YAAK;AAC9B,wBAAI,CAAC,eAAL;AACH,iBAFD;;;;;AAOZ,qBAAK,QAAL,GAAgB,QAAhB;AACA,qBAAK,IAAL;;;;;;;;;AAGX;;;WAEa,gBAAI;;;;;;qBACV,KAAK,E;;;;;;AAEL,uBAAM,4CAAqB,OAArB,CAA6B,KAAK,EAAlC,EAAsC,KAAK,QAA3C,CAAN;;;;;;;;;AAEP;;;WAEM,0BAAc;AACjB,UAAI,KAAK,KAAL,KAAe,OAAnB,EAA4B;AACxB,aAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AACA,aAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AAEA,YAAI,CAAC,KAAK,UAAL,CAAgB,SAAhB,CAA0B,QAA1B,CAAmC,WAAnC,CAAL,EAAsD;AAClD,eAAK,eAAL;AACA,eAAK,KAAL,GAAa,QAAb;AACH,SAHD,MAGO;AACH,eAAK,KAAL,GAAa,WAAb;AACH;;AACD,aAAK,QAAL,CAAc,KAAd,GAAsB,KAAK,KAA3B;AACA,aAAK,IAAL;AACH;AACJ;;;WAEM,0BAAc;AACjB,UAAI,KAAK,KAAL,KAAe,OAAnB,EAA4B;AACxB,aAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AACA,aAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AAEA,YAAI,CAAC,KAAK,UAAL,CAAgB,SAAhB,CAA0B,QAA1B,CAAmC,WAAnC,CAAL,EAAsD;AAClD,eAAK,eAAL;AACA,eAAK,KAAL,GAAa,QAAb;AACH,SAHD,MAGO;AACH,eAAK,KAAL,GAAa,WAAb;AACH;;AACD,aAAK,QAAL,CAAc,KAAd,GAAsB,KAAK,KAA3B;AACA,aAAK,IAAL;AACH;AACJ;;;WAEM,2BAAe;AAClB,UAAI,KAAK,OAAT,EAAkB;AACd,YAAI,IAAI,GAAG;AACP,WAAC,EAAE,KAAK,OAAL,CAAa,WAAb,GAA2B,KAAK,OAAL,CAAa,WADpC;AAEP,WAAC,EAAE,KAAK,OAAL,CAAa,YAAb,GAA4B,KAAK,OAAL,CAAa;AAFrC,SAAX;;AAKA,YAAI,UAAS,GAAG,KAAK,YAAL,EAAhB;;AAEA,YAAI,IAAI,CAAC,CAAL,KAAW,CAAf,EAAkB;AACd,cAAI,GAAG,GAAG,CAAV;;AACA,eAAK,eAAL,CAAqB,CAArB,CAAuB,OAAvB,CAA+B,WAAC;AAAA,mBAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAP,CAAwB,CAAxB,EAA2B,gBAA3B,CAA4C,OAA5C,CAAD,CAArB;AAAA,WAAhC;;AACA,cAAI,CAAC,CAAL,GAAS,IAAI,CAAC,IAAL,CAAU,GAAV,IAAiB,UAAS,CAAC,CAApC;AACH;;AACD,YAAI,IAAI,CAAC,CAAL,KAAW,CAAf,EAAkB;AACd,cAAI,IAAG,GAAG,CAAV;;AACA,eAAK,eAAL,CAAqB,CAArB,CAAuB,OAAvB,CAA+B,WAAC;AAAA,mBAAI,IAAG,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAP,CAAwB,CAAxB,EAA2B,gBAA3B,CAA4C,QAA5C,CAAD,CAArB;AAAA,WAAhC;;AACA,cAAI,CAAC,CAAL,GAAS,IAAI,CAAC,IAAL,CAAU,IAAV,IAAiB,UAAS,CAAC,CAApC;AACH;;AAED,kBAAS,CAAC,CAAV,IAAe,IAAI,CAAC,CAApB;AACA,kBAAS,CAAC,CAAV,IAAe,IAAI,CAAC,CAApB;;AAEA,YAAI,KAAK,KAAL,KAAe,QAAnB,EAA6B;AACzB,eAAK,YAAL,CAAkB,UAAS,CAAC,CAA5B,EAA+B,UAAS,CAAC,CAAzC;AACH;;AAED,aAAK,0BAAL;AACH;AACJ;;;WAEO,oCAAwB;AAC5B,UAAM,SAAS,GAAG,KAAK,YAAL,EAAlB;AAEA,UAAI,CAAC,GAAG,KAAK,QAAL,CAAc,CAAtB;;AACA,UAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AACpC,SAAC,IAAI,MAAM,CAAC,UAAP,GAAoB,CAApB,GAAwB,SAAS,CAAC,CAAV,GAAc,CAA3C;AACH,OAFD,MAEO,IAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,OAA9B,EAAuC;AAC1C,SAAC,IAAI,MAAM,CAAC,UAAP,GAAoB,SAAS,CAAC,CAAnC;AACH;;AAED,UAAI,CAAC,GAAG,KAAK,QAAL,CAAc,CAAtB;;AAGA,UAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AACpC,SAAC,IAAI,MAAM,CAAC,WAAP,GAAqB,CAArB,GAAyB,SAAS,CAAC,CAAV,GAAc,CAA5C;AACH,OAFD,MAEO,IAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AAC3C,SAAC,IAAI,MAAM,CAAC,WAAP,GAAqB,SAAS,CAAC,CAApC;AACH;;AAED,UAAI,CAAC,GAAG,CAAR,EAAW;AACP,SAAC,GAAG,CAAJ;AACH;;AACD,UAAI,CAAC,GAAG,CAAR,EAAW;AACP,SAAC,GAAG,CAAJ;AACH;;AAED,aAAO;AAAC,SAAC,EAAD,CAAD;AAAI,SAAC,EAAD;AAAJ,OAAP;AACH;;;WAEO,mCAAuB;AAC3B,UAAM,SAAS,GAAG,KAAK,YAAL,EAAlB;AAEA,UAAM,OAAO,GAAG,KAAK,wBAAL,EAAhB;AACA,aAAO;AACH,SAAC,EAAG,OAAO,CAAC,CAAR,GAAY,SAAS,CAAC,CAAV,GAAc,CAA3B,GAAgC,MAAM,CAAC,UAAP,GAAoB,CADpD;AAEH,SAAC,EAAG,OAAO,CAAC,CAAR,GAAY,SAAS,CAAC,CAAV,GAAc,CAA3B,GAAgC,MAAM,CAAC,WAAP,GAAqB;AAFrD,OAAP;AAIH;;;WAEO,kCAAsB;AAC1B,UAAM,SAAS,GAAG,KAAK,YAAL,EAAlB;AAEA,UAAM,OAAO,GAAG,KAAK,wBAAL,EAAhB;AACA,aAAO;AACH,SAAC,EAAE,IAAI,CAAC,GAAL,CAAU,OAAO,CAAC,CAAR,GAAY,SAAS,CAAC,CAAvB,GAA4B,MAAM,CAAC,UAA5C,EAAwD,CAAxD,CADA;AAEH,SAAC,EAAE,IAAI,CAAC,GAAL,CAAU,OAAO,CAAC,CAAR,GAAY,SAAS,CAAC,CAAvB,GAA4B,MAAM,CAAC,WAA5C,EAAyD,CAAzD;AAFA,OAAP;AAIH;;;WAED,sCAA0B;AACtB,UAAI,SAAS,GAAG,KAAK,YAAL,EAAhB;AACA,UAAI,YAAY,GAAG,IAAnB;AACA,UAAI,gBAAgB,GAAG,KAAvB;;AAEA,UAAI,KAAK,CAAC,SAAS,CAAC,CAAX,CAAT,EAAwB;AACpB,iBAAS,CAAC,CAAV,GAAc,CAAd;AACA,oBAAY,GAAG,KAAf;AACH;;AACD,UAAI,KAAK,CAAC,SAAS,CAAC,CAAX,CAAT,EAAwB;AACpB,iBAAS,CAAC,CAAV,GAAc,CAAd;AACA,oBAAY,GAAG,KAAf;AACH;;AAED,UAAI,UAAU,GAAG,KAAK,wBAAL,EAAjB;AACA,UAAI,eAAe,GAAG,KAAK,uBAAL,EAAtB;AACA,UAAI,cAAc,GAAG,KAAK,sBAAL,EAArB;;AAEA,UAAI,SAAS,CAAC,CAAV,GAAc,MAAM,CAAC,UAAzB,EAAqC;AACjC,wBAAgB,GAAG,IAAnB;AACA,iBAAS,CAAC,CAAV,GAAc,MAAM,CAAC,UAArB;AACA,aAAK,QAAL,CAAc,CAAd,GAAkB,CAAlB;AACA,aAAK,QAAL,CAAc,OAAd,GAAwB,MAAxB;AACH,OALD,MAKO;AACH,YAAI,UAAU,CAAC,CAAX,IAAgB,IAAI,CAAC,GAAL,CAAS,eAAe,CAAC,CAAzB,CAAhB,IAA+C,UAAU,CAAC,CAAX,IAAgB,CAAC,CAAD,GAAK,cAAc,CAAC,CAAvF,EAA0F;AACtF,eAAK,QAAL,CAAc,CAAd,GAAkB,UAAU,CAAC,CAA7B;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,MAAxB;AACH,SAHD,MAGO,IAAI,CAAC,CAAD,GAAK,cAAc,CAAC,CAApB,IAAyB,IAAI,CAAC,GAAL,CAAS,eAAe,CAAC,CAAzB,CAA7B,EAA0D;AAC7D,eAAK,QAAL,CAAc,CAAd,GAAkB,cAAc,CAAC,CAAjC;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,OAAxB;AACH,SAHM,MAGA;AACH,eAAK,QAAL,CAAc,CAAd,GAAkB,eAAe,CAAC,CAAlC;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,QAAxB;AACH;AACJ;;AAED,UAAI,SAAS,CAAC,CAAV,GAAc,MAAM,CAAC,WAAzB,EAAsC;AAClC,wBAAgB,GAAG,IAAnB;AACA,iBAAS,CAAC,CAAV,GAAc,MAAM,CAAC,WAArB;AACA,aAAK,QAAL,CAAc,CAAd,GAAkB,CAAlB;AACA,aAAK,QAAL,CAAc,OAAd,GAAwB,KAAxB;AACH,OALD,MAKO;AACH,YAAI,UAAU,CAAC,CAAX,IAAgB,IAAI,CAAC,GAAL,CAAS,eAAe,CAAC,CAAzB,CAAhB,IAA+C,UAAU,CAAC,CAAX,IAAgB,CAAC,CAAD,GAAK,cAAc,CAAC,CAAvF,EAA0F;AACtF,eAAK,QAAL,CAAc,CAAd,GAAkB,UAAU,CAAC,CAA7B;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,KAAxB;AACH,SAHD,MAGO,IAAI,CAAC,CAAD,GAAK,cAAc,CAAC,CAApB,IAAyB,IAAI,CAAC,GAAL,CAAS,eAAe,CAAC,CAAzB,CAA7B,EAA0D;AAC7D,eAAK,QAAL,CAAc,CAAd,GAAkB,cAAc,CAAC,CAAjC;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,QAAxB;AACH,SAHM,MAGA;AACH,eAAK,QAAL,CAAc,CAAd,GAAkB,eAAe,CAAC,CAAlC;AACA,eAAK,QAAL,CAAc,OAAd,GAAwB,QAAxB;AACH;AACJ;;AAED,UAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,KAA9B,EAAqC;AACjC,aAAK,UAAL,CAAgB,KAAhB,CAAsB,GAAtB,GAA4B,KAAK,QAAL,CAAc,CAAd,GAAkB,IAA9C;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,QAArC;AACH,OAHD,MAGO,IAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,QAA9B,EAAwC;AAC3C,aAAK,UAAL,CAAgB,KAAhB,CAAsB,MAAtB,GAAgC,CAAC,CAAD,GAAK,KAAK,QAAL,CAAc,CAApB,GAAyB,IAAxD;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,KAArC;AACH,OAHM,MAGA;AACH,aAAK,UAAL,CAAgB,KAAhB,CAAsB,GAAtB,GAA4B,gBAAgB,KAAK,QAAL,CAAc,CAAd,CAAgB,QAAhB,EAAhB,GAA6C,OAA7C,GAAuD,CAAC,SAAS,CAAC,CAAV,GAAc,CAAf,EAAkB,QAAlB,EAAvD,GAAsF,KAAlH;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,QAArC;AACH;;AAED,UAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,MAA9B,EAAsC;AAClC,aAAK,UAAL,CAAgB,KAAhB,CAAsB,IAAtB,GAA6B,KAAK,QAAL,CAAc,CAAd,GAAkB,IAA/C;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,OAArC;AACH,OAHD,MAGO,IAAI,KAAK,QAAL,CAAc,OAAd,KAA0B,OAA9B,EAAuC;AAC1C,aAAK,UAAL,CAAgB,KAAhB,CAAsB,KAAtB,GAA+B,CAAC,CAAD,GAAK,KAAK,QAAL,CAAc,CAApB,GAAyB,IAAvD;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,MAArC;AACH,OAHM,MAGA;AACH,aAAK,UAAL,CAAgB,KAAhB,CAAsB,IAAtB,GAA6B,gBAAgB,KAAK,QAAL,CAAc,CAAd,CAAgB,QAAhB,EAAhB,GAA6C,OAA7C,GAAuD,CAAC,SAAS,CAAC,CAAV,GAAc,CAAf,EAAkB,QAAlB,EAAvD,GAAsF,KAAnH;;AACA,aAAK,UAAL,CAAgB,KAAhB,CAAsB,cAAtB,CAAqC,OAArC;AACH;;AAED,WAAK,QAAL,CAAc,QAAd,GAAyB,KAAK,QAA9B;;AACA,UAAI,CAAC,KAAK,UAAL,CAAgB,SAAhB,CAA0B,QAA1B,CAAmC,WAAnC,CAAD,IAAoD,YAApD,IAAoE,gBAAxE,EAA0F;AACtF,aAAK,YAAL,CAAkB,SAAS,CAAC,CAA5B,EAA+B,SAAS,CAAC,CAAzC;AACH;AACJ;;;WAEK,iBAAQ,cAAR,EAAsB;AAAA;;;;;;;;;;;;;;;;AACpB,mB,GAAM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,cAAd,C;;AAEV,qBAAK,0BAAL;;kDAEO,G;;;;;;;;;AACV;;;WAED,gBAAO,CAAP,EAAU,CAAV,EAAW;AACP,UAAM,UAAU,GAAG,KAAK,wBAAL,EAAnB;AACA,aAAO,KAAK,MAAL,CAAY,CAAC,GAAG,UAAU,CAAC,CAA3B,EAA8B,CAAC,GAAG,UAAU,CAAC,CAA7C,CAAP;AACH;;;WAED,gBAAO,CAAP,EAAU,CAAV,EAAW;AACP,WAAK,QAAL,GAAgB;AAAC,SAAC,EAAE,CAAJ;AAAO,SAAC,EAAE,CAAV;AAAa,eAAO,EAAE,MAAtB;AAA8B,eAAO,EAAE;AAAvC,OAAhB;;AACA,WAAK,0BAAL;;AACA,WAAK,IAAL;AACH;;;WAEM,uBAAc,EAAd,EAA0B,MAA1B,EAA+C,CAA/C,EAA4D;AAC/D,cAAQ,EAAR;AACI,aAAK,iBAAL;AAAwB;AACpB,iBAAK,cAAL;AACA;AACH;;AACD,aAAK,iBAAL;AAAwB;AACpB,iBAAK,cAAL;AACA;AACH;;AACD,aAAK,mBAAL;AAA0B;AACtB,iBAAK,eAAL;AACA;AACH;AAZL;AAcH;;;WAED,2BAAe;AAAA;;AACX,UAAI,KAAK,KAAL,KAAe,OAAnB,EAA4B;AACxB;AACH;;AACD,UAAM,WAAW,GAAG,MAAM,CAAC,IAAP,CAAY,EAAZ,EAAgB,EAAhB,EAAoB,WAApB,CAApB;;AACA,UAAI,WAAW,KAAK,IAApB,EAA0B;AACtB,YAAI,aAAJ,CAAU,oBAAV,EAAgC,IAAhC;AACA;AACH;;AAED,WAAK,KAAL,GAAa,OAAb;AACA,WAAK,QAAL,CAAc,KAAd,GAAsB,KAAK,KAA3B;AACA,WAAK,IAAL;AAGA,UAAM,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,MAAvB,CAApB;AACA,iBAAW,CAAC,IAAZ,GAAmB,MAAM,CAAC,QAAP,CAAgB,IAAnC;AACA,iBAAW,CAAC,QAAZ,CAAqB,IAArB,CAA0B,WAA1B,CAAsC,WAAtC;AAEA,UAAM,YAAY,GAAG,QAAQ,CAAC,aAAT,CAAuB,OAAvB,CAArB;AACA,kBAAY,CAAC,SAAb,GAAyB,KAAK,KAA9B;AACA,iBAAW,CAAC,QAAZ,CAAqB,IAArB,CAA0B,WAA1B,CAAsC,YAAtC;AAEA,cAAQ,CAAC,gBAAT,CAA0B,wBAA1B,EAAoD,OAApD,CAA4D,mBAAS,EAAG;AACpE,mBAAW,CAAC,QAAZ,CAAqB,IAArB,CAA0B,WAA1B,CAAsC,SAAS,CAAC,SAAV,EAAtC;AACH,OAFD;AAIA,UAAM,MAAM,GAAG,KAAK,KAAL,CAAW,UAA1B;;AAEA,WAAK,KAAL,CAAW,MAAX;;AACA,WAAK,UAAL,CAAgB,SAAhB,CAA0B,GAA1B,CAA8B,OAA9B;;AACA,WAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AACA,WAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AAEA,UAAM,mBAAmB,GAAG,wBAAW,WAAX,GAAyB,sBAAzB,CAAgD,UAAC,WAAD,EAAgB;AACxF,YAAI,WAAW,KAAK,MAAI,CAAC,UAAzB,EAAqC;AACjC,kCAAW,WAAX,GAAyB,kBAAzB,CAA4C,MAAI,CAAC,UAAjD;AACH;AACJ,OAJ2B,EAIzB,KAJyB,CAA5B;AAMA,iBAAW,CAAC,QAAZ,CAAqB,IAArB,CAA0B,WAA1B,CAAsC,KAAK,KAA3C;AACA,iBAAW,CAAC,gBAAZ,CAA6B,cAA7B,EAA6C,YAAK;AAC9C,cAAI,CAAC,KAAL,GAAa,QAAb;AACA,cAAI,CAAC,QAAL,CAAc,KAAd,GAAsB,MAAI,CAAC,KAA3B;;AACA,cAAI,CAAC,IAAL;;AAEA,cAAI,CAAC,KAAL,CAAW,MAAX;;AACA,cAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,OAAjC;;AACA,cAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AACA,cAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,WAAjC;;AACA,cAAM,CAAC,WAAP,CAAmB,MAAI,CAAC,KAAxB;AACA,cAAI,CAAC,WAAL,GAAmB,IAAnB;AAEA,gCAAW,WAAX,GAAyB,yBAAzB,CAAmD,mBAAnD;AACH,OAbD;AAcA,WAAK,WAAL,GAAmB,WAAnB;AAEA,cAAQ,CAAC,IAAT,CAAc,SAAd,CAAwB,OAAxB,CAAgC,mBAAS,EAAG;AACxC,eAAO,CAAC,GAAR,CAAY,cAAZ,EAA4B,SAA5B;AACA,mBAAW,CAAC,QAAZ,CAAqB,IAArB,CAA0B,SAA1B,CAAoC,GAApC,CAAwC,SAAxC;AACH,OAHD;AAIH;;;WAEO,uBAAW;AACf,aAAO,KAAK,QAAZ;AACH;;;;EA7lBuC,mC;;AAA5C,wD;;;;;;ACXA,iBAAiB,qBAAuB,sC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AACA;;AACA;;AAEA,IAAM,WAAW,GAAG,mBAAO,CAAC,GAAD,CAA3B;;IAEa,sB;;;;;AAOT,kCAAY,IAAZ,EAAkB,IAAlB,EAAsB;AAAA;;AAAA;;AAClB,+BAAM,IAAN,EAAY,gBAAO,OAAP,CAAe,IAAf,EAAqB,WAArB,CAAZ;AACA,UAAK,QAAL,GAAgB,EAAhB;AACA,UAAK,aAAL,GAAqB,KAArB;AAHkB;AAIrB;;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C,EAEV;;AAEI,4B,GAAe,KAAK,MAAL,CAAY,+BAAZ,C;AACnB,4BAAY,CAAC,gBAAb,CAA8B,WAA9B,EAA2C,YAAK;AAC5C,wBAAI,CAAC,aAAL,GAAqB,IAArB;AACH,iBAFD;AAGA,sBAAM,CAAC,gBAAP,CAAwB,YAAxB,EAAsC,UAAC,CAAD,EAAM;AACxC,wBAAI,CAAC,aAAL,GAAqB,IAArB;AACH,iBAFD;AAGA,sBAAM,CAAC,gBAAP,CAAwB,SAAxB,EAAmC,YAAK;AACpC,wBAAI,CAAC,aAAL,GAAqB,KAArB;AACH,iBAFD;AAGA,sBAAM,CAAC,gBAAP,CAAwB,UAAxB,EAAoC,YAAK;AACrC,wBAAI,CAAC,aAAL,GAAqB,KAArB;AACH,iBAFD;AAIA,qBAAK,MAAL,CAAY,qBAAZ,EAAmC,IAAnC,EAAyC,OAAzC,CAAiD,cAAI,EAAG;AACpD,sBAAI,QAAQ,GAAG,SAAX,QAAW,CAAC,CAAD,EAAM;AACjB,wBAAI,MAAI,CAAC,aAAT,EAAwB;AACpB,4BAAI,CAAC,MAAL,CAAY,uBAAuB,IAAI,CAAC,OAAL,CAAa,MAAhD,EAAwD,cAAxD,CAAuE;AACnE,gCAAQ,EAAE,QADyD;AAEnE,6BAAK,EAAE;AAF4D,uBAAvE;AAIH;AACJ,mBAPD;;AAQA,sBAAI,CAAC,gBAAL,CAAsB,WAAtB,EAAmC,UAAC,CAAD,EAAM;AACrC,0BAAI,CAAC,aAAL,GAAqB,IAArB;AACA,4BAAQ,CAAC,CAAD,CAAR;AACH,mBAHD;AAIA,sBAAI,CAAC,gBAAL,CAAsB,WAAtB,EAAmC,QAAnC;AACA,sBAAI,CAAC,gBAAL,CAAsB,YAAtB,EAAoC,UAAC,CAAD,EAAM;AACtC,0BAAI,CAAC,aAAL,GAAqB,IAArB;AACA,4BAAQ,CAAC,CAAD,CAAR;AACH,mBAHD;AAIA,sBAAI,CAAC,gBAAL,CAAsB,WAAtB,EAAmC,QAAnC;AACH,iBAnBD;AAqBA,qBAAK,cAAL,GAAsB,KAAK,MAAL,CAAY,0BAAZ,CAAtB;AAEA,qBAAK,UAAL;iDACO,G;;;;;;;;;AACV;;;WAED,qBAAY,QAAZ,EAAoB;AAAA;;AAChB,WAAK,QAAL,GAAgB,EAAhB;AACA,YAAM,CAAC,IAAP,CAAY,QAAZ,EAAsB,IAAtB,CAA2B,UAAU,CAAV,EAAa,CAAb,EAAc;AACrC,eAAO,CAAC,CAAC,WAAF,GAAgB,aAAhB,CAA8B,CAAC,CAAC,WAAF,EAA9B,CAAP;AACH,OAFD,EAEG,OAFH,CAEW,aAAG,EAAG;AACb,cAAI,CAAC,QAAL,CAAc,GAAd,IAAqB,QAAQ,CAAC,GAAD,CAA7B;AACH,OAJD;AAKH;;;WAED,oBAAW,cAAX,EAAsC;AAClC,WAAK,OAAL,GAAe,cAAf;;AACA,UAAI,KAAK,cAAL,IAAuB,KAAK,OAAhC,EAAwC;AACpC,4BAAW,iBAAX,CAA6B,KAAK,cAAlC;AACA,aAAK,cAAL,CAAoB,WAApB,CAAgC,KAAK,OAArC;AACH;AACJ;;;WAED,uBAAc,OAAd,EAAqB;AACjB,aAAO,CAAC,IAAR,CAAa,uBAAb;AACA,UAAI,IAAI,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAX;AACA,UAAI,CAAC,SAAL,GAAiB,OAAjB;AACA,aAAO,IAAP;AACH;;;WAED,sBAAU;AAAA;;AACN,0BAAW,iBAAX,CAA6B,KAAK,cAAlC;;AACA,UAAI,KAAK,OAAT,EAAkB;AACd,aAAK,cAAL,CAAoB,WAApB,CAAgC,KAAK,OAArC;AACH;;AAED,WAAK,MAAL,CAAY,mBAAZ,EAAiC,IAAjC,EAAuC,OAAvC,CAA+C,iBAAO,EAAG;AACrD,4BAAW,iBAAX,CAA6B,OAA7B;AACH,OAFD;AAIA,UAAI,aAAa,GAAG,GAApB;AACA,UAAI,cAAc,GAAG,KAAK,MAAL,CAAY,qBAAZ,CAArB;AACA,YAAM,CAAC,IAAP,CAAY,KAAK,QAAjB,EAA2B,OAA3B,CAAmC,aAAG,EAAG;AACrC,YAAI,SAAS,GAAG,GAAG,CAAC,IAAJ,GAAW,SAAX,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,WAA3B,EAAhB;;AACA,YAAI,SAAS,KAAK,aAAlB,EAAiC;AAC7B,uBAAa,GAAG,SAAhB;;AACA,cAAI,UAAU,GAAG,MAAI,CAAC,MAAL,CAAY,uBAAuB,SAAnC,CAAjB;;AACA,cAAI,UAAU,KAAK,IAAnB,EAAyB;AACrB,0BAAc,GAAG,UAAjB;AACH;AACJ;;AACD,YAAI,OAAO,GAAG,MAAI,CAAC,aAAL,CAAmB,MAAI,CAAC,QAAL,CAAc,GAAd,CAAnB,CAAd;;AACA,sBAAc,CAAC,WAAf,CAA2B,OAA3B;AACH,OAXD;AAYH;;;;EA3GuC,mC;;AAA5C,wD;;;;;;ACNA,iBAAiB,qBAAuB,sC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AAEA,IAAM,cAAc,GAAG,mBAAO,CAAC,GAAD,CAA9B;;AACA;;AAEA;;AACA;;IAEa,W;;;;;AAqBT,uBAAY,IAAZ,EAAkB,IAAlB,EAAuB;AAAA;;AAAA;;AACnB,+BAAM,IAAN,EAAY,gBAAO,OAAP,CAAe,IAAf,EAAqB,cAArB,CAAZ;AAZI,sBAAY,CAAZ;AAEA,sBAAoB,IAApB;AAOA,gCAAwC,IAAxC;AAIJ,UAAK,IAAL,GAAY,IAAI,GAAJ,EAAZ;AACA,UAAK,cAAL,GAAsB,MAAK,kBAA3B;AAHmB;AAItB;;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,aAAL,GAAqB,KAAK,MAAL,CAAY,YAAZ,CAArB;AACA,qBAAK,UAAL,GAAkB,KAAK,MAAL,CAAY,sBAAZ,CAAlB;AACA,qBAAK,UAAL,CAAgB,SAAhB,CAA0B,MAA1B,CAAiC,qBAAjC;AACA,qBAAK,UAAL,CAAgB,MAAhB;AAEA,qBAAK,UAAL,GAAkB,KAAK,MAAL,CAAY,cAAZ,CAAlB;AACA,qBAAK,OAAL,GAAe,KAAK,MAAL,CAAY,oBAAZ,CAAf;AACA,qBAAK,OAAL,CAAa,SAAb,CAAuB,MAAvB,CAA8B,mBAA9B;AACA,qBAAK,OAAL,CAAa,MAAb;iDAEO,G;;;;;;;;;AACV;;;WAGD,qBAAY,IAAZ,EAAkB,QAAlB,EAA4B,kBAA5B,EAAwD;AAAA;;AACpD,mFAAkB,cAAlB,EAAkC,QAAlC;;AACA,cAAQ,CAAC,kBAAT,CAA4B,IAA5B,CAAiC,YAAK;AAClC,YAAM,IAAI,GAAG,MAAI,CAAC,OAAL,CAAa,SAAb,CAAuB,IAAvB,CAAb;;AACA,YAAI,CAAC,WAAL,CAAiB,QAAQ,CAAC,KAA1B;AAEA,cAAI,CAAC,SAAL;AACA,YAAM,GAAG,GAAG;AACR,cAAI,EAAE,IADE;AAER,kBAAQ,EAAE,QAFF;AAGR,cAAI,EAAE,IAHE;AAIR,4BAAkB,EAAE,gBAAO,OAAP,CAAe,kBAAf,EAAmC,IAAnC,CAJZ;AAKR,gBAAM,EAAE,IALA;AAMR,YAAE,EAAE,MAAI,CAAC;AAND,SAAZ;;AASA,cAAI,CAAC,IAAL,CAAU,GAAV,CAAc,MAAI,CAAC,SAAnB,EAA8B,GAA9B;;AAEA,cAAI,CAAC,kBAAL,CAAwB,IAAxB,CAA6B,YAAK;AAC9B,cAAM,WAAW,GAAG,MAAI,CAAC,UAAL,CAAgB,SAAhB,CAA0B,IAA1B,CAApB;;AACA,qBAAW,CAAC,WAAZ,CAAwB,GAAG,CAAC,kBAAJ,GAAyB,wBAAW,yBAAX,CAAqC,IAArC,CAAzB,GAAsE,QAAQ,CAAC,cAAT,CAAwB,IAAxB,CAA9F;;AACA,gBAAI,CAAC,aAAL,CAAmB,WAAnB,CAA+B,WAA/B;;AAEA,qBAAW,CAAC,gBAAZ,CAA6B,OAA7B,EAAsC,YAAK;AACvC,kBAAI,CAAC,OAAL,CAAa,GAAG,CAAC,EAAjB;AACH,WAFD;AAGA,aAAG,CAAC,MAAJ,GAAa,WAAb;;AAEA,cAAI,gBAAO,MAAP,CAAc,MAAI,CAAC,SAAnB,CAAJ,EAAmC;AAC/B,kBAAI,CAAC,OAAL,CAAa,GAAG,CAAC,EAAjB;AACH;AACJ,SAbD;AAcH,OA9BD;AA+BH;;;WAED,iBAAQ,KAAR,EAAqB;AACjB,UAAM,GAAG,GAAG,KAAK,IAAL,CAAU,GAAV,CAAc,KAAd,CAAZ;;AACA,UAAI,GAAG,IAAI,KAAK,KAAK,KAAK,SAA1B,EAAqC;AACjC,YAAI,oBAAoB,GAAG,KAAK,MAAL,CAAY,oBAAZ,CAA3B;;AACA,YAAI,gBAAO,SAAP,CAAiB,oBAAjB,CAAJ,EAA4C;AACxC,8BAAoB,CAAC,SAArB,CAA+B,MAA/B,CAAsC,QAAtC;AACH;;AAED,WAAG,CAAC,MAAJ,CAAW,SAAX,CAAqB,GAArB,CAAyB,QAAzB;AAEA,4BAAW,iBAAX,CAA6B,KAAK,UAAlC;AACA,aAAK,UAAL,CAAgB,WAAhB,CAA4B,GAAG,CAAC,IAAhC;AACA,aAAK,SAAL,GAAiB,KAAjB;;AAEA,YAAI,KAAK,mBAAT,EAA8B;AAC1B,eAAK,mBAAL,CAAyB,GAAzB;AACH;AACJ;AACJ;;;WAED,gCAAuB,QAAvB,EAAiD;AAC7C,WAAK,mBAAL,GAA2B,QAA3B;AACH;;;;EArG4B,mC;;AAAjC,kC;;;;;;ACRA,iBAAiB,qBAAuB,2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AACA;;AACA;;AAEA,IAAM,SAAS,GAAG,mBAAO,CAAC,GAAD,CAAzB;;IAEa,W;;;;;AAiCT;AAAA;;AAAA;;AACI,8BAAM,EAAN,EAAU,YAAK;AACX,UAAI,CAAC,GAAG,IAAI,eAAJ,CAAW,WAAW,CAAC,OAAZ,CAAoB,IAApB,CAAyB,OAAzB,CAAX,EAA8C,wBAAW,SAAX,CAAqB,OAArB,CAA9C,CAAR;AACA,OAAC,CAAC,eAAF,CAAkB,KAAlB;AACA,OAAC,CAAC,IAAF;AACH,KAJD,EAIG,wBAAW,WAJd,EAI2B,CAAC,IAJ5B,EAIkC,WAAW,CAAC,UAJ9C;AAKA,UAAK,QAAL,GAAiB,WAAW,CAAC,OAAZ,CAAoB,MAApB,GAA6B,CAA9C;AACA,UAAK,gBAAL,GAAwB,KAAxB;AAEA,WAAO,CAAC,GAAR,CAAY,QAAZ,EAAsB,WAAW,CAAC,UAAlC;AATJ;AAUC;;;;WAnCD,kBAAgB,YAAhB,EAA4B;AACxB,UAAI,KAAK,OAAL,CAAa,OAAb,CAAqB,YAArB,MAAuC,CAAC,CAA5C,EAA+C;AAC3C,aAAK,OAAL,CAAa,IAAb,CAAkB,YAAlB;;AACA,aAAK,WAAL,GAAmB,aAAnB,CAAkC,KAAK,OAAL,CAAa,MAAb,GAAsB,CAAxD;AACH;AACJ;;;WAED,qBAAmB,YAAnB,EAA+B;AAC3B,UAAI,KAAK,GAAG,KAAK,OAAL,CAAa,OAAb,CAAqB,YAArB,CAAZ;;AACA,UAAI,KAAK,IAAI,CAAb,EAAgB;AACZ,aAAK,OAAL,CAAa,MAAb,CAAoB,KAApB,EAA2B,CAA3B;;AACA,aAAK,WAAL,GAAmB,aAAnB,CAAkC,KAAK,OAAL,CAAa,MAAb,GAAsB,CAAxD;AACH;AACJ;AAED;;AAEG;;;;WACH,uBAAkB;AACd,UAAI,KAAK,SAAL,KAAmB,IAAvB,EAA6B;AACzB,aAAK,SAAL,GAAiB,IAAI,WAAJ,EAAjB;AACH;;AACD,aAAO,KAAK,SAAZ;AACH;;;;EA/B4B,uB;;AAAjC;AAEW,yBAAa,SAAb;AAEQ,wBAAY,IAAZ;AAEA,sBAAU,EAAV,C;;;;;;;ACZnB;AAAe,kFAAmB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAlC;;AACA;;IAEa,mB;;;;;AAGT,+BAAY,IAAZ,EAAkB,IAAlB,EAAwB,OAAxB,EAAiC,KAAjC,EAAwC,IAAxC,EAA4C;AAAA;;AAAA,6BAClC,IADkC,EAC5B,YAAK;AACb,UAAI,mBAAmB,CAAC,IAAxB,EAA8B;AAC1B,YAAI,KAAK,CAAC,OAAN,CAAc,IAAd,KAAuB,IAAI,CAAC,MAAL,IAAe,CAA1C,EAA6C;AACzC,6BAAmB,CAAC,IAApB,CAAyB,SAAzB,CAAmC,IAAI,CAAC,CAAD,CAAvC,EAA4C,IAAI,CAAC,CAAD,CAAhD;AACH,SAFD,MAEO;AACH,6BAAmB,CAAC,IAApB,CAAyB,SAAzB,CAAmC,IAAnC;AACH;AACJ;AACJ,KATuC,EASrC,OATqC,EAS5B,KAT4B,EASrB,IATqB;AAU3C;;;EAboC,uB;;AAAzC;AAgBA,mBAAmB,CAAC,IAApB,GAA2B,IAA3B;AACA,UAAI,iBAAJ,CAAsB,aAAG,EAAG;AACxB,qBAAmB,CAAC,IAApB,GAA2B,GAA3B;AACH,CAFD,E;;;;;;ACpBA,iBAAiB,qBAAuB,sB;;;;;;ACAxC,iBAAiB,qBAAuB,wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AACA;;AACA;;AAEA,IAAM,IAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;IAEa,a;;;;;AAOT,yBAAY,IAAZ,EAAgB;AAAA;;AAAA;;AACZ,+BAAM,IAAN,EAAY,IAAZ;AACA,UAAK,YAAL,GAAoB,CAApB;AACA,UAAK,WAAL,GAAmB,IAAnB;AAHY;AAIf;;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;AACd,qBAAK,KAAL,CAAW,gBAAX,CAA4B,YAA5B,EAA0C,WAAC,EAAG;AAC1C,wBAAI,CAAC,WAAL,GAAmB,CAAC,CAAC,OAAF,CAAU,CAAV,CAAnB;AACH,iBAFD,EAEG,KAFH;;AAGA,qBAAK,KAAL,CAAW,gBAAX,CAA4B,UAA5B,EAAwC,WAAC,EAAG;AACxC,wBAAI,CAAC,YAAL,CAAkB,CAAC,CAAC,cAAF,CAAiB,CAAjB,EAAoB,OAAtC,EAA+C,CAAC,CAAC,cAAF,CAAiB,CAAjB,EAAoB,OAAnE;;AACA,wBAAI,CAAC,WAAL,GAAmB,IAAnB;AACH,iBAHD;;AAKA,qBAAK,KAAL,CAAW,gBAAX,CAA4B,WAA5B,EAAyC,WAAC,EAAG;AACzC,wBAAI,CAAC,WAAL,GAAmB,CAAnB;AACH,iBAFD,EAEG,KAFH;;AAGA,qBAAK,KAAL,CAAW,gBAAX,CAA4B,SAA5B,EAAuC,WAAC,EAAG;AACvC,wBAAI,CAAC,YAAL,CAAkB,CAAC,CAAC,OAApB,EAA6B,CAAC,CAAC,OAA/B;;AACA,wBAAI,CAAC,WAAL,GAAmB,IAAnB;AACH,iBAHD;;iDAIO,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;;;;;;;;;AACV;;;WAEK,sBAAa,IAAb,EAAmB,IAAnB,EAAuB;;;;;;;qBACrB,gBAAO,MAAP,CAAc,KAAK,WAAnB,C;;;;;;;;AAGA,0B,GAAa,KAAK,W;AACtB,qBAAK,WAAL,GAAmB,IAAnB;AAEI,qB,GAAQ,UAAU,CAAC,OAAX,GAAqB,I;;sBAC7B,IAAI,CAAC,GAAL,CAAS,UAAU,CAAC,OAAX,GAAqB,IAA9B,KAAuC,aAAa,CAAC,KAArD,IACG,IAAI,CAAC,GAAL,CAAS,KAAT,KAAmB,aAAa,CAAC,K;;;;;sBAChC,KAAK,GAAG,C;;;;;;AACR,uBAAM,KAAK,UAAL,CAAgB,KAAK,YAArB,EAAmC,WAAnC,EAAN;;;;;;;;AAEA,uBAAM,KAAK,UAAL,CAAgB,KAAK,YAArB,EAAmC,YAAnC,EAAN;;;;;;;;;AAGX;;;WAEK,iBAAQ,cAAR,EAAsB;AAAA;;;;;;;;;;;;;;;AACxB,oBAAI,KAAK,YAAL,IAAqB,CAArB,IAA0B,KAAK,YAAL,GAAoB,KAAK,UAAL,CAAgB,MAAlE,EAAyE;AACrE,uBAAK,iBAAL,CAAuB,KAAK,YAA5B;AACH;;kDACM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,cAAd,C;;;;;;;;;AACV;;;WAED,2BAAkB,KAAlB,EAAuB;AAAA;;AACnB,UAAI,KAAK,YAAY,uCAArB,EAAyC;AACrC,aAAK,GAAG,KAAK,UAAL,CAAgB,OAAhB,CAAwB,KAAxB,CAAR;AACH;;AAED,UAAI,KAAK,IAAI,CAAT,IAAc,KAAK,GAAG,KAAK,UAAL,CAAgB,MAA1C,EAAkD;AAC9C,aAAK,YAAL,GAAoB,KAApB;;AACA,aAAK,UAAL,CAAgB,OAAhB,CAAwB,UAAC,IAAD,EAAO,CAAP,EAAY;AAChC,cAAI,CAAC,SAAL,CAAe,CAAC,KAAK,MAAI,CAAC,YAA1B;AACH,SAFD;AAGH;AACJ;;;WAED,wBAAY;AACR,WAAK,iBAAL,CAAuB,CAAC,KAAK,YAAL,GAAoB,CAArB,IAA0B,KAAK,UAAL,CAAgB,MAAjE;AACH;;;WAED,4BAAgB;AACZ,WAAK,iBAAL,CAAuB,CAAC,KAAK,YAAL,GAAoB,KAAK,UAAL,CAAgB,MAApC,GAA6C,CAA9C,IAAmD,KAAK,UAAL,CAAgB,MAA1F;AACH;;;WAED,qBAAY,QAAZ,EAAoB;AAChB,UAAI,QAAQ,YAAY,uCAAxB,EAA4C;AACxC,gBAAQ,CAAC,SAAT,CAAmB,IAAnB;AACA,8FAAyB,kBAAzB,EAA6C,QAA7C;AACH;AACJ;;;;EAnF8B,mC;;AAAnC;AAsFA,aAAa,CAAC,KAAd,GAAsB,EAAtB;AACA,aAAa,CAAC,KAAd,GAAsB,GAAtB,C;;;;;;AC7FA,iBAAiB,qBAAuB,6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;IAEa,kB;;;;;AAET,8BAAY,OAAZ,EAAqB,KAArB,EAA4B,MAA5B,EAAkC;AAAA;;AAAA;;AAC9B,8BAAM,OAAN,EAAe,KAAf;AAEA,UAAM,CAAC,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA4B,aAAG,EAAG;AAC9B,YAAK,SAAL,CAAe,MAAM,CAAC,GAAD,CAArB,EAA4B,GAA5B;AACH,KAFD;AAH8B;AAMjC;;;EARmC,e;;AAAxC,gD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;AACA;;AAEA,IAAM,IAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;;AACA;;IAEa,Y;;;;;AAET,wBAAY,UAAZ,EAAwB,KAAxB,EAA+B,aAA/B,EAA4C;AAAA;;AAAA;;AACxC,QAAI,WAAW,GAAG,4BAAa,WAAb,GAA2B,IAA3B,CAAgC,IAAhC,EAAsC,IAAtC,CAA2C,cAAI,EAAG;AAChE,mBAAa,GAAG,gBAAO,OAAP,CAAe,aAAf,EAA8B,IAA9B,CAAhB;AACA,UAAI,QAAQ,GAAG,IAAI,CAAC,aAAL,CAAmB,wBAAnB,CAAf;AACA,cAAQ,CAAC,MAAT;AACA,cAAQ,CAAC,eAAT,CAAyB,IAAzB;AAEA,UAAI,iBAAiB,GAAG,IAAI,CAAC,aAAL,CAAmB,mBAAnB,CAAxB;;AANgE,iCAQxD,CARwD;AAS5D,YAAI,SAAS,GAAG,QAAQ,CAAC,SAAT,CAAmB,IAAnB,CAAhB;AAEA,YAAI,QAAQ,GAAG,IAAf;;AACA,YAAI,aAAJ,EAAkB;AACd,kBAAQ,GAAG,wBAAW,yBAAX,CAAqC,UAAU,CAAC,CAAD,CAA/C,CAAX;AACH,SAFD,MAGK;AACD,kBAAQ,GAAG,QAAQ,CAAC,aAAT,CAAuB,MAAvB,CAAX;AACA,kBAAQ,CAAC,SAAT,GAAqB,UAAU,CAAC,CAAD,CAA/B;AACH;;AACD,iBAAS,CAAC,aAAV,CAAwB,sBAAxB,EAAgD,WAAhD,CAA4D,QAA5D;AACA,iBAAS,CAAC,SAAD,CAAT,CAAqB,OAArB,IAAgC,CAAhC;AAEA,iBAAS,CAAC,gBAAV,CAA2B,OAA3B,EAAoC,YAAK;AACrC,gBAAK,OAAL,GAAe,CAAf;;AACA,gBAAK,KAAL;AACH,SAHD;AAIA,yBAAiB,CAAC,WAAlB,CAA8B,SAA9B;AA1B4D;;AAQhE,WAAI,IAAI,CAAR,IAAa,UAAb,EAAwB;AAAA,cAAhB,CAAgB;AAmBvB;;AACD,aAAO,IAAP;AACH,KA7BiB,CAAlB;AADwC,qCAgClC,WAhCkC,EAgCrB,KAhCqB;AAiC3C;;;EAnC6B,e;;AAAlC,oC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;;AACA;;IAEa,a;;;;;AAKT,yBAAY,OAAZ,EAAqB,KAArB,EAA4B,iBAA5B,EAAgD,gBAAhD,EAAiE;AAAA;;AAAA;;AAC7D,+BAAM,OAAN,EAAe,KAAf;AACA,UAAK,iBAAL,GAAyB,gBAAO,OAAP,CAAe,iBAAf,EAAkC,gBAAlC,CAAzB;AACA,UAAK,gBAAL,GAAwB,gBAAO,OAAP,CAAe,gBAAf,EAAiC,eAAjC,CAAxB;AAH6D;AAIhE;;;;WAEK,gBAAI;AAAA;;;;;;;;;;;;;;;AACN,qBAAK,SAAL,CAAe,KAAK,iBAApB,EAAuC,IAAvC;AACA,qBAAK,SAAL,CAAe,KAAK,gBAApB,EAAsC,KAAtC;iDAEO,OAAM,IAAN,CAAU,IAAV,CAAU,IAAV,C;;;;;;;;;AACV;;;WAGD,iBAAK;AACD,UAAI,gBAAO,MAAP,CAAc,KAAK,OAAnB,CAAJ,EACA;AACI,aAAK,OAAL,GAAe,KAAf;AACH;;AACD;AACH;;;;EAzB8B,e;;AAAnC,sC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;;IAEa,e;;;;;AAET,2BAAY,UAAZ,EAAwB,KAAxB,EAA6B;AAAA;;AAEzB,QAAI,aAAa,GAAG,EAApB;AACA,UAAM,CAAC,IAAP,CAAY,UAAZ,EAAwB,OAAxB,CAAgC,WAAC,EAAG;AAChC,UAAI,IAAI,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAX;AACA,UAAI,CAAC,GAAL,GAAW,UAAU,CAAC,CAAD,CAArB;AACA,mBAAa,CAAC,CAAD,CAAb,GAAmB,IAAnB;AACH,KAJD;AAHyB,6BASnB,aATmB,EASJ,KATI;AAU5B;;;EAZgC,mC;;AAArC,0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;IAEa,W;;;;;;;WACH,iBAAQ,KAAR,EAAe,WAAf,EAA4B,SAA5B,EAAuC,YAAvC,EAAsD,WAAtD,EAAoE,MAApE,EAA6E,UAA7E,EAA0F,cAA1F,EAA2G,WAA3G,EAAuH;;;;;;;AAEzH,2BAAW,GAAG,mBAAO,OAAP,CAAe,WAAf,EAA4B,IAA5B,CAAd;AACA,8BAAc,GAAG,mBAAO,OAAP,CAAe,cAAf,EAA+B,CAA/B,CAAjB;;AAEkB,uBAAM,KAAK,eAAL,CAAqB,KAArB,EAA4B,WAA5B,EAAyC,SAAzC,EAAoD,YAApD,EAAkE,WAAlE,EAA+E,MAA/E,EAAuF,UAAvF,EAAmG,cAAc,KAAK,CAAtH,CAAN;;;AAAd,2B;;sBAEA,cAAc,GAAG,C;;;;;;AACjB,uBAAM,IAAI,OAAJ,CAAY,WAAC,EAAG;AAClB,4BAAU,CAAC,CAAD,EAAI,cAAJ,CAAV;AACA,6BAAW,CAAC,KAAZ,CAAkB,QAAlB,GAA6B,WAAW,GAAG,IAA3C;AACH,iBAHK,CAAN;;;AAMA,oB,GAAO,I;;AACP,wB,GAAW,SAAX,QAAW;AACX,yBAAO,IAAI,OAAJ,CAAY,iBAAO,EAAG;AACzB,wBAAI,OAAO,GAAI,OAAO,WAAP,KAAuB,QAAxB,GAAoC,WAApC,GAAkD,GAAhE;AACA,8BAAU,CAAC,YAAK;AACZ,6BAAO,CAAC,IAAI,CAAC,OAAL,CAAa,KAAb,EAAoB,WAApB,EAAiC,SAAjC,EAA4C,YAA5C,EAA0D,WAA1D,EAAuE,MAAvE,EAA+E,UAA/E,EAA2F,cAA3F,EAA2G,KAA3G,CAAD,CAAP;AACH,qBAFS,EAEP,OAFO,CAAV;AAGH,mBALM,CAAP;AAMH,iB;;AACD,oBAAI,WAAW,KAAK,KAApB,EAA2B;AACvB,wBAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,QAAlC;AACH;;iDACM,Q;;;;;;;;;AACV;;;WAEK,qBAAY,WAAZ,EAAyB,SAAzB,EAAoC,YAApC,EAAmD,WAAnD,EAAiE,MAAjE,EAA0E,UAA1E,EAAuF,SAAvF,EAAmG,WAAnG,EAA+G;;;;;;kDAC1G,KAAK,OAAL,CAAa,CAAb,EAAgB,WAAhB,EAA6B,SAA7B,EAAwC,YAAxC,EAAsD,WAAtD,EAAmE,MAAnE,EAA2E,UAA3E,EAAuF,SAAvF,EAAkG,WAAlG,C;;;;;;;;;AACV;;;WAEK,yBAAgB,KAAhB,EAAuB,WAAvB,EAAoC,SAApC,EAA+C,YAA/C,EAA6D,WAA7D,EAA0E,MAA1E,EAAkF,UAAlF,EAA8F,WAA9F,EAAyG;;;;;;;AAC3G,sBAAM,GAAG,mBAAO,OAAP,CAAe,MAAf,EAAuB,EAAvB,CAAT;AACA,4BAAY,GAAG,mBAAO,OAAP,CAAe,YAAf,EAA6B,KAA7B,CAAf;AACA,2BAAW,GAAG,mBAAO,OAAP,CAAe,WAAf,EAA4B,KAA5B,CAAd;AACA,0BAAU,GAAG,mBAAO,OAAP,CAAe,UAAf,EAA2B,WAAW,CAAC,SAAZ,CAAsB,MAAjD,CAAb;AACA,2BAAW,GAAG,mBAAO,OAAP,CAAe,WAAf,EAA4B,IAA5B,CAAd;AAEI,oC,GAAuB,SAAS,CAAC,SAAV,CAAoB,QAApB,CAA6B,eAA7B,C;;AAE3B,oBAAI,CAAC,oBAAL,EAA2B;AACvB,2BAAS,CAAC,SAAV,CAAoB,GAApB,CAAwB,eAAxB;AACH;;AAEK,0B,GAAa,C;AACf,4B,GAAe,C;AACf,uB,GAAU,E;;AAEd,qBAAS,CAAT,GAAa,CAAb,EAAgB,CAAC,GAAG,UAApB,EAAgC,CAAC,EAAjC,EAAqC;AACjC,yBAAO,CAAC,IAAR,CAAa,CAAb;AACH;;AAEG,8B,GAAiB,WAAW,CAAC,KAAZ,CAAkB,Q;AACnC,+B,GAAkB,C;AAElB,yB,GAAY,C;AACZ,0B,GAAa,C;AACb,8B,GAAiB,C;AACjB,+B,GAAkB,C;;;AAElB,+BAAe,IAAI,OAAO,CAAC,YAAD,CAAP,IAAyB,UAAU,GAAG,CAAtC,CAAnB;AACA,2BAAW,CAAC,KAAZ,CAAkB,QAAlB,GAA6B,eAAe,GAAG,IAA/C;AAEI,8B,GAAiB,MAAM,CAAC,gBAAP,CAAwB,SAAxB,C;AAErB,8BAAc,GAAG,UAAU,CAAC,cAAc,CAAC,gBAAf,CAAgC,OAAhC,EAAyC,OAAzC,CAAiD,IAAjD,EAAuD,EAAvD,CAAD,CAA3B;AACA,+BAAe,GAAG,UAAU,CAAC,cAAc,CAAC,gBAAf,CAAgC,QAAhC,EAA0C,OAA1C,CAAkD,IAAlD,EAAwD,EAAxD,CAAD,CAA5B;AAEA,yBAAS,GAAG,cAAc,GAAG,WAAW,CAAC,WAAzC;AACA,0BAAU,GAAG,eAAe,GAAG,WAAW,CAAC,YAA3C;AAEA,4BAAY,GAAG,CAAC,YAAY,GAAC,CAAd,IAAiB,UAAhC;AACI,uB,GAAW,WAAW,GAAG,UAAH,GAAiB,YAAY,GAAG,SAAH,GAAe,IAAI,CAAC,GAAL,CAAS,SAAT,EAAoB,UAApB,C;;sBAClE,OAAO,KAAK,OAAO,CAAC,CAAC,YAAY,GAAC,CAAd,IAAiB,UAAlB,C;;;;;;;;AAGvB,uBAAO,CAAC,YAAD,CAAP,GAAwB,OAAxB;;;oBACK,CAAC,SAAS,GAAG,CAAC,IAAI,KAAL,IAAc,cAA1B,IAA4C,WAA7C,MAA8D,UAAU,GAAG,CAAC,IAAI,KAAL,IAAc,eAA3B,IAA8C,YAA5G,C;;;;;;AAET,+BAAe,IAAI,MAAnB;AACA,2BAAW,CAAC,KAAZ,CAAkB,QAAlB,GAA+B,WAAD,GAAgB,eAAe,GAAG,IAAlC,GAAyC,cAAvE;;oBAEK,oB;;;;;;AACD,uBAAM,IAAI,OAAJ,CAAY,UAAC,CAAD,EAAM;AACpB,4BAAU,CAAC,CAAD,EAAI,EAAJ,CAAV;AACH,iBAFK,CAAN;;;AAGA,yBAAS,CAAC,SAAV,CAAoB,MAApB,CAA2B,eAA3B;;;kDAGG,e;;;;;;;;;AACV;;;;;;AA7FL,kC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;IAEa,a;;;;;;;WACT,eAAmB,YAAnB,EAA+B;;;;;;iDACpB,IAAI,OAAJ,CAAY,WAAC,EAAG;AACnB,4BAAU,CAAC,CAAD,EAAI,YAAJ,CAAV;AACH,iBAFM,C;;;;;;;;;AAGV;;;WAED,0BAA8B,IAA9B,EAAoC,KAApC,EAA2C,KAA3C,EAAgD;;;;;;;AAC5C,qBAAK,GAAG,gBAAO,OAAP,CAAe,KAAf,EAAsB,CAAtB,CAAR;AACA,qBAAK,GAAG,gBAAO,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAR;AAEQ,iB,GAAI,C;;;sBAAG,CAAC,GAAG,K;;;;;;AACL,uBAAM,IAAI,EAAV;;;AAAN,mB;;sBACA,GAAG,KAAK,S;;;;;kDACD,G;;;;AAGP,uBAAM,aAAa,CAAC,KAAd,CAAoB,KAApB,CAAN;;;AANkB,iBAAC,E;;;;;kDASpB,S;;;;;;;;;AACV;;;WAED,yBAA6B,IAA7B,EAAmC,OAAnC,EAA4C,KAA5C,EAAiD;;;;;;;;AAC7C,uBAAO,GAAG,gBAAO,OAAP,CAAe,OAAf,EAAwB,GAAxB,CAAV;AACA,qBAAK,GAAG,gBAAO,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAR;kDAEO,IAAI,OAAJ,CAAY,UAAO,OAAP,EAAgB,MAAhB;AAAA,yBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AACrC,qCADqC,GACzB,IADyB;AAEzC,yCAAa,CAAC,KAAd,CAAoB,OAApB,EAA6B,IAA7B,CAAkC,YAAK;AACnC,oCAAM,CAAC,IAAI,KAAJ,CAAU,SAAV,CAAD,CAAN;AACA,uCAAS,GAAG,KAAZ;AACH,6BAHD;;AAFyC;AAAA,iCAOnC,SAPmC;AAAA;AAAA;AAAA;;AAAA;AAQ3B,mCAAM,IAAI,EAAV;;AAR2B;AAQjC,+BARiC;;AAAA,kCASjC,GAAG,KAAK,SATyB;AAAA;AAAA;AAAA;;AAUjC,mCAAO,CAAC,GAAD,CAAP;AAViC;;AAAA;AAAA;AAarC,mCAAM,aAAa,CAAC,KAAd,CAAoB,KAApB,CAAN;;AAbqC;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA1B;AAAA,iBAAZ,C;;;;;;;;;AAgBV;;;;;;AA3CL,sC;;;;;;ACFA,iBAAiB,qBAAuB,2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AnYAxC,gD;;;;;;;;;;;;;;;;;;AoYAA,iBAAiB,qBAAuB,yB;;;;;;ACAxC,iBAAiB,qBAAuB,kC;;;;;;ACAxC,iBAAiB,qBAAuB,8B;;;;;;ACAxC,iBAAiB,qBAAuB,gC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AACA;;AACA;;AACA;;AACA;;AACA;;IAEa,kB;;;;;AAOT;AAAA;;AAAA;;AACI;AACA,UAAK,SAAL,GAAiB;AACb,QAAE,EAAE,IADS;AAEb,cAAQ,EAAE,KAFG;AAGb,YAAM,EAAE,IAHK;AAIb,cAAQ,EAAE,IAJG;AAKb,WAAK,EAAE,IALM;AAMb,cAAQ,EAAE,kBAAkB,CAAC;AANhB,KAAjB;AAFJ;AAUC;;;;WAEK,oBAAQ;;;;;;;;AACG,uBAAM,8BAAqB,OAArB,CAA6B,sBAA7B,CAAN;;;AAAT,sB;;qBACA,gBAAO,SAAP,CAAiB,MAAjB,C;;;;;;AACW,uBAAM,YAAK,QAAL,CAAc,MAAd,EAAsB,YAAK,YAAL,EAAtB,CAAN;;;AAAP,oB;;sBAEA,gBAAO,SAAP,CAAiB,IAAjB,KAA0B,IAAI,CAAC,SAA/B,IAA4C,CAAC,IAAI,CAAC,O;;;;;;AAClD,uBAAM,KAAK,oBAAL,CAA0B,IAA1B,CAAN;;;iDAGD,KAAK,S;;;;;;;;;AACf;;;WAEK,8BAAqB,IAArB,EAAyB;;;;;;;;;AACvB,wB,GAAW,E;AAEX,qB,GAAQ,IAAI,CAAC,K;AACb,uB,GAAU,E;AACd,qBAAK,CAAC,OAAN,CAAc,cAAI,EAAG;AACjB,yBAAO,CAAC,IAAR,CAAa,IAAI,CAAC,EAAlB;AACH,iBAFD;;AAIQ,uBAAM,YAAK,SAAL,CAAe,OAAf,EAAwB,CAAC,UAAD,CAAxB,CAAN;;;AAAR,qB;;AAEA,uBAAM,gBAAO,YAAP,CAAoB,KAApB,EAA2B,UAAM,IAAN;AAAA,yBAAa;AAAA;AAAA;AAAA;AAAA;AAAA,2CAC1C,QAAQ,CAAC,IADiC;AAAA,2CAC1C,QAD0C;AAAA;AAAA;AACzB,mCAAM,KAAK,oBAAL,CAA0B,IAA1B,CAAN;;AADyB;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAb;AAAA,iBAA3B,CAAN;;;AAGI,2B,GAAc,E;AAClB,wBAAQ,CAAC,OAAT,CAAiB,gBAAM,EAAG;AACtB,6BAAW,CAAC,IAAZ,CAAiB,MAAM,CAAC,IAAxB;AACH,iBAFD;AAIA,qBAAK,SAAL,GAAiB;AACb,oBAAE,EAAE,IAAI,CAAC,EADI;AAEb,0BAAQ,EAAE,IAFG;AAGb,wBAAM,EAAE,IAHK;AAIb,0BAAQ,EAAE,IAAI,CAAC,QAJF;AAKb,uBAAK,EAAE,IAAI,CAAC,KALC;AAMb,0BAAQ,EAAE;AANG,iBAAjB;;;;;;;;;AAQH;;;WAEK,kBAAS,KAAT,EAAgB,QAAhB,EAA0B,SAA1B,EAAmC;;;;;;;;AAE1B,uBAAM,YAAK,OAAL,CAAa;AAC1B,2BAAS,KADiB;AAE1B,8BAAY,KAAK,aAAL,CAAmB,QAAnB,CAFc;AAG1B,+BAAa,IAHa;AAI1B,6BAAW;AAJe,iBAAb,EAKd,SALc,EAKH,SALG,EAKQ,YAAK,YAAL,EALR,CAAN;;;AAAP,oB;;qBAOA,I;;;;;;AACA,uBAAM,KAAK,oBAAL,CAA0B,IAA1B,CAAN;;;qBAEI,S;;;;;;AACA,uBAAM,8BAAqB,OAArB,CAA6B,sBAA7B,EAAqD,IAAI,CAAC,EAA1D,CAAN;;;kDAGG,I;;;kDAEJ,K;;;;;;;;;AACV;;;WAEK,qBAAS;;;;;;AACX,qBAAK,SAAL,GAAiB;AACb,oBAAE,EAAE,IADS;AAEb,0BAAQ,EAAE,KAFG;AAGb,wBAAM,EAAE,IAHK;AAIb,0BAAQ,EAAE,IAJG;AAKb,uBAAK,EAAE,IALM;AAMb,0BAAQ,EAAE,kBAAkB,CAAC;AANhB,iBAAjB;;AASA,uBAAM,8BAAqB,MAArB,CAA4B,sBAA5B,CAAN;;;kDACO,K;;;;;;;;;AACV;;;WAEK,8BAAqB,IAArB,EAAyB;;;;;;;;;AACvB,wB,GAAW,IAAI,CAAC,Q;;AAET,uBAAM,0BAAiB,WAAjB,GAA+B,cAA/B,CAA8C,YAAK,aAAL,EAA9C,CAAN;;;AAAP,oB;;AACU,uBAAM,IAAI,CAAC,kBAAL,CAAwB,YAAK,aAAL,EAAxB,EACf,iBADe,CACG,YAAK,aAAL,KAAuB,WAD1B,EACuC,QADvC,EAEf,iBAFe,CAEG,YAAK,aAAL,KAAuB,WAF1B,EAEuC,OAFvC,EAGf,KAHe,CAGT,gBAHS,EAGS;AAAC,oBAAE,EAAE,IAAI,CAAC;AAAV,iBAHT,EAIf,OAJe,EAAN;;;AAAV,uB;;AAMJ,uBAAM,gBAAO,YAAP,CAAoB,OAApB,EAA6B,UAAM,IAAN;AAAA,yBAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACxB,mCAAM,KAAK,oBAAL,CAA0B,IAA1B,CAAN;;AADwB;AACxC,yCADwC;AAE5C,oCAAQ,CAAC,IAAT,eAAQ,qBAAS,aAAT,EAAR;;AAF4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAb;AAAA,iBAA7B,CAAN;;;kDAIO,Q;;;;;;;;;AACV;;;WAEK,qBAAY,KAAZ,EAAmB,QAAnB,EAA6B,QAA7B,EAAqC;;;;;;;AACnC,sB,GAAS,E;;AACD,uBAAM,OAAO,CAAC,GAAR,CAAY,CAC1B,YAAK,OAAL,CAAa;AAAC,2BAAS;AAAV,iBAAb,CAD0B,EAE1B,YAAK,OAAL,CAAa;AAAC,8BAAY;AAAb,iBAAb,CAF0B,CAAZ,CAAN;;;AAAR,qB;;AAIJ,oBAAI,gBAAO,SAAP,CAAiB,KAAK,CAAC,CAAD,CAAtB,CAAJ,EAA+B;AAC3B,wBAAM,CAAC,OAAD,CAAN,GAAkB,0BAAlB;AACH;;AACD,oBAAI,gBAAO,SAAP,CAAiB,KAAK,CAAC,CAAD,CAAtB,CAAJ,EAA+B;AAC3B,wBAAM,CAAC,UAAD,CAAN,GAAqB,6BAArB;AACH;;sBAEG,MAAM,CAAC,IAAP,CAAY,MAAZ,EAAoB,MAApB,GAA6B,C;;;;;kDACtB,M;;;AAGP,oB,GAAO,IAAI,WAAJ,E;;AACD,uBAAM,kBAAkB,CAAC,SAAnB,EAAN;;;AAAV,oBAAI,CAAC,E;AACL,oBAAI,CAAC,KAAL,GAAa,KAAb;AACA,oBAAI,CAAC,QAAL,GAAgB,KAAK,aAAL,CAAmB,QAAnB,CAAhB;AACA,oBAAI,CAAC,QAAL,GAAgB,QAAhB;AACA,oBAAI,CAAC,KAAL,GAAa,kBAAkB,CAAC,aAAhC;AACA,oBAAI,CAAC,SAAL,GAAiB,IAAjB;;AACA,uBAAM,IAAI,CAAC,IAAL,EAAN;;;;AAGA,uBAAM,KAAK,KAAL,CAAW,KAAX,EAAkB,QAAlB,CAAN;;;kDAEO,I;;;;;;;;;AACV;;;WAWD,uBAAc,EAAd,EAAgB;AACZ,aAAO,EAAP;AACH;;;WAXD,qBAAsB;;;;;;;qBACd,gBAAO,MAAP,CAAc,kBAAkB,CAAC,OAAjC,C;;;;;;AACW,uBAAM,YAAK,OAAL,CAAa,SAAb,EAAwB;AAAC,wBAAO;AAAR,iBAAxB,CAAN;;;AAAP,oB;AACJ,kCAAkB,CAAC,OAAnB,GAA6B,IAAI,CAAC,EAAlC;;;AAEJ,kCAAkB,CAAC,OAAnB;kDACO,kBAAkB,CAAC,O;;;;;;;;;AAC7B;;;;EAvJmC,yB;;AAAxC;AA8JA,kBAAkB,CAAC,mBAAnB,GAAyC,0BAAY,gBAArD;AACA,kBAAkB,CAAC,aAAnB,GAAmC,EAAnC;AACA,kBAAkB,CAAC,OAAnB,GAA6B,IAA7B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;IAEa,W;AAAb;AAAA;;AAGI,yBAAgB,EAAhB;AACA,uBAAc,EAAd;AACA,+BAAsB,EAAtB;AACA,0BAAiB,EAAjB;AACA,8BAAqB,EAArB;AACA,yBAAgB,EAAhB;AAmVH;;;;WA/US,sCAA6B,OAA7B,EAAoC;;;;;;;AACtC,qBAAK,kBAAL,GAA0B,oCAAiB,QAAjB,EAA1B;AAEI,2B,GAAc,oBAAW,QAAX,CAAoB,OAApB,C;AAEd,8B,GAAiB,KAAK,kBAAL,CAAwB,WAAxB,C;;AACC,uBAAM,KAAK,kBAAL,CAAwB,KAAK,WAA7B,EAA0C,cAA1C,CAAN;;;AAAtB,qBAAK,c;AAEL,qBAAK,YAAL,GAAoB,KAAK,IAAL,CAAU,OAAV,CAApB;;qBAEI,MAAM,CAAC,QAAD,CAAN,CAAiB,KAAK,cAAtB,EAAsC,IAAtC,CAA2C,kBAAQ,EAAG;AACtD,yBAAO,QAAQ,CAAC,eAAD,CAAR,OAAgC,CAAvC;AACH,iBAFG,C;;;;;;AAGA,uBAAM,KAAK,YAAX;;;;;;;;;AAEP;;;WAEK,0BAAc;;;;;;kDACT,KAAK,Y;;;;;;;;;AACf;;;WAEK,cAAK,OAAL,EAAY;;;;;;;;;AAEd,qBAAK,kBAAL,GAA0B,oCAAiB,QAAjB,EAA1B;AAEI,8B,GAAiB,KAAK,kBAAL,CAAwB,OAAxB,C;;qBACjB,gBAAO,MAAP,CAAc,KAAK,cAAnB,C;;;;;;AACsB,uBAAM,KAAK,kBAAL,CAAwB,KAAK,WAA7B,EAA0C,cAA1C,CAAN;;;AAAtB,qBAAK,c;;;;AAGS,uBAAM,KAAK,OAAL,CAAa,cAAb,CAAN;;;AAAd,2B;;AACJ,uBAAM,KAAK,gBAAL,EAAN;;;AAEA;AACI,gC,GAAmB,E;AACvB,sBAAM,CAAC,IAAP,CAAY,KAAK,cAAjB,EAAiC,OAAjC,CAAyC,eAAK,EAAG;AAC7C,kCAAgB,CAAC,IAAjB,CAAsB,KAAI,CAAC,cAAL,CAAoB,KAApB,EAA2B,IAA3B,EAAtB;AACH,iBAFD;;AAGA,uBAAM,OAAO,CAAC,GAAR,CAAY,gBAAZ,CAAN;;;AAEA;AACI,wB,GAAW,E;AACf,2BAAW,CAAC,OAAZ,CAAoB,aAAG,EAAG;AACtB,sBAAI,GAAJ,EAAS;AACL,wBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAL,CAAb,EAA0B;AACtB,8BAAQ,CAAC,GAAG,CAAC,KAAL,CAAR,GAAsB;AAClB,mCAAW,EADO;AAElB,mCAAW;AAFO,uBAAtB;AAIH;;AACD,wBAAI,GAAG,CAAC,OAAR,EAAiB;AACb,8BAAQ,CAAC,GAAG,CAAC,KAAL,CAAR,CAAoB,SAApB,IAAiC,QAAQ,CAAC,GAAG,CAAC,KAAL,CAAR,CAAoB,SAApB,EAA+B,MAA/B,CAAsC,GAAG,CAAC,QAA1C,CAAjC;AACH,qBAFD,MAEO;AACH,8BAAQ,CAAC,GAAG,CAAC,KAAL,CAAR,CAAoB,SAApB,IAAiC,QAAQ,CAAC,GAAG,CAAC,KAAL,CAAR,CAAoB,SAApB,EAA+B,MAA/B,CAAsC,GAAG,CAAC,QAA1C,CAAjC;AACH;AACJ;AACJ,iBAdD;;sBAgBI,QAAQ,CAAC,YAAD,CAAR,IAA0B,QAAQ,CAAC,YAAD,CAAR,CAAuB,SAAvB,C;;;;;;AAC1B,uBAAM,oCAAiB,aAAjB,CAA+B,QAAQ,CAAC,YAAD,CAAR,CAAuB,SAAvB,CAA/B,CAAN;;;kDAGG,Q;;;;;;;;;AACV;;;WAEa,iBAAQ,cAAR,EAAsB;;;;;;;;;;AAChC;AACI,6B,GAAgB,I;AAEhB,wB,GAAW,I;AACX,sB,GAAS,C;AAET,8B,GAAiB,K,EAErB;;;;;;;;AAEI,wCAAc,GAAG,KAAjB;;AACW,iCAAM,WAAW,CAAC,WAAZ,CAAwB,cAAxB,EAAwC,MAAxC,CAAN;;;AAAX,kC;AACA,gCAAM,GAAG,QAAQ,CAAC,YAAD,CAAjB,C,CAEA;;AACA,8BAAI,gBAAO,MAAP,CAAc,aAAd,CAAJ,EAAkC;AAC9B,yCAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAD,CAAT,CAAxB;AACA,kCAAM,CAAC,IAAP,CAAY,MAAI,CAAC,cAAjB,EAAiC,OAAjC,CAAyC,aAAG,EAAG;AAC3C,oCAAI,CAAC,cAAL,CAAoB,GAApB,EAAyB,aAAzB,CAAuC,aAAvC;AACH,6BAFD;AAGH,2B,CAED;;;AACI,2C,GAAoB,E;AAExB,kCAAQ,CAAC,OAAT,CAAiB,OAAjB,CAAyB,UAAC,GAAD,EAAM,CAAN,EAAW;AAChC,gCAAI,MAAI,CAAC,gBAAL,CAAsB,GAAtB,CAAJ,EAAgC;AAC5B,4CAAc,GAAG,IAAjB;AACA,+CAAiB,CAAC,IAAlB,CAAuB,cAAc,CAAC,CAAD,CAArC;AACH;AACJ,2BALD;AAMA,wCAAc,GAAG,iBAAjB;;;;;;;;;;;;;;oBAEG,c;;;;;;kDAEA,OAAO,CAAC,GAAR,CAAY,KAAK,aAAjB,C;;;;;;;;;AACV;;;WAEa,4BAAgB;;;;;;;;;AAEtB,+B,GAAkB,E;AAClB,gC,GAAmB,E;AAEvB,sBAAM,CAAC,IAAP,CAAY,KAAK,mBAAjB,EAAsC,OAAtC,CAA8C,wBAAc,EAAG;AAC3D,sBAAI,mBAAmB,GAAG,MAAI,CAAC,kBAAL,CAAwB,cAAxB,EAAwC,sBAAxC,EAA1B;;AAEA,wBAAM,CAAC,IAAP,CAAY,MAAI,CAAC,mBAAL,CAAyB,cAAzB,CAAZ,EAAsD,OAAtD,CAA8D,YAAE,EAAG;AAC/D,wBAAI,MAAM,GAAG,MAAI,CAAC,mBAAL,CAAyB,cAAzB,EAAyC,EAAzC,EAA6C,QAA7C,CAAb;AACA,wBAAI,SAAS,GAAG,MAAI,CAAC,mBAAL,CAAyB,cAAzB,EAAyC,EAAzC,EAA6C,WAA7C,CAAhB;AACA,wBAAI,sBAAsB,GAAG,EAA7B;AAEA,0BAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,kBAAQ,EAAG;AAEtC;AACA,0BAAI,YAAY,GAAG,MAAI,CAAC,qBAAL,CAA2B,mBAA3B,EAAgD,QAAhD,EAA0D,SAA1D,EAAqE,eAArE,EAAsF,MAAtF,CAAnB;;AAEA,4CAAsB,CAAC,IAAvB,CAA4B,YAAY,CAAC,IAAb,CAAkB,eAAK,EAAG;AAC9C,8BAAM,CAAC,QAAD,CAAN,GAAmB,KAAnB;AACP,uBAF2B,CAA5B;AAGH,qBARD,EAL+D,CAe/D;;AACA,oCAAgB,CAAC,IAAjB,CAAsB,OAAO,CAAC,GAAR,CAAY,sBAAZ,EAAoC,IAApC,CAAyC,YAAK;AAChE,6BAAO,MAAM,CAAC,IAAP,CAAY,IAAZ,CAAP;AACH,qBAFqB,CAAtB;AAGH,mBAnBD;AAoBH,iBAvBD,E,CAyBA;;;AACA,uBAAM,OAAO,CAAC,GAAR,CAAY,gBAAZ,CAAN;;;;AAEA,uBAAM,gBAAO,YAAP,CAAoB,MAAM,CAAC,IAAP,CAAY,eAAZ,CAApB,EAAkD,UAAM,KAAN;AAAA,yBAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CACnD,eADmD;AAAA;AAC9B,mCAAM,KAAK,kBAAL,CAAwB,KAAxB,EAA+B,SAA/B,CAAyC,MAAM,CAAC,IAAP,CAAY,eAAe,CAAC,KAAD,CAA3B,CAAzC,EAA8E,KAAK,kBAAL,CAAwB,KAAxB,EAA+B,YAA/B,EAA9E,CAAN;;AAD8B;AAAA;;AAAA,2CACsG,WAAC;AAAA,qCAAI,CAAC,CAAC,EAAN;AAAA,6BADvG;;AAC9D,oCAD8D,gBAC5C,aAD4C;AAElE,kCAAM,CAAC,IAAP,CAAY,eAAe,CAAC,KAAD,CAA3B,EAAoC,OAApC,CAA4C,YAAE,EAAG;AAC7C,kCAAI,QAAQ,CAAC,EAAD,CAAZ,EAAkB;AACd,sCAAM,CAAC,IAAP,CAAY,eAAe,CAAC,KAAD,CAAf,CAAuB,EAAvB,CAAZ,EAAwC,OAAxC,CAAgD,kBAAQ,EAAG;AACvD,sCAAI,KAAK,CAAC,OAAN,CAAc,eAAe,CAAC,KAAD,CAAf,CAAuB,EAAvB,EAA2B,QAA3B,CAAd,CAAJ,EAAyD;AACrD,4CAAQ,CAAC,EAAD,CAAR,CAAa,QAAb,IAAyB,gBAAO,OAAP,CAAe,QAAQ,CAAC,EAAD,CAAR,CAAa,QAAb,CAAf,EAAuC,EAAvC,CAAzB;AACA,4CAAQ,CAAC,EAAD,CAAR,CAAa,QAAb,EAAuB,IAAvB,CAA4B,KAA5B,CAAkC,QAAQ,CAAC,EAAD,CAAR,CAAa,QAAb,CAAlC,EAA0D,eAAe,CAAC,KAAD,CAAf,CAAuB,EAAvB,EAA2B,QAA3B,CAA1D;AACH,mCAHD,MAGO;AACH,4CAAQ,CAAC,EAAD,CAAR,CAAa,QAAb,IAAyB,eAAe,CAAC,KAAD,CAAf,CAAuB,EAAvB,EAA2B,QAA3B,CAAzB;AACH;AACJ,iCAPD;AAQH;AACJ,6BAXD;AAFkE;AAclE,mCAAM,oCAAiB,WAAjB,GAA+B,UAA/B,CAA0C,MAAM,CAAC,MAAP,CAAc,QAAd,CAA1C,CAAN;;AAdkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAd;AAAA,iBAAlD,EAeH,IAfG,CAAN;;;;;;;;;AAgBH;;;WAEO,+BAAsB,mBAAtB,EAA2C,YAA3C,EAAiE,SAAjE,EAA4E,eAA5E,EAAiG,MAAjG,EAAuG;AAAA;;AAC3G,UAAI,YAAY,GAAG,OAAO,CAAC,OAAR,CAAgB,SAAhB,CAAnB;AACA,UAAI,MAAM,GAAG,mBAAmB,CAAC,YAAD,CAAnB,CAAkC,QAAlC,CAAb;AACA,UAAI,UAAU,GAAI,mBAAmB,CAAC,YAAD,CAAnB,CAAkC,IAAlC,KAA2C,KAA7D,CAH2G,CAK3G;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,SAAS,CAAC,YAAD,CAAvB,CAAJ,EAA4C;AACxC,YAAI,UAAU,IAAI,SAAS,CAAC,YAAD,CAAT,CAAwB,KAAxB,CAA8B,YAAE;AAAA,iBAAI,CAAC,gBAAO,KAAP,CAAa,MAAI,CAAC,aAAlB,EAAiC,MAAjC,EAAyC,EAAzC,CAAL;AAAA,SAAhC,CAAlB,EAAsG;AAClG,sBAAY,GAAG,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,SAAhC,CAA0C,SAAS,CAAC,YAAD,CAAnD,CAAf;AACH,SAFD,MAEO;AACH,cAAI,wBAAwB,GAAG,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,sBAAhC,GAAyD,mBAAmB,CAAC,YAAD,CAAnB,CAAkC,aAAlC,CAAzD,CAA/B;;AACA,mBAAS,CAAC,YAAD,CAAT,CAAwB,MAAxB,CAA+B,YAAE;AAAA,mBAAI,CAAC,gBAAO,KAAP,CAAa,MAAI,CAAC,mBAAlB,EAAuC,MAAvC,EAA+C,EAA/C,CAAL;AAAA,WAAjC,EAA0F,OAA1F,CAAkG,YAAE,EAAG;AACnG,2BAAe,CAAC,MAAD,CAAf,GAA0B,gBAAO,OAAP,CAAe,eAAe,CAAC,MAAD,CAA9B,EAAwC,EAAxC,CAA1B;AACA,2BAAe,CAAC,MAAD,CAAf,CAAwB,EAAxB,IAA8B,gBAAO,OAAP,CAAe,eAAe,CAAC,MAAD,CAAf,CAAwB,EAAxB,CAAf,EAA4C,EAA5C,CAA9B;AAEA,gBAAI,kBAAkB,GAAG,IAAzB;;AACA,gBAAI,wBAAwB,CAAC,IAAzB,KAAkC,cAAlC,IAAoD,wBAAwB,CAAC,IAAzB,KAAkC,aAA1F,EAAyG;AACrG,gCAAkB,GAAG,gBAAO,OAAP,CAAe,eAAe,CAAC,MAAD,CAAf,CAAwB,EAAxB,EAA4B,mBAAmB,CAAC,YAAD,CAAnB,CAAkC,aAAlC,CAA5B,CAAf,EAA8F,EAA9F,CAArB;AACA,gCAAkB,CAAC,IAAnB,CAAwB,MAAxB;AACH,aAHD,MAGO;AACH,gCAAkB,GAAG,MAArB;AACH;;AACD,2BAAe,CAAC,MAAD,CAAf,CAAwB,EAAxB,EAA4B,mBAAmB,CAAC,YAAD,CAAnB,CAAkC,aAAlC,CAA5B,IAAgF,kBAAhF;AACH,WAZD;AAaH;AACJ,OAnBD,MAmBO,IAAI,UAAU,IAAI,CAAC,gBAAO,KAAP,CAAa,KAAK,aAAlB,EAAiC,MAAjC,EAAyC,SAAS,CAAC,YAAD,CAAlD,CAAnB,EAAsF;AACzF,oBAAY,GAAG,KAAK,kBAAL,CAAwB,MAAxB,EAAgC,QAAhC,CAAyC,SAAS,CAAC,YAAD,CAAlD,CAAf;AACH;;AACD,aAAO,YAAP;AACH;AAED;;;;;AAKG;;;;WACK,0BAAiB,QAAjB,EAAyB;AAAA;;AAC7B,UAAI,CAAC,QAAL,EAAe;AACX,eAAO,KAAP;AACH;;AAED,UAAI,cAAc,GAAG,KAArB;AAEA,UAAI,UAAU,GAAG,KAAK,kBAAL,CAAwB,QAAQ,CAAC,OAAD,CAAhC,CAAjB;AACA,UAAI,SAAS,GAAG,UAAU,CAAC,aAAX,EAAhB;AAEA,UAAI,gBAAgB,GAAG,EAAvB;AACA,UAAI,aAAa,GAAG,EAApB,CAX6B,CAa7B;;AACA,cAAQ,CAAC,UAAD,CAAR,CAAqB,OAArB,CAA6B,gBAAM,EAAG;AAClC,YAAI,MAAM,CAAC,OAAX,EAAoB;AAChB,0BAAgB,CAAC,IAAjB,CAAsB,MAAM,CAAC,EAA7B;AACH,SAFD,MAEO;AACH,uBAAa,CAAC,IAAd,CAAmB,MAAnB;AACH;AACJ,OAND;AAQA,WAAK,aAAL,CAAmB,SAAnB,IAAgC,gBAAO,OAAP,CAAe,KAAK,aAAL,CAAmB,SAAnB,CAAf,EAA8C,EAA9C,CAAhC,CAtB6B,CAwB7B;;AACA,WAAK,aAAL,CAAmB,IAAnB,CAAwB,UAAU,CAAC,SAAX,CAAqB,aAArB,EAAoC,IAApC,CAAyC,UAAM,eAAN;AAAA,eAAwB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AACjF,2BADiF,GACrE,UAAU,CAAC,sBAAX,EADqE;AAEjF,wBAFiF,GAExE,EAFwE;AAGrF,iCAAe,CAAC,OAAhB,CAAwB,gBAAM,EAAG;AAC7B,0BAAI,CAAC,aAAL,CAAmB,SAAnB,EAA8B,MAAM,CAAC,EAArC,IAA2C,MAA3C;AAEA,0BAAM,CAAC,IAAP,CAAY,MAAM,CAAC,EAAnB;AACA,0BAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,kBAAQ,EAAG;AACtC,0BAAI,MAAM,CAAC,QAAD,CAAV,EAAsB;AAClB,8BAAI,CAAC,YAAL,CAAkB,SAAlB,EAA6B,MAA7B,EAAqC,QAArC,EADkB,CAGlB;;;AACA,8BAAM,CAAC,QAAD,CAAN,GAAmB,IAAnB;AACH;AACJ,qBAPD;AAQH,mBAZD,EAHqF,CAiBrF;;AAjBqF,wBAkBjF,UAAU,CAAC,SAAX,YAAgC,2CAlBiD;AAAA;AAAA;AAAA;;AAAA;AAmBhE,yBAAM,UAAU,CAAC,SAAX,CAAqB,MAArB,CAAN;;AAnBgE;AAmB7E,4BAnB6E;AAoB7E,+BApB6E,GAoB7D,gBAAO,aAAP,CAAqB,eAArB,EAAsC,yBAAe;AAAA,2BAAI,eAAe,CAAC,EAApB;AAAA,mBAArD,CApB6D;AAqBjF,4BAAU,CAAC,OAAX,CAAmB,aAAG,EAAG;AACrB,iCAAa,CAAC,GAAG,CAAC,EAAL,CAAb,CAAsB,QAAtB,GAAiC,GAAG,CAAC,QAArC;AACH,mBAFD;;AArBiF;AAAA,oDA0B9E,oCAAiB,WAAjB,GAA+B,UAA/B,CAA0C,eAA1C,EAA2D,IAA3D,CAAgE,aAAG,EAAG;AACzE,2BAAO;AACH,+BAAS,SADN;AAEH,kCAAY,GAFT;AAGH,iCAAW;AAHR,qBAAP;AAKH,mBANM,EAMJ,KANI,CAME,WAAC,EAAG;AACT,2BAAO,CAAC,KAAR,CAAc,CAAd;AACA,2BAAO,OAAO,CAAC,MAAR,CAAe,CAAf,CAAP;AACH,mBATM,CA1B8E;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAxB;AAAA,OAAzC,CAAxB,EAzB6B,CA+D7B;;;AACA,WAAK,aAAL,CAAmB,IAAnB,CAAwB,oCAAiB,WAAjB,GAA+B,YAA/B,CAA4C,gBAA5C,EAA8D,UAA9D,EAA0E,IAA1E,CAA+E,aAAG,EAAG;AACzG,eAAO;AACH,mBAAS,SADN;AAEH,sBAAY,GAFT;AAGH,qBAAW;AAHR,SAAP;AAKH,OANuB,EAMrB,KANqB,CAMf,WAAC,EAAG;AACT,eAAO,CAAC,KAAR,CAAc,CAAd;AACA,eAAO,OAAO,CAAC,MAAR,CAAe,CAAf,CAAP;AACH,OATuB,CAAxB;;AAWA,UAAI,QAAQ,CAAC,cAAb,EAA6B;AACzB,sBAAc,GAAG,IAAjB;AACH;;AAED,aAAO,cAAP;AACH;;;WAEO,4BAAmB,OAAnB,EAA0B;AAAA;;AAC9B,UAAI,cAAc,GAAG,EAArB,CAD8B,CAG9B;;AACA,aAAO,CAAC,OAAR,CAAgB,eAAK,EAAG;AACpB,YAAI,KAAK,CAAC,SAAN,YAA2B,qCAA/B,EAAkD;AAC9C,eAAK,GAAG;AACJ,iBAAK,EAAE,KADH;AAEJ,iBAAK,EAAE;AAFH,WAAR;AAIH;;AACD,aAAK,CAAC,KAAN,GAAc,KAAK,CAAC,KAAN,CAAY,aAAZ,EAAd;;AACA,cAAI,CAAC,WAAL,CAAiB,IAAjB,CAAsB,KAAK,CAAC,KAA5B;;AACA,sBAAc,CAAC,IAAf,CAAoB,KAApB;AACA,YAAI,GAAG,GAAG,KAAK,KAAK,CAAC,KAAX,GAAmB,IAAI,CAAC,SAAL,CAAe,KAAK,CAAC,KAArB,CAA7B;;AACA,YAAI,gBAAO,SAAP,CAAiB,MAAI,CAAC,cAAL,CAAoB,GAApB,CAAjB,CAAJ,EAA+C;AAC3C,eAAK,CAAC,YAAD,CAAL,GAAsB,MAAI,CAAC,cAAL,CAAoB,GAApB,EAAyB,aAAzB,EAAtB;AACH;AACJ,OAdD;AAgBA,aAAO,cAAP;AACH;;;WAEa,4BAAmB,UAAnB,EAA+B,cAA/B,EAA6C;;;;;;;;AAE7B,uBAAM,8BAAc,IAAd,CAAmB;AAC/C,2BACI,OAAO,CAAC,EAAR,CAAW,UAAX;AAF2C,iBAAnB,CAAN;;;AAAtB,mC;AAKA,6B,GAAgB,gBAAO,aAAP,CAAqB,mBAArB,EAA0C,eAAK;AAAA,yBAAI,KAAK,KAAK,CAAC,QAAN,EAAL,GAAwB,IAAI,CAAC,SAAL,CAAe,KAAK,CAAC,KAArB,CAA5B;AAAA,iBAA/C,C;AACpB,8BAAc,CAAC,OAAf,CAAuB,eAAK,EAAG;AAC3B,sBAAI,GAAG,GAAG,KAAK,KAAK,CAAC,KAAX,GAAmB,IAAI,CAAC,SAAL,CAAe,KAAK,CAAC,KAArB,CAA7B;;AACA,sBAAI,gBAAO,MAAP,CAAc,aAAa,CAAC,GAAD,CAA3B,CAAJ,EAAuC;AACnC,wBAAI,YAAY,GAAG,IAAI,6BAAJ,EAAnB;AACA,gCAAY,CAAC,QAAb,CAAsB,KAAK,CAAC,KAA5B;AACA,gCAAY,CAAC,KAAb,GAAqB,KAAK,CAAC,KAA3B;AACA,gCAAY,CAAC,aAAb,CAA2B,CAA3B;AACA,iCAAa,CAAC,GAAD,CAAb,GAAqB,YAArB;AACH;;AACD,uBAAK,CAAC,YAAD,CAAL,GAAsB,aAAa,CAAC,GAAD,CAAb,CAAmB,aAAnB,EAAtB;AACH,iBAVD;kDAWO,a;;;;;;;;;AACV;;;WAEO,sBAAa,SAAb,EAAwB,MAAxB,EAAgC,QAAhC,EAAwC;AAC5C,WAAK,mBAAL,CAAyB,SAAzB,IAAsC,gBAAO,OAAP,CAAe,KAAK,mBAAL,CAAyB,SAAzB,CAAf,EAAoD,EAApD,CAAtC;AACA,WAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,IAAiD,gBAAO,OAAP,CAAe,KAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,CAAf,EAA+D,EAA/D,CAAjD;AACA,WAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,EAA+C,QAA/C,IAA2D,MAA3D;AACA,WAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,EAA+C,WAA/C,IAA8D,gBAAO,OAAP,CAAe,KAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,EAA+C,WAA/C,CAAf,EAA4E,EAA5E,CAA9D;AACA,WAAK,mBAAL,CAAyB,SAAzB,EAAoC,MAAM,CAAC,EAA3C,EAA+C,WAA/C,EAA4D,QAA5D,IAAwE,MAAM,CAAC,QAAD,CAA9E;AACA,aAAO,KAAK,mBAAZ;AACH;;;WAED,qBAAyB,KAAzB,EAAgC,MAAhC,EAAsC;;;;;;;AAC3B,uBAAM,qBAAY,IAAZ,CAAiB,WAAW,CAAC,gBAAZ,GAC1B,qBAAY,UAAZ,CAAuB;AACnB,6BAAW,IAAI,CAAC,SAAL,CAAe,KAAf,CADQ;AAEnB,4BAAU;AAFS,iBAAvB,CADS,CAAN;;;;;;;;;;;;AAKV;;;;;;AA1VL;AA6VA,WAAW,CAAC,gBAAZ,GAA+B,MAA/B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtWA;;AACA;;AACA;;AACA;;IAIa,gB;;;;;AAOT,4BAAY,WAAZ,EAAyB,IAAzB,EAA+B,KAA/B,EAAsC,YAAtC,EAAkD;AAAA;;AAAA;;AAC9C,+BAAM,WAAN,EAAmB,IAAnB,EAAyB,YAAzB;AACA,UAAK,aAAL,GAAqB,cAArB;AACA,UAAK,eAAL,GAAuB;AACnB,iBAAW;AACP,eAAO,EAAE,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,EAA2B,cAA3B,EAA2C,cAA3C,EAA2D,YAA3D,CADF;AAEP,qBAAa,EAAE,CAAC,SAAD,EAAY,OAAZ,EAAqB,cAArB,EAAqC,YAArC,EAAmD,cAAnD,EAAmE,aAAnE,EAAkF,OAAlF,EAA2F,cAA3F,EAA2G,YAA3G,EAAyH,uBAAzH,CAFR;AAGP,gBAAQ,EAAE;AAHH;AADQ,KAAvB;AAQA,UAAK,OAAL,GAAe,IAAf;AACA,UAAK,MAAL,GAAc,KAAd;AAZ8C;AAajD;;;;WAEK,iCAAwB,mBAAxB,EAA2C;;;;;;;oBAEvC,KAAK,MAAL,CAAY,SAAZ,YAAiC,qC;;;;;sBAC7B;AACF,2BAAS,0DAA0D,KAAK,MAAL,CAAY;AAD7E,iB;;;AAKN,sB,GAAS,I;;AACb,oBAAI,mBAAO,KAAP,CAAa,mBAAb,EAAkC,IAAlC,CAAJ,EAA6C;AACzC,wBAAM,GAAG,KAAK,MAAL,CAAY,QAAZ,CAAqB,mBAAmB,CAAC,IAAD,CAAxC,EAAgD,KAAK,MAAL,CAAY,YAAZ,EAAhD,CAAT;AACH;;AAED,oBAAI,mBAAO,MAAP,CAAc,MAAd,CAAJ,EAA2B;AACvB,wBAAM,GAAG,IAAI,KAAK,MAAT,EAAT;AACH;;iDACM,M;;;;;;;;;AACV;;;WAEK,qBAAY,mBAAZ,EAA+B;AAAA;;;;;;;;;;;;;;;;AAC7B,mB,GAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,C;;AACG,uBAAM,KAAK,uBAAL,CAA6B,mBAA7B,CAAN;;;AAAT,sB;;AACJ,oBAAI,MAAM,KAAK,IAAf,EAAqB;AACjB,uBAAK,SAAL,CAAe,MAAf;AACH;;kDACM,G;;;;;;;;;AACV;;;WAEK,mBAAU,MAAV,EAAgB;;;;;;;AAClB,qBAAK,OAAL,GAAe,MAAf;;AAEA,uBAAM,KAAK,kBAAX;;;;AACa,uBAAM,KAAK,SAAL,CAAe,KAAK,OAApB,CAAN;;;AAAT,sB;;qBACA,mBAAO,SAAP,CAAiB,MAAjB,C;;;;;;AACA,uBAAM,KAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAAN;;;;;;;;;AAEP;;;WAEK,iBAAQ,MAAR,EAAgB,MAAhB,EAAsB;;;;;;;AACpB,gC,GAAmB,MAAM,CAAC,WAAP,CAAmB,mBAAnB,E;AACvB,sBAAM,CAAC,IAAP,CAAY,gBAAgB,CAAC,OAA7B,EAAsC,OAAtC,CAA8C,gBAAM,EAAG;AACnD,sBAAI,mBAAO,KAAP,CAAa,MAAb,EAAqB,MAArB,CAAJ,EAAkC;AAC9B,0BAAM,CAAC,MAAD,CAAN,GAAiB,MAAM,CAAC,MAAD,CAAvB;AACH;AACJ,iBAJD;kDAKO,M;;;;;;;;;AACV;;;WAEK,mBAAU,MAAV,EAAgB;;;;;;;AACd,sB,GAAS,E;AACT,gC,GAAmB,MAAM,CAAC,WAAP,CAAmB,mBAAnB,E;AACvB,sBAAM,CAAC,IAAP,CAAY,gBAAgB,CAAC,OAA7B,EAAsC,OAAtC,CAA8C,gBAAM,EAAG;AACnD,sBAAI,mBAAO,KAAP,CAAa,MAAb,EAAqB,MAArB,CAAJ,EAAkC;AAC9B,0BAAM,CAAC,MAAD,CAAN,GAAiB,MAAM,CAAC,MAAD,CAAvB;AACH;AACJ,iBAJD;kDAKO,M;;;;;;;;;AACV;;;WAEK,kBAAS,MAAT,EAAiB,IAAjB,EAAqB;;;;;;kDAChB,I;;;;;;;;;AACV;;;WAED,wBAAY;AACR,WAAK,MAAL;AACH;;;WAEK,cAAK,MAAL,EAAW;;;;;;;;AACA,uBAAM,KAAK,OAAL,CAAa,MAAb,EAAqB,KAAK,OAA1B,CAAN;;;AAAT,sB;;AACJ,uBAAM,MAAM,CAAC,IAAP,EAAN;;;;;;;;;AACH;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,KAAL,GAAa,IAAI,WAAJ,CAAS,KAAK,MAAL,CAAY,KAAK,aAAjB,CAAT,EAA0C,UAAM,MAAN;AAAA,yBAAe;AAAA;AAAA;AAAA;AAAA;AAClE,iCAAK,iBAAL;AADkE;AAAA;AAI9D,mCAAM,KAAK,IAAL,CAAU,MAAV,CAAN;;AAJ8D;AAK9D,iCAAK,YAAL;AAL8D;AAAA;;AAAA;AAAA;AAAA;AAO9D,mCAAO,CAAC,KAAR;;AACA,iCAAK,KAAL,CAAW,SAAX,CAAqB;AAAC,uCAAS,aAAE;AAAZ,6BAArB;;AAR8D;AAAA;AAU9D,iCAAK,mBAAL;AAV8D;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAf;AAAA,iBAA1C,CAAb;;AAcA,oBAAI,mBAAO,SAAP,CAAiB,MAAM,CAAC,UAAD,CAAvB,CAAJ,EAA0C;AACtC,wBAAM,CAAC,IAAP,CAAY,KAAK,eAAjB,EAAkC,OAAlC,CAA0C,kBAAQ,EAAG;AACjD,0BAAI,CAAC,MAAL,CAAY,QAAZ,EAAsB,IAAtB,EAA4B,OAA5B,CAAoC,UAAM,CAAN;AAAA,6BAAU;AAAA;AAAA;AAAA;AAAA;AAAA,+CAC1C,KAAK,KADqC;AAAA;AACrB,uCAAM,QAAQ,CAAC,MAAT,CAAgB,CAAhB,EAAmB,KAAK,eAAL,CAAqB,QAArB,CAAnB,CAAN;;AADqB;AAAA;;AAAA,6CAC/B,SAD+B;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAV;AAAA,qBAApC;AAGH,mBAJD;AAKH;;AAED,qBAAK,KAAL,CAAW,YAAX,CAAwB,UAAM,MAAN;AAAA,yBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5B,mCAAM,KAAK,QAAL,CAAc,MAAd,EAAsB,KAAK,KAA3B,CAAN;;AAD4B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAf;AAAA,iBAAxB;;mDAIO,G;;;;;;;;;AACV;;;;EA5HiC,mB;;AAAtC,4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;;AACA;;IAEa,0B;;;;;;;WAEH,YAAG,WAAH,EAA2B;;;;;;;AAC7B,uBAAM,WAAW,CAAC,SAAZ,CAAsB,iBAAtB,EAAyC,IAAzC,CAAN;;;;AACA,uBAAM,KAAK,iBAAL,CAAuB,WAAvB,CAAN;;;;;;;;;AACH;;;WAEK,2BAAkB,WAAlB,EAA0C;;;;;;;AACxC,kC,GAAqB,IAAI,eAAJ,CAAU;AAC/B,sBAAI,EAAE,iBADyB;AAE/B,yBAAO,EAAE,CACL;AACI,wBAAI,EAAE,IADV;AAEI,wBAAI,EAAE,SAFV;AAGI,6BAAS,EAAE,IAHf;AAII,+BAAW,EAAE,IAJjB;AAKI,sCAAkB,EAAE;AALxB,mBADK,EAQL;AACI,wBAAI,EAAE,OADV;AAEI,wBAAI,EAAE,sCAAa,KAAb,CAAmB,MAF7B;AAGI,8BAAU,EAAE;AAHhB,mBARK,EAaL;AACI,wBAAI,EAAE,YADV;AAEI,wBAAI,EAAE,sCAAa,KAAb,CAAmB,IAF7B;AAGI,8BAAU,EAAE;AAHhB,mBAbK,EAkBL;AACI,wBAAI,EAAE,OADV;AAEI,wBAAI,EAAE,sCAAa,KAAb,CAAmB;AAF7B,mBAlBK;AAFsB,iBAAV,C;;AA0BlB,uBAAM,WAAW,CAAC,WAAZ,CAAwB,kBAAxB,EAA4C,IAA5C,CAAN;;;;;;;;;;;;AACV;;;WAED,cAAK,WAAL,EAA6B;AACzB,aAAO,SAAP;AACH;;;;;;AAvCL,gE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAM,IAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;IAEa,c;;;;;AAcT,0BAAY,WAAZ,EAAuB;AAAA;;AAAA;;AACnB,+BAAM,WAAN,EAAmB,IAAnB;;AACA,UAAK,WAAL,CAAiB,IAAI,mBAAJ,gCAAmB,cAAc,CAAC,MAAlC,CAAjB;;AAFmB;AAGtB;;;;WAEK,qBAAY,mBAAZ,EAAoC;AAAA;;;;;;;;;;;;;;;;AAClC,mB,GAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,C;;qBAGN,gBAAO,KAAP,CAAa,mBAAb,EAAkC,IAAlC,C;;;;;;AACO,uBAAM,0BAAY,IAAZ,CAAiB,cAAc,CAAC,mBAAf,GAAqC,0BAAY,UAAZ,CAAuB;AAAC,oBAAE,EAAE,mBAAmB,CAAC,IAAD;AAAxB,iBAAvB,CAAtD,CAAN;;;AAAP,oB;;;AAEJ,oBAAI,CAAC,IAAD,IAAS,IAAI,CAAC,OAAL,KAAiB,IAA9B,EAAoC;AAChC,sBAAI,cAAJ,CAAU,IAAI,CAAC,OAAf,EAAwB,IAAxB;AACA,uBAAK,MAAL;AACH;;AAED,qBAAK,MAAL,GAAc,IAAI,CAAC,KAAnB;AACA,qBAAK,SAAL,GAAiB,IAAI,CAAC,QAAtB;iDAEO,G;;;;;;;;;AACV;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,MAAL,CAAY,WAAZ,EAAyB,SAAzB,GAAqC,KAAK,SAAL,CAAe,QAApD;AAEA,qBAAK,iBAAL,GAAyB,KAAK,MAAL,CAAY,qBAAZ,CAAzB;AACA,qBAAK,uBAAL,GAA+B,KAAK,MAAL,CAAY,2BAAZ,CAA/B;AAEA,qBAAK,gBAAL,GAAwB,KAAK,MAAL,CAAY,oBAAZ,CAAxB;AACA,qBAAK,sBAAL,GAA8B,KAAK,MAAL,CAAY,0BAAZ,CAA9B;;AAEA,qBAAK,gBAAL,CAAsB,eAAtB,CAAsC,IAAtC;;AACA,qBAAK,sBAAL,CAA4B,eAA5B,CAA4C,IAA5C;;AAEA,qBAAK,gBAAL,CAAsB,MAAtB;;AACA,qBAAK,sBAAL,CAA4B,MAA5B;;AAEA,qBAAK,WAAL;kDAEO,G;;;;;;;;;AACV;;;WAED,uBAAW;AAAA;;AACP,UAAI,SAAS,GAAG,EAAhB;AACA,UAAI,cAAc,GAAG,EAArB;;AAEA,WAAK,MAAL,CAAY,OAAZ,CAAoB,cAAI,EAAG;AACvB,YAAI,MAAI,CAAC,SAAL,CAAe,OAAf,CAAuB,OAAvB,CAA+B,IAAI,CAAC,EAApC,MAA4C,CAAC,CAAjD,EAAoD;AAChD,mBAAS,CAAC,IAAV,CAAe,IAAf;AACH,SAFD,MAEO;AACH,wBAAc,CAAC,IAAf,CAAoB,IAApB;AACH;AACJ,OAND;;AAQA,8BAAW,iBAAX,CAA6B,KAAK,iBAAlC;AACA,eAAS,CAAC,OAAV,CAAkB,UAAC,IAAD,EAAO,CAAP,EAAY;AAC1B,YAAI,IAAI,GAAG,MAAI,CAAC,gBAAL,CAAsB,SAAtB,CAAgC,IAAhC,CAAX;;AACA,YAAI,CAAC,aAAL,CAAmB,YAAnB,EAAiC,SAAjC,GAA6C,IAAI,CAAC,IAAlD;AACA,YAAI,CAAC,aAAL,CAAmB,cAAnB,EAAmC,gBAAnC,CAAoD,OAApD,EAA6D;AAAA,iBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AACpE,yBAAK,iBAAL;AADoE;AAE1D,2BAAM,0BAAY,IAAZ,CAAiB,cAAc,CAAC,oBAAhC,EAAsD;AAClE,wBAAE,EAAE,KAAK,SAAL,CAAe,EAD+C;AAElE,4BAAM,EAAE,IAAI,CAAC,EAFqD;AAGlE,6BAAO,EAAE;AAHyD,qBAAtD,CAAN;;AAF0D;AAEhE,uBAFgE;;AAOpE,wBAAI,GAAG,CAAC,OAAR,EAAiB;AACb,2BAAK,SAAL,CAAe,OAAf,CAAuB,MAAvB,CAA8B,KAAK,SAAL,CAAe,OAAf,CAAuB,OAAvB,CAA+B,IAAI,CAAC,EAApC,CAA9B,EAAuE,CAAvE;;AACA,2BAAK,WAAL;AACH;;AACD,yBAAK,mBAAL;;AAXoE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAX;AAAA,SAA7D;;AAcA,cAAI,CAAC,iBAAL,CAAuB,WAAvB,CAAmC,IAAnC;AACH,OAlBD;AAoBA,8BAAW,iBAAX,CAA6B,KAAK,uBAAlC;AACA,oBAAc,CAAC,OAAf,CAAuB,cAAI,EAAG;AAC1B,YAAI,IAAI,GAAG,MAAI,CAAC,sBAAL,CAA4B,SAA5B,CAAsC,IAAtC,CAAX;;AACA,YAAI,CAAC,aAAL,CAAmB,YAAnB,EAAiC,SAAjC,GAA6C,IAAI,CAAC,IAAlD;AACA,YAAI,CAAC,aAAL,CAAmB,WAAnB,EAAgC,gBAAhC,CAAiD,OAAjD,EAA0D;AAAA,iBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AACjE,yBAAK,iBAAL;AADiE;AAEvD,2BAAM,0BAAY,IAAZ,CAAiB,cAAc,CAAC,oBAAhC,EAAsD;AAClE,wBAAE,EAAE,KAAK,SAAL,CAAe,EAD+C;AAElE,4BAAM,EAAE,IAAI,CAAC,EAFqD;AAGlE,6BAAO,EAAE;AAHyD,qBAAtD,CAAN;;AAFuD;AAE7D,uBAF6D;;AAOjE,wBAAI,GAAG,CAAC,OAAR,EAAiB;AACb,2BAAK,SAAL,CAAe,OAAf,CAAuB,IAAvB,CAA4B,IAAI,CAAC,EAAjC;;AACA,2BAAK,WAAL;AACH;;AACD,yBAAK,mBAAL;;AAXiE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAX;AAAA,SAA1D;;AAcA,cAAI,CAAC,uBAAL,CAA6B,WAA7B,CAAyC,IAAzC;AACH,OAlBD;AAmBH;;;;EAhH+B,mB;;AAApC;AAEW,wBAAiB,OAAjB;AAEA,qCAAsB,iBAAtB;AACA,sCAAuB,sBAAvB;AACA,wCAAkC,IAAlC;AA6GX,aAAI,iBAAJ,CAAsB,aAAG,EAAG;AACxB,MAAI,cAAc,CAAC,sBAAnB,EAA2C;AACvC,4BAAe,cAAf,CAA8B,IAA9B,CAAmC,IAAI,+BAAJ,CAAmB,aAAnB,EAAkC,cAAc,CAAC,MAAjD,EAAyD;AAAA,aAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACxF,uBAAM,IAAI,mCAAJ,GAAuB,IAAvB,EAAN;;AADwF;AAC/F,oBAD+F;AAAA;AAEnG,uBAAM,GAAG,CAAC,SAAJ,CAAc,cAAd,EAA8B;AAAC,wBAAM,IAAI,CAAC,IAAD;AAAX,iBAA9B,CAAN;;AAFmG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAX;AAAA,KAAzD,CAAnC;AAIH;;AACD,KAAG,CAAC,WAAJ,CAAgB,OAAhB,EAAyB,qBAAzB;AACH,CARD,E;;;;;;AC/HA,iBAAiB,qBAAuB,8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AAEA,IAAM,IAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;;AACA;;AACA;;AACA;;IAGa,gB;;;;;AAIT,4BAAY,WAAZ,EAAuB;AAAA;;AAAA;;AACnB,+BAAM,WAAN,EAAmB,IAAnB;;AACA,UAAK,WAAL,CAAiB,IAAI,mBAAJ,gCAAmB,gBAAgB,CAAC,MAApC,CAAjB;;AAFmB;AAGtB;;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AACN,oB,GAAO,IAAI,aAAJ,CAAS,KAAK,MAAL,CAAY,oBAAZ,CAAT,EAA4C,UAAM,IAAN;AAAA,yBAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACnD,mCAAM,0BAAY,WAAZ,GAA0B,QAA1B,CAAmC,IAAI,CAAC,OAAD,CAAvC,EAAkD,IAAI,CAAC,UAAD,CAAtD,EAAoE,IAAI,CAAC,UAAD,CAAxE,CAAN;;AADmD;AAC5D,kCAD4D;;AAAA,kCAE3D,MAAM,YAAY,WAAnB,IAA4B,MAAM,KAAK,IAFqB;AAAA;AAAA;AAAA;;AAAA;AAG5D,mCAAM,IAAI,cAAJ,CAAU,yBAAV,EAAqC,IAArC,EAAN;;AAH4D;AAAA;AAI5D,mCAAM,KAAK,MAAL,EAAN;;AAJ4D;AAAA;AAAA;;AAAA;AAAA;AAO5D,mCAAM,IAAI,CAAC,SAAL,CAAe,MAAf,CAAN;;AAP4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAb;AAAA,iBAA5C,C;AAWX,oBAAI,CAAC,YAAL,CAAkB,cAAI,EAAG;AACrB,sBAAI,IAAI,CAAC,UAAD,CAAJ,KAAqB,IAAI,CAAC,WAAD,CAA7B,EAA2C;AACvC,2BAAO;AACH,mCAAY;AADT,qBAAP;AAGH;;AACD,yBAAO,IAAP;AACH,iBAPD,E,CASA;AACA;AACA;;kDAEO,G;;;;;;;;;AACV;;;;EApCiC,iB;;AAAtC;AAuCA,gBAAgB,CAAC,MAAjB,GAA0B,WAA1B;AACA,gBAAgB,CAAC,uBAAjB,GAA2C,IAA3C;AAEA,aAAI,iBAAJ,CAAsB,aAAG,EAAG;AACxB,MAAI,gBAAgB,CAAC,uBAArB,EAA6C;AACzC,4BAAe,cAAf,CAA8B,IAA9B,CAAmC,IAAI,iDAAJ,CAA4B,cAA5B,EAA4C,gBAAgB,CAAC,MAA7D,EAAqE,gBAArE,CAAnC;AACH;;AACD,KAAG,CAAC,WAAJ,CAAgB,cAAhB,EAAgC,gBAAhC;AACH,CALD,E;;;;;;ACnDA,iBAAiB,qBAAuB,gC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAxC;;AACA;;IAEa,a;;;;;;;;;;;;;WAIT,kCAA6B;AACzB,UAAI,SAAS,kFAAb;;AACA,eAAS,CAAC,MAAD,CAAT,GAAoB;AAChB,cAAM,EAAE,YAAK,aAAL,EADQ;AAEhB,YAAI,EAAE,aAFU;AAGhB;AACA;AACA;AACA,eAAO,EAAE,KANO;AAOhB,gBAAQ,EAAE,CAAC,KAAK;AAPA,OAApB;AAUA,aAAO,SAAP;AACH;;;;EAjB8B,yC;;AAAnC;AAmBA,aAAa,CAAC,SAAd,GAA0B,KAA1B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBA;;AACA;;IAEa,oB;;;;;;;;;;;;;WAIT,kCAA6B;AACzB,UAAI,SAAS,yFAAb;;AACA,eAAS,CAAC,MAAD,CAAT,GAAoB;AAChB,cAAM,EAAE,YAAK,aAAL,EADQ;AAEhB,YAAI,EAAE,aAFU;AAGhB;AACA;AACA;AACA,eAAO,EAAE,KANO;AAOhB,gBAAQ,EAAE,CAAC,KAAK;AAPA,OAApB;AAUA,aAAO,SAAP;AACH;;;;EAjBqC,6B;;AAA1C;AAmBA,oBAAoB,CAAC,SAArB,GAAiC,KAAjC,C;;;;;;;ACvBA;AAAe,iFAAkB,E;;;;;;ACAjC,iBAAiB,qBAAuB,oB;;;;;;ACAxC,iBAAiB,qBAAuB,qB;;;;;;;ACAxC;AAAe,sGAAuC,E;;;;;;ACAtD,iBAAiB,qBAAuB,mB;;;;;;ACAxC,iBAAiB,qBAAuB,4B;;;;;;ACAxC,iBAAiB,qBAAuB,4B;;;;;;ACAxC,iBAAiB,qBAAuB,wB;;;;;;ACAxC,iBAAiB,qBAAuB,uB;;;;;;ACAxC,iBAAiB,qBAAuB,6B;;;;;;ACAxC,iBAAiB,qBAAuB,yB;;;;;;ACAxC,iBAAiB,qBAAuB,2B;;;;;;;ACAxC;AAAe,oFAAuB,cAAc,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACApD;AACA;AAEO,IAAM,mBAAb;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,WACI,gCAA2B;AACvB,UAAI,OAAO,4EAAX;;AACA,aAAO,CAAC,OAAD,CAAP,GAAmB,sCAAY,CAAC,KAAb,CAAmB,MAAtC;AACA,aAAO,CAAC,WAAD,CAAP,GAAuB,sCAAY,CAAC,KAAb,CAAmB,MAA1C;AACA,aAAO,CAAC,UAAD,CAAP,GAAsB,sCAAY,CAAC,KAAb,CAAmB,OAAzC;AACA,aAAO,CAAC,MAAD,CAAP,GAAkB,sCAAY,CAAC,KAAb,CAAmB,OAArC;AACA,aAAO,CAAC,YAAD,CAAP,GAAwB,sCAAY,CAAC,KAAb,CAAmB,OAA3C;AACA,aAAO,OAAP;AACH;AATL;AAAA;AAAA,WAWI,0BAA8B,QAA9B,EAAsC;;;;;;AAClC;;;;;;;;;AACH;AAbL;;AAAA;AAAA,EAA+B,kCAA/B;AAeA,sCAAY,CAAC,QAAb,CAAsB,mBAAtB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AAEO,IAAM,wBAAb;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,WAEU,YAAG,WAAH,EAA2B;;;;;;;AAC7B,uBAAM,yBAAe,CAAC,sBAAhB,CAAuC,mBAAvC,EAAkD,WAAlD,CAAN;;;;;;;;;AACH;AAJL;AAAA;AAAA,WAMI,cAAK,WAAL,EAA6B;AACzB,aAAO,SAAP;AACH;AARL;;AAAA;AAAA,I;;;;;;;;;;;;;;ACJA;AAEO,IAAMA,iBAAb;AACI,6BAAYC,YAAZ,EAA0BC,cAA1B,EAA0CC,WAA1C,EAAuDC,gBAAvD,EAAyEC,cAAzE,EAAwF;AAAA;;AACpF,SAAKJ,YAAL,GAAoBA,YAApB;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACA,SAAKC,gBAAL,GAAwBA,gBAAxB;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACH;;AAPL;AAAA;AAAA,WASI,4BACA;AACI,aAAO,KAAKJ,YAAL,CAAkBK,SAAlB,CAA4B,IAA5B,CAAP;AACH;AAZL;AAAA;AAAA,WAcI,8BACA;AACI,aAAO,KAAKJ,cAAL,CAAoBI,SAApB,CAA8B,IAA9B,CAAP;AACH;AAjBL;AAAA;AAAA,WAmBI,2BACA;AACI,aAAO,KAAKH,WAAL,CAAiBG,SAAjB,CAA2B,IAA3B,CAAP;AACH;AAtBL;AAAA;AAAA,WAwBI,gCACA;AACI,aAAO,KAAKF,gBAAL,CAAsBE,SAAtB,CAAgC,IAAhC,CAAP;AACH;AA3BL;AAAA;AAAA,WA6BI,8BAAoB;AAChB,aAAO,KAAKD,cAAL,CAAoBC,SAApB,CAA8B,IAA9B,CAAP;AACH;AA/BL;;AAAA;AAAA,I;;;;;;;;;;;;ACDO,IAAMC,OAAb;AACI,mBAAYC,OAAZ,EAAoB;AAAA;;AAChB,SAAKC,QAAL,GAAgB,CAAhB;AACA,SAAKD,OAAL,GAAeA,OAAf;AACA,SAAKE,MAAL,GAAc,IAAd;AACH;;AALL;AAAA;AAAA,WAOI,6BAAoBC,SAApB,EAA8B;AAC1B,aAAOA,SAAP;AACH;AATL;AAAA;AAAA,WAWI,gBAAOC,YAAP,EAAoB;AAChB,aAAO,KAAP;AACH;AAbL;AAAA;AAAA,WAeI,mBAAUF,MAAV,EACA;AACI,WAAKA,MAAL,GAAcA,MAAd;AACH;AAlBL;AAAA;AAAA,WAoBI,oBACA;AACI,UAAI,KAAKA,MAAL,KAAc,IAAlB,EACA;AACI,eAAO,KAAKA,MAAL,CAAYG,QAAZ,EAAP;AACH;AACJ;AA1BL;AAAA;AAAA,WA4BI,qBAAW;AACP,aAAO,KAAP;AACH;AA9BL;AAAA;AAAA,WAgCI,oBAAU;AACN,aAAQ,KAAKJ,QAAL,KAAkB,CAA1B;AACH;AAlCL;AAAA;AAAA;AAAA,4EAoCI;AAAA;AAAA;AAAA;AAAA;AAAA,iDACWK,OAAO,CAACC,OAAR,EADX;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OApCJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,WAwCI,0BAAgB,CAAE;AAxCtB;AAAA;AAAA,WA0CI,wBAAeJ,SAAf,EAAyB;AACrB,aAAOA,SAAP;AACH;AA5CL;AAAA;AAAA,WA8CI,oBAAWK,KAAX,EACA;AACI,aAAOA,KAAP;AACH;AAjDL;AAAA;AAAA,WAmDI,0BAAiBC,WAAjB,EAA6B;AACzB,aAAOA,WAAP;AACH;AArDL;AAAA;AAAA,WAuDI,sBACA;AACI,aAAO,KAAKT,OAAZ;AACH;AA1DL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AAEO,IAAMU,uBAAb;AAAA;;AAAA;;AAEI,uBAAYV,OAAZ,EAAqBW,IAArB,EAA2B;AAAA;;AAAA;;AACvB,8BAAMX,OAAN;AACA,UAAKW,IAAL,GAAY,GAAZ;;AACA,QAAIC,gBAAM,CAACC,SAAP,CAAiBF,IAAjB,CAAJ,EAA4B;AACxB,YAAKG,OAAL,CAAaH,IAAb;AACH;;AALsB;AAM1B;;AARL;AAAA;AAAA,WAUI,gBAAOP,YAAP,EAAqB;AACjB;AACA,aAAQA,YAAY,YAAYM,WAAxB,IAAuCN,YAAY,CAACO,IAAb,KAAsB,KAAKA,IAA1E;AACH;AAbL;AAAA;AAAA,WAeI,iBAAQA,IAAR,EAAc;AACV,WAAKA,IAAL,GAAYA,IAAZ;AACH;AAjBL;AAAA;AAAA,WAmBI,0BAAiB;AACbI,8BAAU,CAACC,iBAAX,CAA6B,KAAKhB,OAAL,CAAaiB,aAAb,CAA2B,eAA3B,CAA7B,EAA0EC,WAA1E,CAAsFC,QAAQ,CAACC,cAAT,CAAwB,KAAKT,IAA7B,CAAtF;AACH;AArBL;;AAAA;AAAA,EAAiCZ,OAAjC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AAEO,IAAMsB,2BAAb;AAAA;;AAAA;;AA6BI,yBAAYrB,OAAZ,EAAqB;AAAA;;AAAA;;AACjB,8BAAMA,OAAN;AACA,UAAKsB,QAAL,GAAgB,EAAhB;AACA,UAAKC,KAAL,GAAa,UAAb;AACA,UAAKC,SAAL,GAAiB,IAAjB;AAEA,UAAKC,iBAAL,GAAyB,GAAzB;AACA,UAAKC,gBAAL,GAAwB,CAAxB;;AAEA,UAAKC,gBAAL,GAAwB,UAACC,CAAD,EAAO;AAC3B,UAAIC,GAAG,GAAG,IAAIC,IAAJ,GAAWC,OAAX,EAAV;AAEA,UAAIC,MAAM,GAAG,IAAb;AACA,UAAIC,QAAQ,GAAG,IAAf;;AAEA,UAAIL,CAAC,CAACM,cAAF,CAAiBC,MAAjB,IAA2B,CAA/B,EAAkC;AAC9BH,cAAM,GAAGb,QAAQ,CAACiB,gBAAT,CAA0BR,CAAC,CAACM,cAAF,CAAiB,CAAjB,EAAoBG,KAA9C,EAAqDT,CAAC,CAACM,cAAF,CAAiB,CAAjB,EAAoBI,KAAzE,CAAT;AACAL,gBAAQ,GAAG;AAACM,WAAC,EAAEX,CAAC,CAACM,cAAF,CAAiB,CAAjB,EAAoBG,KAAxB;AAA+BG,WAAC,EAAEZ,CAAC,CAACM,cAAF,CAAiB,CAAjB,EAAoBI;AAAtD,SAAX;AACH;;AACD,UAAIN,MAAM,IAAI,IAAV,IAAkBJ,CAAC,CAACa,aAAF,CAAgBN,MAAhB,KAA2B,CAA7C,IAAkD,MAAKnC,OAAL,CAAa0C,QAAb,CAAsBrB,aAAa,CAACsB,eAApC,CAAlD,IAA0G,MAAK3C,OAAL,CAAa0C,QAAb,CAAsBV,MAAtB,CAA9G,EAA6I;AACzIJ,SAAC,CAACgB,eAAF;AACAhB,SAAC,CAACiB,cAAF;;AACA,YAAI,MAAKnB,gBAAL,GAAwB,MAAKD,iBAA7B,GAAiDI,GAArD,EAA0D;AACtD;AACH;;AACD,cAAKxB,QAAL,GAAgByC,cAAhB;;AACA,cAAKC,MAAL,CAAY1B,aAAa,CAACsB,eAA1B,EAA2CX,MAA3C,EAAmDX,aAAa,CAAC2B,aAAjE,EAAgFf,QAAhF,EAPyI,CAQzI;;;AAEA,cAAKP,gBAAL,GAAwB,IAAII,IAAJ,GAAWC,OAAX,EAAxB;AACH;AACJ,KAtBD;;AAuBA,UAAKkB,eAAL,GAAuB,UAACrB,CAAD,EAAO;AAC1B,UAAIC,GAAG,GAAG,IAAIC,IAAJ,GAAWC,OAAX,EAAV,CAD0B,CAG1B;;AACA,UAAIV,aAAa,CAACsB,eAAd,KAAkC,IAAlC,IAA0C,MAAK3C,OAAL,CAAa0C,QAAb,CAAsBrB,aAAa,CAACsB,eAApC,CAA1C,IAAkG,MAAK3C,OAAL,CAAa0C,QAAb,CAAsBd,CAAC,CAACI,MAAxB,CAAtG,EAAuI;AACnI,YAAIC,QAAQ,GAAG;AAACM,WAAC,EAAEX,CAAC,CAACS,KAAN;AAAaG,WAAC,EAAEZ,CAAC,CAACU;AAAlB,SAAf;AACAV,SAAC,CAACgB,eAAF;AACAhB,SAAC,CAACiB,cAAF;;AACA,YAAI,MAAKnB,gBAAL,GAAwB,MAAKD,iBAA7B,GAAiDI,GAArD,EAA0D;AACtD;AACH;;AACD,cAAKxB,QAAL,GAAgByC,cAAhB;;AACA,cAAKC,MAAL,CAAY1B,aAAa,CAACsB,eAA1B,EAA2Cf,CAAC,CAACI,MAA7C,EAAqDX,aAAa,CAAC2B,aAAnE,EAAkFf,QAAlF,EARmI,CASnI;;;AACA,cAAKP,gBAAL,GAAwB,IAAII,IAAJ,GAAWC,OAAX,EAAxB;AACH;AACJ,KAhBD;;AAhCiB;AAiDpB;;AA9EL;AAAA;AAAA,WAwBI,wBAAeP,SAAf,EAA0B;AACtB,WAAKA,SAAL,GAAiBA,SAAjB;;AACA,WAAK0B,cAAL;AACH;AA3BL;AAAA;AAAA,WAgFI,qBAAY;AACR,aAAQ,KAAK1B,SAAL,IAAkB,CAAC,KAAKnB,QAAL,GAAgB8C,SAAhB,EAA3B;AACH;AAlFL;AAAA;AAAA;AAAA,yFAoFI,iBAAaC,SAAb,EAAwBC,UAAxB,EAAoCC,aAApC,EAAmDC,cAAnD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AACUC,uBADV,GACoB,GADpB;AAEUC,8BAFV,GAE2B,CAF3B;AAIQC,iCAJR,GAI4B,CAJ5B;;AAKI,oBAAI9C,gBAAM,CAACC,SAAP,CAAiBwC,UAAjB,KAAgCzC,gBAAM,CAACC,SAAP,CAAiBuC,SAAjB,CAAhC,KACCxC,gBAAM,CAAC+C,MAAP,CAAcL,aAAd,KAAgC1C,gBAAM,CAAC+C,MAAP,CAAcJ,cAAd,CAAhC,IACGK,IAAI,CAACC,GAAL,CAASP,aAAa,CAACf,CAAd,GAAkBgB,cAAc,CAAChB,CAA1C,IAA+CkB,cADlD,IAEGG,IAAI,CAACC,GAAL,CAASP,aAAa,CAACd,CAAd,GAAkBe,cAAc,CAACf,CAA1C,IAA+CiB,cAHnD,CAAJ,EAGwE;AAEhEK,4BAFgE,GAEnD,CAAC,CAFkD;AAGhEC,6BAHgE,GAGlD,CAAC,CAHiD;AAIhEC,iCAJgE,GAI9C,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAJ8C;;AAKpE,uBAASC,CAAT,GAAa,CAAb,EAAgBA,CAAC,GAAG,KAAK3C,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,EAA3C,EAA+C;AAC3C,wBAAI,KAAK3C,QAAL,CAAc0C,eAAe,CAACC,CAAD,CAA7B,EAAkCjE,OAAlC,KAA8CoD,SAA9C,IAA2D,KAAK9B,QAAL,CAAc0C,eAAe,CAACC,CAAD,CAA7B,EAAkCjE,OAAlC,CAA0C0C,QAA1C,CAAmDU,SAAnD,CAA/D,EAA8H;AAC1HU,gCAAU,GAAG,CAACG,CAAC,GAAG,KAAKhE,QAAL,GAAgB,EAArB,IAA2B,CAAxC;AACH;;AACD,wBAAI,KAAKqB,QAAL,CAAc0C,eAAe,CAACC,CAAD,CAA7B,EAAkCjE,OAAlC,KAA8CqD,UAA9C,IAA4D,KAAK/B,QAAL,CAAc0C,eAAe,CAACC,CAAD,CAA7B,EAAkCjE,OAAlC,CAA0C0C,QAA1C,CAAmDW,UAAnD,CAAhE,EAAgI;AAC5HU,iCAAW,GAAG,CAACE,CAAC,GAAG,KAAKhE,QAAL,GAAgB,EAArB,IAA2B,CAAzC;AACH;AACJ;;AAED,sBAAI6D,UAAU,IAAI,CAAd,IAAmBC,WAAW,IAAI,CAAtC,EAAyC;AACrC,wBAAID,UAAU,KAAK,CAAf,KAAqBC,WAAW,KAAK,CAAhB,IAAqBA,WAAW,KAAK,CAA1D,KACGD,UAAU,KAAK,CAAf,KAAqBC,WAAW,KAAK,CAAhB,IAAqBA,WAAW,KAAK,CAA1D,CADH,IAEID,UAAU,KAAK,CAAf,IAAoBC,WAAW,KAAK,CAFxC,IAGID,UAAU,KAAK,CAAf,IAAoBC,WAAW,KAAK,CAH5C,EAGgD;AAC5CL,uCAAiB,GAAG,CAAC,CAArB;AACH;AACJ;AACJ;;AA9BL,qBAgCQ,KAAKQ,SAAL,EAhCR;AAAA;AAAA;AAAA;;AAiCQ,qBAAKjE,QAAL,IAAiB,MAAM,KAAKyD,iBAA5B;AACA,qBAAKzD,QAAL,IAAiB,GAAjB;AAEIkE,+BApCZ,GAoC8B,KAAKlE,QApCnC;;AAsCQ,qBAAKmE,oBAAL;;AACA,qBAAKpE,OAAL,CAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,UAA3B;;AACA,oBAAIZ,iBAAiB,KAAK,CAAC,CAA3B,EAA8B;AAC1B,uBAAK1D,OAAL,CAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,SAA3B;AACH;;AAEGC,4BA5CZ,GA4C2B,IAAIjE,OAAJ,CAAY,UAAUC,OAAV,EAAmB;AAC9CiE,4BAAU,CAACjE,OAAD,EAAUiD,OAAV,CAAV;AACH,iBAFkB,EAEhBiB,IAFgB,CAEX,YAAM;AACV,sBAAI,MAAI,CAACxE,QAAL,KAAkBkE,eAAtB,EAAuC;AACnC,0BAAI,CAACnE,OAAL,CAAaqE,SAAb,CAAuBK,MAAvB,CAA8B,UAA9B;;AACA,0BAAI,CAAC1E,OAAL,CAAaqE,SAAb,CAAuBK,MAAvB,CAA8B,SAA9B;AACH;AACJ,iBAPkB,CA5C3B;AAoDQ,qBAAKrE,QAAL,GAAgBsE,WAAhB,CAA4BJ,YAA5B;AApDR,iDAqDeA,YArDf;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OApFJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,WA6II,gBAAOnE,YAAP,EAAqB;AACjB,UAAI,EAAEA,YAAY,YAAYiB,aAA1B,KAA4CjB,YAAY,CAACkB,QAAb,CAAsBa,MAAtB,KAAiC,KAAKb,QAAL,CAAca,MAA/F,EAAuG;AACnG,eAAO,KAAP;AACH;;AACD,WAAK,IAAI8B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK3C,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,EAA3C,EAA+C;AAC3C,YAAI,CAAC,KAAK3C,QAAL,CAAc2C,CAAd,EAAiBW,MAAjB,CAAwBxE,YAAY,CAACkB,QAAb,CAAsB2C,CAAtB,CAAxB,CAAL,EAAwD;AACpD,iBAAO,KAAP;AACH;AACJ;;AACD,aAAO,IAAP;AACH;AAvJL;AAAA;AAAA,WAyJI,wBAAe9D,SAAf,EAA0B;AACtB,WAAKF,QAAL,GAAgBE,SAAS,CAAC,CAAD,CAAzB;;AAEA,UAAI0E,KAAK,CAAC,KAAK5E,QAAN,CAAT,EAA0B;AACtB,aAAKA,QAAL,GAAgB,CAAhB;AACH;;AAEDE,eAAS,CAAC2E,MAAV,CAAiB,CAAjB,EAAoB,CAApB;;AACA,WAAK,IAAIb,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD9D,iBAAS,GAAG,KAAKmB,QAAL,CAAc2C,CAAd,EAAiBe,cAAjB,CAAgC7E,SAAhC,CAAZ;AACH;;AACD,aAAOA,SAAP;AACH;AArKL;AAAA;AAAA,WAuKI,oBAAWK,KAAX,EAAkB;AACd,WAAKgB,SAAL,GAAkBhB,KAAK,CAAC,CAAD,CAAL,KAAa,KAA/B;AACAA,WAAK,CAACsE,MAAN,CAAa,CAAb,EAAgB,CAAhB;;AACA,WAAK,IAAIb,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClDzD,aAAK,GAAG,KAAKc,QAAL,CAAc2C,CAAd,EAAiBgB,UAAjB,CAA4BzE,KAA5B,CAAR;AACH;;AACD,aAAOA,KAAP;AACH;AA9KL;AAAA;AAAA,WAgLI,6BAAoBL,SAApB,EAA+B;AAC3BA,eAAS,CAAC+E,IAAV,CAAe,KAAKjF,QAApB;;AACA,WAAK,IAAIgE,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD9D,iBAAS,GAAG,KAAKmB,QAAL,CAAc2C,CAAd,EAAiBkB,mBAAjB,CAAqChF,SAArC,CAAZ;AACH;;AACD,aAAOA,SAAP;AACH;AAtLL;AAAA;AAAA,WAwLI,0BAAiBiF,MAAjB,EAAyB;AACrBA,YAAM,CAACF,IAAP,CAAY,KAAK1D,SAAjB;;AACA,WAAK,IAAIyC,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClDmB,cAAM,GAAG,KAAK9D,QAAL,CAAc2C,CAAd,EAAiBoB,gBAAjB,CAAkCD,MAAlC,CAAT;AACH;;AACD,aAAOA,MAAP;AACH;AA9LL;AAAA;AAAA,WAgMI,kBAASE,aAAT,EAAwB;AACpBA,mBAAa,GAAG1E,gBAAM,CAAC2E,OAAP,CAAeD,aAAf,EAA8B,IAA9B,CAAhB;;AACA,UAAIA,aAAJ,EAAmB;AACf,aAAK,IAAIrB,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD,cAAI,CAAC,KAAK3C,QAAL,CAAc2C,CAAd,EAAiBuB,QAAjB,EAAL,EAAkC;AAC9B,mBAAO,KAAP;AACH;AACJ;AACJ;;AACD,aAAQ,KAAKvF,QAAL,KAAkB,CAAlB,IACJ,KAAKqB,QAAL,CAAc,CAAd,EAAiBsD,MAAjB,CAAwB,KAAKtD,QAAL,CAAc,CAAd,CAAxB,KAA6C,KAAKA,QAAL,CAAc,CAAd,EAAiBsD,MAAjB,CAAwB,KAAKtD,QAAL,CAAc,CAAd,CAAxB,CAA7C,KACA,KAAKrB,QAAL,KAAkB,GAAlB,IAAyB,KAAKqB,QAAL,CAAc,CAAd,EAAiBsD,MAAjB,CAAwB,KAAKtD,QAAL,CAAc,CAAd,CAAxB,CADzB,CADJ;AAGH;AA5ML;AAAA;AAAA,WA8MI,qBAAYA,QAAZ,EAAsB;AAClB,WAAKA,QAAL,GAAgB,EAAhB;;AACA,WAAK,IAAI2C,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAGzD,QAAQ,CAACa,MAA7B,EAAqC8B,CAAC,GAAGc,CAAzC,EAA4Cd,CAAC,EAA7C,EAAiD;AAC7C,aAAKwB,QAAL,CAAcnE,QAAQ,CAAC2C,CAAD,CAAtB;AACH;AACJ;AAnNL;AAAA;AAAA,WAqNI,kBAASyB,KAAT,EAAgB;AACZ,WAAKpE,QAAL,CAAc4D,IAAd,CAAmBQ,KAAnB;AACAA,WAAK,CAACC,SAAN,CAAgB,IAAhB;;AACA,WAAKzC,cAAL;AACH;AAzNL;AAAA;AAAA,WA2NI,gCAAuB;AACnB;AACA,WAAKlD,OAAL,CAAaqE,SAAb,CAAuBK,MAAvB,CAA8B,KAAKnD,KAAnC;AACA,WAAKA,KAAL,GAAa,YAAY,KAAKtB,QAA9B;;AACA,UAAI,KAAKsB,KAAL,KAAe,UAAnB,EAA+B;AAC3B,aAAKA,KAAL,GAAa,YAAb;AACH;;AACD,WAAKvB,OAAL,CAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,KAAK/C,KAAhC;AACH;AAnOL;AAAA;AAAA,WAqOI,0BAAiB;AACb,UAAIqE,KAAK,GAAG,KAAKC,SAAL,EAAZ;;AACA,UAAID,KAAK,IAAI,CAAb,EAAgB;AACZ,aAAK5F,OAAL,CAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,WAAWsB,KAAtC;AACH;;AAED,UAAI,CAAC,KAAKpE,SAAV,EAAqB;AACjB,aAAKxB,OAAL,CAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,QAA3B;AACH;;AAED,UAAMwB,cAAc,GAAG,KAAK9F,OAAL,CAAaiB,aAAb,CAA2B,kBAA3B,CAAvB;AACAF,8BAAU,CAACC,iBAAX,CAA6B8E,cAA7B;;AAEA,WAAK1B,oBAAL;;AAEA,WAAKpE,OAAL,CAAa+F,mBAAb,CAAiC,SAAjC,EAA4C,KAAK9C,eAAjD;AACA,WAAKjD,OAAL,CAAa+F,mBAAb,CAAiC,UAAjC,EAA6C,KAAKpE,gBAAlD;AAEA,WAAK3B,OAAL,CAAagG,gBAAb,CAA8B,SAA9B,EAAyC,KAAK/C,eAA9C;AACA,WAAKjD,OAAL,CAAagG,gBAAb,CAA8B,UAA9B,EAA0C,KAAKrE,gBAA/C;;AAEA,WAAK,IAAIsC,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD,aAAK3C,QAAL,CAAc2C,CAAd,EAAiBf,cAAjB;;AACA4C,sBAAc,CAAC5E,WAAf,CAA2B,KAAKI,QAAL,CAAc2C,CAAd,EAAiBgC,UAAjB,EAA3B;;AACA,YAAIhC,CAAC,GAAG,CAAJ,KAAU,CAAV,IAAe,KAAK3C,QAAL,CAAca,MAAd,GAAuB,CAAvB,KAA6B8B,CAAhD,EAAmD;AAC/C6B,wBAAc,CAAC5E,WAAf,CAA2BC,QAAQ,CAAC+E,aAAT,CAAuB,IAAvB,CAA3B;AACH;AACJ;AACJ;AAjQL;AAAA;AAAA,WAmQI,qBAAY;AACR,UAAI,KAAK5E,QAAL,CAAca,MAAd,IAAwB,CAAxB,IAA6B,KAAKb,QAAL,CAAc,CAAd,CAA7B,IAAiD,KAAKA,QAAL,CAAc,CAAd,aAA4BD,aAAjF,EAAgG;AAC5F,eAAO,KAAKC,QAAL,CAAc,CAAd,EAAiBuE,SAAjB,KAA+B,CAAtC;AACH;;AACD,aAAO,CAAP;AACH;AAxQL;AAAA;AAAA,WACI,wBAAsB;AAClBM,YAAM,CAACH,gBAAP,CAAwB,WAAxB,EAAqC,UAACpE,CAAD,EAAO;AACxC;AACAP,qBAAa,CAACsB,eAAd,GAAgCf,CAAC,CAACI,MAAlC;AACAX,qBAAa,CAAC2B,aAAd,GAA8B;AAACT,WAAC,EAAEX,CAAC,CAACS,KAAN;AAAaG,WAAC,EAAEZ,CAAC,CAACU;AAAlB,SAA9B;AACH,OAJD;AAKA6D,YAAM,CAACH,gBAAP,CAAwB,SAAxB,EAAmC,UAACpE,CAAD,EAAO;AACtCP,qBAAa,CAACsB,eAAd,GAAgC,IAAhC;AACAtB,qBAAa,CAAC2B,aAAd,GAA8B,EAA9B;AACH,OAHD;AAKAmD,YAAM,CAACH,gBAAP,CAAwB,YAAxB,EAAsC,UAACpE,CAAD,EAAO;AACzC,YAAIA,CAAC,CAACa,aAAF,CAAgBN,MAAhB,KAA2B,CAA/B,EAAkC;AAC9Bd,uBAAa,CAACsB,eAAd,GAAgCf,CAAC,CAACa,aAAF,CAAgB,CAAhB,EAAmBT,MAAnD;AACAX,uBAAa,CAAC2B,aAAd,GAA8B;AAACT,aAAC,EAAEX,CAAC,CAACa,aAAF,CAAgB,CAAhB,EAAmBJ,KAAvB;AAA8BG,aAAC,EAAEZ,CAAC,CAACa,aAAF,CAAgB,CAAhB,EAAmBH;AAApD,WAA9B;AACH;AACJ,OALD;AAMA6D,YAAM,CAACH,gBAAP,CAAwB,UAAxB,EAAoC,UAACpE,CAAD,EAAO;AACvCP,qBAAa,CAACsB,eAAd,GAAgC,IAAhC;AACAtB,qBAAa,CAAC2B,aAAd,GAA8B,EAA9B;AACH,OAHD;AAIH;AAtBL;;AAAA;AAAA,EAAmCjD,OAAnC;AA2QAsB,2BAAa,CAAC+E,YAAd,G;;;;;;;;;;;;;;;;;;;;;;;;AC/QA;AACA;AACA;AACA;AACA;AAEO,IAAMC,WAAb;AACI,iBAAYC,iBAAZ,EAA+B;AAAA;;AAAA;;AAC3B,SAAKC,WAAL,GAAmB,IAAnB;AACA,SAAKC,KAAL,GAAa,EAAb;AACA,SAAKC,cAAL,GAAsB,EAAtB;AACA,SAAKH,iBAAL,GAAyBA,iBAAzB;AAEA,SAAKI,SAAL,GAAiB,IAAjB;AAEA,SAAKC,MAAL,GAAc,KAAd;AACA,SAAKC,EAAL,GAAU,IAAV;AAEA,SAAKC,0BAAL,GAAkC,IAAlC;AAEA,SAAKC,WAAL,GAAmB,IAAnB;AACA,SAAKC,cAAL,GAAsB,IAAtB;AAEA,SAAKC,WAAL,GAAmB,IAAnB;AACA,SAAKC,kBAAL,GAA0B,IAA1B;AACA,SAAKC,aAAL,GAAqB,CAArB;AAEA,SAAKC,UAAL,GAAkB,IAAI7G,OAAJ,CAAY,UAACC,OAAD,EAAU6G,MAAV,EAAqB;AAC/C,WAAI,CAACN,WAAL,GAAmBvG,OAAnB;AACA,WAAI,CAACwG,cAAL,GAAsBK,MAAtB;AACH,KAHiB,CAAlB;;AAKA,SAAKC,sBAAL,GAA8B,YAAM,CAChC;AACH,KAFD;AAGH;;AA7BL;AAAA;AAAA,WA+BI,wBAAe;AACX,aAAO,KAAKX,SAAZ;AACH;AAjCL;AAAA;AAAA,WAmCI,sBAAaA,SAAb,EAAwB;AACpB,WAAKA,SAAL,GAAiBA,SAAjB;AACH;AArCL;AAAA;AAAA;AAAA,6FAuCI;AAAA;AAAA;AAAA;AAAA;AAAA;AACQvG,yBADR,GACoB,KAAKgF,mBAAL,EADpB;AAEQC,sBAFR,GAEiB,KAAKC,gBAAL,EAFjB;AAAA;AAAA,uBAGUiC,8BAAoB,CAACC,OAArB,CAA6B,cAA7B,EAA6CC,IAAI,CAACC,SAAL,CAAe;AAC9D,wBAAM,KAAKb,EADmD;AAE9D,+BAAazG,SAFiD;AAG9D,2BAASiF;AAHqD,iBAAf,CAA7C,CAHV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAvCJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,WAiDI,4BAAmB;AACf,UAAI,KAAKmB,WAAL,KAAqB,IAAzB,EAA+B;AAC3B,eAAO,KAAKA,WAAL,CAAiBlB,gBAAjB,CAAkC,EAAlC,CAAP;AACH;;AACD,aAAO,EAAP;AACH;AAtDL;AAAA;AAAA,WAwDI,+BAAsB;AAClB,UAAI,KAAKkB,WAAL,KAAqB,IAAzB,EAA+B;AAC3B,eAAO,KAAKA,WAAL,CAAiBpB,mBAAjB,CAAqC,EAArC,CAAP;AACH;;AACD,aAAO,EAAP;AACH;AA7DL;AAAA;AAAA,WA+DI,kBAAS3E,KAAT,EAAgB;AACZ,UAAI,KAAK+F,WAAL,KAAqB,IAAzB,EAA+B;AAC3B,aAAKA,WAAL,CAAiBtB,UAAjB,CAA4BzE,KAA5B;AACH;AACJ;AAnEL;AAAA;AAAA,WAqEI,eAAMoG,EAAN,EAAU;AACN,WAAKA,EAAL,GAAUA,EAAV;AACH;AAvEL;AAAA;AAAA,WAyEI,iBAAQ;AACJ,aAAO,KAAKA,EAAZ;AACH;AA3EL;AAAA;AAAA,WA6EI,oBAAW;AACP,aAAO,IAAP;AACH;AA/EL;AAAA;AAAA,WAiFI,wBAAeL,WAAf,EAA4B;AACxB,WAAKA,WAAL,GAAmBA,WAAnB;AACA,WAAKA,WAAL,CAAiBZ,SAAjB,CAA2B,IAA3B;;AACA,UAAI,KAAKc,cAAT,EAAyB;AACrB,aAAKzB,cAAL;AACH;AACJ;AAvFL;AAAA;AAAA,WAyFI,kBAASwB,KAAT,EAAgB;AACZ,WAAKA,KAAL,GAAa,EAAb;;AACA,WAAK,IAAIvC,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAGyB,KAAK,CAACrE,MAA1B,EAAkC8B,CAAC,GAAGc,CAAtC,EAAyCd,CAAC,EAA1C,EAA8C;AAC1C,aAAKuC,KAAL,CAAWtB,IAAX,CAAgBsB,KAAK,CAACvC,CAAD,CAAL,CAASyD,OAAT,CAAiB,IAAjB,EAAuB,GAAvB,EAA4BC,WAA5B,EAAhB;AACH;AACJ;AA9FL;AAAA;AAAA,WAgGI,2BAAkBxH,SAAlB,EAA6B;AACzB,WAAKsG,cAAL,GAAsBtG,SAAtB;AACH;AAlGL;AAAA;AAAA,WAoGI,wBAAeA,SAAf,EAA0B;AACtB,UAAI,KAAKoG,WAAT,EAAsB;AAClBpG,iBAAS,GAAGS,gBAAM,CAAC2E,OAAP,CAAepF,SAAf,EAA0B,KAAKsG,cAA/B,CAAZ;AACA,aAAKF,WAAL,CAAiBvB,cAAjB,CAAgC7E,SAAhC;AACH;AACJ;AAzGL;AAAA;AAAA,WA2GI,qBAAY;AACR,aAAO,KAAKwG,MAAZ;AACH;AA7GL;AAAA;AAAA,WA+GI,qBAAYpC,YAAZ,EAA0B;AACtB,UAAI,KAAKgC,WAAL,CAAiBf,QAAjB,EAAJ,EAAiC;AAC7B,aAAKmB,MAAL,GAAc,IAAd;AACA,YAAMiB,IAAI,GAAG,IAAb;AACAtH,eAAO,CAACC,OAAR,CAAgBgE,YAAhB,EAA8BE,IAA9B,CAAmC,YAAM;AACrCmD,cAAI,CAACd,WAAL,CAAiB,IAAjB;AACH,SAFD;AAGA,eAAO,IAAP;AACH;;AACD,UAAI,KAAKD,0BAAT,EAAqC;AACjC,aAAKgB,kBAAL;AACH;;AACD,aAAO,KAAP;AACH;AA5HL;AAAA;AAAA,WA8HI,uCAA8BC,UAA9B,EAAyC;AACrC,WAAKjB,0BAAL,GAAmCiB,UAAU,KAAK,IAAlD;AACH;AAhIL;AAAA;AAAA,WAkII,yBAAgB;AACZ,aAAO,KAAKX,UAAZ;AACH;AApIL;AAAA;AAAA,WAsII,0BAAiB;AACb,aAAO,KAAKZ,WAAZ;AACH;AAxIL;AAAA;AAAA,WA0II,0BAAiB,CAChB;AA3IL;AAAA;AAAA,WA6II,gCAAuB;AACnB,aAAOF,KAAK,CAAC0B,yBAAN,CAAgC,KAAKxB,WAArC,CAAP;AACH;AA/IL;AAAA;AAAA,WAiJI,wBAAeyB,OAAf,EAAwB;AAAA;;AACpB,UAAI,KAAKX,sBAAT,EAAiC;AAC7B,aAAKA,sBAAL,CAA4BW,OAA5B;AACH;;AAED,WAAKd,aAAL,GAAqB,IAAIpF,IAAJ,GAAWC,OAAX,EAArB;AACAkG,kBAAY,CAAC,KAAKhB,kBAAN,CAAZ;;AACA,UAAI,KAAKD,WAAT,EAAsB;AAClB,aAAKC,kBAAL,GAA0BzC,UAAU,CAAC,YAAM;AACvC,gBAAI,CAAC0D,UAAL;AACH,SAFmC,EAEjCC,gBAAM,CAACC,YAAP,CAAoB,IAApB,IAA4B,KAFK,CAApC;AAGH;AACJ;AA7JL;AAAA;AAAA,WA+JI,mCAA0BC,QAA1B,EAAoC;AAChC,WAAKhB,sBAAL,GAA8BgB,QAA9B;AACH;AAjKL;AAAA;AAAA,WAmKI,2BAAkB;AACd,aAAOhC,KAAK,CAACiC,oBAAN,CAA2B,KAAK/B,WAAhC,CAAP;AACH;AArKL;AAAA;AAAA,WAoLI,sBAAa;AAAA;;AACT0B,kBAAY,CAAC,KAAKhB,kBAAN,CAAZ;;AACA,UAAI,KAAKD,WAAL,IAAoB,CAAC,KAAKL,MAA9B,EAAsC;AAElC,YAAM4B,KAAK,GAAG,KAAKC,eAAL,EAAd;;AACA,YAAID,KAAK,CAACpG,MAAN,GAAe,CAAnB,EAAsB;AAClB,cAAMsG,KAAK,GAAGN,gBAAM,CAACC,YAAP,CAAoBG,KAAK,CAACpG,MAAN,GAAe,CAAnC,CAAd;AACA,cAAMxB,IAAI,GAAG4H,KAAK,CAACE,KAAD,CAAlB;AAEA9H,cAAI,CAACsF,UAAL,GAAkB5B,SAAlB,CAA4BC,GAA5B,CAAgC,OAAhC;AACAE,oBAAU,CAAC,YAAM;AACb7D,gBAAI,CAACsF,UAAL,GAAkB5B,SAAlB,CAA4BK,MAA5B,CAAmC,OAAnC;AACH,WAFS,EAEPyD,gBAAM,CAACC,YAAP,CAAoB,GAApB,IAA2B,GAFpB,CAAV;AAGH;;AACD,aAAKnB,kBAAL,GAA0BzC,UAAU,CAAC,YAAM;AACvC,gBAAI,CAAC0D,UAAL;AACH,SAFmC,EAEjCC,gBAAM,CAACC,YAAP,CAAoB,IAApB,IAA4B,IAFK,CAApC;AAGH;AACJ;AAtML;AAAA;AAAA,WAuKI,mCAAiCJ,OAAjC,EAA0C;AACtC,UAAIxG,SAAS,GAAG,EAAhB;;AACA,UAAIwG,OAAO,CAAC9D,SAAR,EAAJ,EAAyB;AACrB1C,iBAAS,CAAC0D,IAAV,CAAe8C,OAAf;AACH;;AACD,UAAIA,OAAO,YAAY3G,2BAAvB,EAAsC;AAClC,aAAK,IAAI4C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+D,OAAO,CAAC1G,QAAR,CAAiBa,MAArC,EAA6C8B,CAAC,EAA9C,EAAkD;AAC9CzC,mBAAS,CAAC0D,IAAV,CAAewD,KAAf,CAAqBlH,SAArB,EAAgC6E,KAAK,CAAC0B,yBAAN,CAAgCC,OAAO,CAAC1G,QAAR,CAAiB2C,CAAjB,CAAhC,CAAhC;AACH;AACJ;;AACD,aAAOzC,SAAP;AACH;AAlLL;AAAA;AAAA,WAwMI,6BAA2BmH,IAA3B,EAAiCC,mBAAjC,EAAsD;AAClD,UAAIC,YAAY,GAAG,EAAnB;;AACA,WAAK,IAAI5E,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG4D,IAAI,CAACxG,MAAzB,EAAiC8B,CAAC,GAAGc,CAArC,EAAwCd,CAAC,EAAzC,EAA6C;AACzC4E,oBAAY,CAAC3D,IAAb,CAAkB,IAAIxE,uBAAJ,CAAgBkI,mBAAmB,CAAC9I,SAApB,CAA8B,IAA9B,CAAhB,EAAqD6I,IAAI,CAACG,MAAL,CAAY7E,CAAZ,CAArD,CAAlB;AACH;;AACD,aAAO4E,YAAP;AACH;AA9ML;AAAA;AAAA,WAgNI,8BAA4Bb,OAA5B,EAAqC;AACjC,UAAIO,KAAK,GAAG,EAAZ;;AACA,UAAIP,OAAO,YAAYtH,uBAAvB,EAAoC;AAChC6H,aAAK,CAACrD,IAAN,CAAW8C,OAAX;AACH,OAFD,MAEO,IAAIA,OAAO,YAAY3G,2BAAvB,EAAsC;AACzC,aAAK,IAAI4C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+D,OAAO,CAAC1G,QAAR,CAAiBa,MAArC,EAA6C8B,CAAC,EAA9C,EAAkD;AAC9CsE,eAAK,CAACrD,IAAN,OAAAqD,KAAK,qBAASlC,KAAK,CAACiC,oBAAN,CAA2BN,OAAO,CAAC1G,QAAR,CAAiB2C,CAAjB,CAA3B,CAAT,EAAL;AACH;AACJ;;AACD,aAAOsE,KAAP;AACH;AA1NL;;AAAA;AAAA,I;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AAEO,IAAMQ,qBAAb;AAAA;;AAAA;;AACI,sBAAY/I,OAAZ,EAAqB;AAAA;;AAAA;;AACjB,8BAAMA,OAAN;AACA,UAAKwB,SAAL,GAAiB,KAAjB;AAFiB;AAGpB;;AAJL;AAAA;AAAA,WAMI,wBAAerB,SAAf,EACA;AACI,WAAK,IAAI8D,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD9D,iBAAS,GAAG,KAAKmB,QAAL,CAAc2C,CAAd,EAAiBe,cAAjB,CAAgC7E,SAAhC,CAAZ;AACH;;AACD,aAAOA,SAAP;AACH;AAZL;AAAA;AAAA,WAcI,6BAAoBA,SAApB,EAA8B;AAC1B,WAAK,IAAI8D,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD9D,iBAAS,GAAG,KAAKmB,QAAL,CAAc2C,CAAd,EAAiBkB,mBAAjB,CAAqChF,SAArC,CAAZ;AACH;;AACD,aAAOA,SAAP;AACH;AAnBL;AAAA;AAAA,WAqBI,0BAAiBiF,MAAjB,EAAyB;AACrB,WAAK,IAAInB,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClDmB,cAAM,GAAG,KAAK9D,QAAL,CAAc2C,CAAd,EAAiBoB,gBAAjB,CAAkCD,MAAlC,CAAT;AACH;;AACD,aAAOA,MAAP;AACH;AA1BL;AAAA;AAAA,WA4BI,oBAAW5E,KAAX,EAAkB;AACd,WAAK,IAAIyD,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClDzD,aAAK,GAAG,KAAKc,QAAL,CAAc2C,CAAd,EAAiBgB,UAAjB,CAA4BzE,KAA5B,CAAR;AACH;;AACD,aAAOA,KAAP;AACH;AAjCL;AAAA;AAAA,WAmCI,0BAAiB;AACb,UAAMsF,cAAc,GAAG,KAAK9F,OAAL,CAAaiB,aAAb,CAA2B,kBAA3B,CAAvB;AACAF,8BAAU,CAACC,iBAAX,CAA6B8E,cAA7B;;AAEA,WAAK1B,oBAAL;;AAEA,UAAMwD,IAAI,GAAG,IAAb;;AACA,WAAK5H,OAAL,CAAagJ,OAAb,GAAuB,UAAUpH,CAAV,EAAa;AAChCgG,YAAI,CAAC7E,MAAL;AACAnB,SAAC,CAACgB,eAAF;AACH,OAHD;;AAKA,WAAK,IAAIqB,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD,aAAK3C,QAAL,CAAc2C,CAAd,EAAiBf,cAAjB;;AACA4C,sBAAc,CAAC5E,WAAf,CAA2B,KAAKI,QAAL,CAAc2C,CAAd,EAAiBgC,UAAjB,EAA3B;AACH;AACJ;AAnDL;;AAAA;AAAA,EAAgC5E,2BAAhC,E;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AAEO,IAAM4H,iBAAb;AAAA;;AAAA;;AACI,oBAAYC,SAAZ,EAAuBC,UAAvB,EAAmC;AAAA;;AAAA;;AAC/B,8BAAMD,SAAN;AACA,UAAKC,UAAL,GAAkBA,UAAlB;AAF+B;AAGlC;;AAJL;AAAA;AAAA,WAMI,0BAAiB;AACb,UAAI,KAAK3C,KAAL,CAAWrE,MAAX,IAAqB,CAArB,IAA0B,KAAKqE,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAAvD,IAAqE,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAAtG,EAAkH;AAC9G,YAAIC,YAAY,GAAG/C,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAnB;;AACA,YAAIC,YAAY,GAAGlD,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAnB;;AAEA,YAAI/C,WAAW,GAAG,IAAIwC,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAlB;;AACA,aAAK,IAAIvF,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKoE,UAAL,GAAkB,CAAtC,EAAyClF,CAAC,GAAGc,CAA7C,EAAgDd,CAAC,EAAjD,EAAqD;AACjD,cAAI/D,MAAM,GAAG,IAAImB,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAvJ,gBAAM,CAACuF,QAAP,CAAgB2D,YAAY,CAAC,IAAInF,CAAL,CAA5B;AACA/D,gBAAM,CAACuF,QAAP,CAAgB2D,YAAY,CAAC,IAAInF,CAAJ,GAAQ,CAAT,CAA5B;AACA/D,gBAAM,CAACuF,QAAP,CAAgB8D,YAAY,CAAC,IAAItF,CAAL,CAA5B;AACA/D,gBAAM,CAACuF,QAAP,CAAgB8D,YAAY,CAAC,IAAItF,CAAJ,GAAQ,CAAT,CAA5B;AACAsC,qBAAW,CAACd,QAAZ,CAAqBvF,MAArB;AACH,SAZ6G,CAa9G;;;AACA,aAAKwJ,cAAL,CAAoBnD,WAApB;AACH;AACJ;AAvBL;;AAAA;AAAA,EAA8BF,WAA9B,E;;;;;;;;;;;;;;;;;;;;ACJA;AAEO,IAAMsD,WAAb;AAAA;;AAAA;;AACI,uBAAYT,SAAZ,EAAuB;AAAA;;AAAA,6BACbA,SADa,EACF,CADE;AAEtB;;AAHL;AAAA,EAAiCD,iBAAjC,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMW,SAAb;AAAA;;AAAA;;AACI,qBAAYV,SAAZ,EAAuB;AAAA;;AAAA,6BACbA,SADa,EACF,CADE;AAEtB;;AAHL;AAAA,EAA+BD,iBAA/B,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMY,UAAb;AAAA;;AAAA;;AACI,sBAAYX,SAAZ,EAAuB;AAAA;;AAAA,6BACbA,SADa,EACF,EADE;AAEtB;;AAHL;AAAA,EAAgCD,iBAAhC,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMa,eAAb;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,EAAqCf,qBAArC,E;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AAEO,IAAMgB,iCAAb;AAAA;;AAAA;;AAEI,4BAAYzD,iBAAZ,EAA+B6C,UAA/B,EAA2C;AAAA;;AAAA;;AACvC,8BAAM7C,iBAAN;AACA,UAAK6C,UAAL,GAAkBA,UAAlB;AAFuC;AAG1C;;AALL;AAAA;AAAA,WAOI,0BAAiB;AACb,UAAI,KAAK3C,KAAL,CAAWrE,MAAX,IAAqB,CAArB,IACA,KAAKqE,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAD7B,IAEA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAF7B,IAGA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAH7B,IAIA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAJ7B,IAKA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAL7B,IAMA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UANjC,EAOE;AACE,YAAIa,UAAU,GAAG,EAAjB;AACAA,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AAEA,YAAI/C,WAAW,GAAG,IAAIwC,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAlB;;AACA,aAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkF,UAAL,GAAkB,CAAtC,EAAyClF,CAAC,EAA1C,EAA8C;AAE1C,cAAIgG,OAAO,GAAG,EAAd;AACAA,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AAEAQ,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAhB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAE/F,CAAF,GAAI,CAAlB,CAApB;AAEA,cAAI/D,MAAM,GAAG,IAAImB,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACA,cAAIS,QAAQ,GAAG,IAAIJ,eAAJ,CAAoB,KAAKxD,iBAAL,CAAuB6D,oBAAvB,EAApB,CAAf;;AACA,cAAIlG,CAAC,GAAG,CAAJ,KAAU,CAAd,EAAiB;AACb/D,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AAEA,gBAAIG,UAAU,GAAG,IAAIrB,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAjB;AAEAY,sBAAU,CAAC3E,QAAX,CAAoBwE,OAAO,CAAC,CAAD,CAA3B;AACAG,sBAAU,CAAC3E,QAAX,CAAoBwE,OAAO,CAAC,CAAD,CAA3B;AAEAC,oBAAQ,CAACzE,QAAT,CAAkBvF,MAAlB;AACAgK,oBAAQ,CAACzE,QAAT,CAAkB2E,UAAlB;AAEAF,oBAAQ,CAACjE,UAAT,GAAsB5B,SAAtB,CAAgCC,GAAhC,CAAoC,QAApC;AACH,WAfD,MAgBK;AAED,gBAAI8F,WAAU,GAAG,IAAIrB,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAjB;;AAEAY,uBAAU,CAAC3E,QAAX,CAAoBwE,OAAO,CAAC,CAAD,CAA3B;;AACAG,uBAAU,CAAC3E,QAAX,CAAoBwE,OAAO,CAAC,CAAD,CAA3B;;AAEAC,oBAAQ,CAACzE,QAAT,CAAkB2E,WAAlB;AACAF,oBAAQ,CAACzE,QAAT,CAAkBvF,MAAlB;AAEAA,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,kBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AAEAC,oBAAQ,CAACjE,UAAT,GAAsB5B,SAAtB,CAAgCC,GAAhC,CAAoC,QAApC;AACH;;AACDiC,qBAAW,CAACd,QAAZ,CAAqByE,QAArB;AACH;;AACD,aAAKR,cAAL,CAAoBnD,WAApB;AACH;AACJ;AAxGL;;AAAA;AAAA,EAAsCF,WAAtC,E;;;;;;;;;;;;;;;;;;;;ACLA;AAEO,IAAMgE,iBAAb;AAAA;;AAAA;;AACI,6BAAY/D,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,CADE;AAE9B;;AAHL;AAAA,EAAuCyD,iCAAvC,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMO,kBAAb;AAAA;;AAAA;;AACI,8BAAYhE,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE;AAE9B;;AAHL;AAAA,EAAwCyD,iCAAxC,E;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AAEO,IAAMQ,6BAAb;AAAA;;AAAA;;AAEI,0BAAYjE,iBAAZ,EAA+B6C,UAA/B,EAA2C;AAAA;;AAAA;;AACvC,8BAAM7C,iBAAN;AACA,UAAK6C,UAAL,GAAkBA,UAAlB;AAFuC;AAG1C;;AALL;AAAA;AAAA,WAOI,0BAAiB;AACb,UAAI,KAAK3C,KAAL,CAAWrE,MAAX,IAAqB,CAArB,IACA,KAAKqE,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAD7B,IAEA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAF7B,IAGA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAH7B,IAIA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAJjC,EAKE;AACE,YAAIa,UAAU,GAAG,EAAjB;AACAA,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AAEA,YAAI/C,WAAW,GAAG,IAAIwC,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAlB;;AACA,aAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkF,UAAL,GAAkB,CAAtC,EAAyClF,CAAC,EAA1C,EAA8C;AAE1C,cAAIgG,OAAO,GAAG,EAAd;AACAA,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AAEAQ,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEA,cAAI/D,MAAM,GAAG,IAAImB,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAvJ,gBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,gBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,gBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AACA/J,gBAAM,CAACuF,QAAP,CAAgBwE,OAAO,CAAC,CAAD,CAAvB;AAEA1D,qBAAW,CAACd,QAAZ,CAAqBvF,MAArB;AACH;;AACD,aAAKwJ,cAAL,CAAoBnD,WAApB;AACH;AACJ;AA3DL;;AAAA;AAAA,EAAoCF,WAApC,E;;;;;;;;;;;;;;;;;;;;ACJA;AAEO,IAAMmE,eAAb;AAAA;;AAAA;;AACI,2BAAYlE,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,CADE;AAE9B;;AAHL;AAAA,EAAqCiE,6BAArC,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAME,gBAAb;AAAA;;AAAA;;AACI,4BAAYnE,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE;AAE9B;;AAHL;AAAA,EAAsCiE,6BAAtC,E;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAEO,IAAMG,2BAAb;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,WAEI,0BAAiB;AACb,UAAM5E,cAAc,GAAG,KAAK9F,OAAL,CAAaiB,aAAb,CAA2B,kBAA3B,CAAvB;AACAF,8BAAU,CAACC,iBAAX,CAA6B8E,cAA7B;;AAEA,WAAK1B,oBAAL;;AAEA,UAAMwD,IAAI,GAAG,IAAb;;AACA,WAAK5H,OAAL,CAAagJ,OAAb,GAAuB,UAAUpH,CAAV,EAAa;AAChCgG,YAAI,CAAC7E,MAAL;AACAnB,SAAC,CAACgB,eAAF;AACH,OAHD;;AAKA,WAAK,IAAIqB,CAAC,GAAG,CAAR,EAAWc,CAAC,GAAG,KAAKzD,QAAL,CAAca,MAAlC,EAA0C8B,CAAC,GAAGc,CAA9C,EAAiDd,CAAC,EAAlD,EAAsD;AAClD,aAAK3C,QAAL,CAAc2C,CAAd,EAAiBf,cAAjB;;AACA4C,sBAAc,CAAC5E,WAAf,CAA2B,KAAKI,QAAL,CAAc2C,CAAd,EAAiBgC,UAAjB,EAA3B;AACH;AACJ,KAlBL,CAoBI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAtEJ;;AAAA;AAAA,EAAmC8C,qBAAnC,E;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AAEO,IAAM4B,mCAAb;AAAA;;AAAA;;AACI,6BAAYrE,iBAAZ,EAA+B6C,UAA/B,EAA2CyB,mBAA3C,EAAgE;AAAA;;AAAA;;AAC5D,8BAAMtE,iBAAN;AACA,UAAK6C,UAAL,GAAkBA,UAAlB;AACA,UAAKyB,mBAAL,GAA2BA,mBAA3B;AAH4D;AAI/D;;AALL;AAAA;AAAA,WAOI,0BAAiB;AACb,UAAI,KAAKpE,KAAL,CAAWrE,MAAX,IAAqB,CAArB,IACA,KAAKqE,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAD7B,IAEA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAF7B,IAGA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAH7B,IAIA,KAAK3C,KAAL,CAAW,CAAX,EAAcrE,MAAd,IAAwB,KAAKgH,UAJ7B,IAKA,KAAKA,UAAL,IAAmB,CALvB,EAME;AACE,YAAIa,UAAU,GAAG,EAAjB;AACAA,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AACAU,kBAAU,CAAC,CAAD,CAAV,GAAgB3D,WAAK,CAACgD,mBAAN,CAA0B,KAAK7C,KAAL,CAAW,CAAX,CAA1B,EAAyC,KAAKF,iBAAL,CAAuBgD,gBAAvB,EAAzC,CAAhB;AAEA,YAAI/C,WAAW,GAAG,IAAIwC,qBAAJ,CAAe,KAAKzC,iBAAL,CAAuBkD,eAAvB,EAAf,CAAlB;;AACA,aAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkF,UAAL,GAAkB,CAAtC,EAAyClF,CAAC,EAA1C,EAA8C;AAC1C,cAAIgG,OAAO,GAAG,EAAd;AACAA,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,iBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AAEAQ,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAlB,CAApB;AACAgG,iBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEA,cAAI4G,aAAa,GAAE,IAAnB;;AACA,cAAI,KAAKD,mBAAL,CAAyBE,OAAzB,CAAiC7G,CAAjC,MAAwC,CAAC,CAA7C,EAA+C;AAC3CgG,mBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AACAQ,mBAAO,CAAC,CAAD,CAAP,GAAa,IAAI5I,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAb;AAEAQ,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AACAgG,mBAAO,CAAC,CAAD,CAAP,CAAWxE,QAAX,CAAoBuE,UAAU,CAAC,CAAD,CAAV,CAAc,IAAI/F,CAAJ,GAAQ,CAAtB,CAApB;AAEA4G,yBAAa,GAAG,IAAIxJ,2BAAJ,CAAkB,KAAKiF,iBAAL,CAAuBmD,kBAAvB,EAAlB,CAAhB;AACAoB,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACAY,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACAY,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACAY,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACAhG,aAAC;AACJ,WApBD,MAqBI;AACA4G,yBAAa,GAAG,IAAIH,2BAAJ,CAAkB,KAAKpE,iBAAL,CAAuByE,kBAAvB,EAAlB,CAAhB;AACAF,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACAY,yBAAa,CAACpF,QAAd,CAAuBwE,OAAO,CAAC,CAAD,CAA9B;AACH;;AAED1D,qBAAW,CAACd,QAAZ,CAAqBoF,aAArB;AACH;;AACD,aAAKnB,cAAL,CAAoBnD,WAApB;AACH;AACJ;AArEL;;AAAA;AAAA,EAAuCF,WAAvC,E;;;;;;;;;;;;;;;;;;;;ACLA;AAEO,IAAM2E,oBAAb;AAAA;;AAAA;;AACI,gCAAY1E,iBAAZ,EAA+B6C,UAA/B,EAA2C8B,kBAA3C,EAA+D;AAAA;;AAAA,6BACrD3E,iBADqD,EAClC6C,UADkC,EACtB,CAAC8B,kBAAD,CADsB;AAE9D;;AAHL;AAAA,EAA0CN,mCAA1C,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMO,wBAAb;AAAA;;AAAA;;AACI,oCAAY5E,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CADF;AAE9B;;AAHL;AAAA,EAA8C0E,oBAA9C,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMG,wBAAb;AAAA;;AAAA;;AACI,oCAAY7E,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CADF;AAE9B;;AAHL;AAAA,EAA8C0E,oBAA9C,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMI,wBAAb;AAAA;;AAAA;;AACI,oCAAY9E,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CADF;AAE9B;;AAHL;AAAA,EAA8C0E,oBAA9C,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMK,wBAAb;AAAA;;AAAA;;AACI,oCAAY/E,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CADF;AAE9B;;AAHL;AAAA,EAA8C0E,oBAA9C,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMM,8BAAb;AAAA;;AAAA;;AACI,0CAAYhF,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CAAC,CAAD,EAAG,CAAH,CADF;AAE9B;;AAHL;AAAA,EAAoDqE,mCAApD,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMY,8BAAb;AAAA;;AAAA;;AACI,0CAAYjF,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CAAC,CAAD,EAAG,CAAH,CADF;AAE9B;;AAHL;AAAA,EAAoDqE,mCAApD,E;;;;;;;;;;;;;;;;;;;;ACFA;AAEO,IAAMa,8BAAb;AAAA;;AAAA;;AACI,0CAAYlF,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,EADE,EACE,CAAC,CAAD,EAAG,CAAH,CADF;AAE9B;;AAHL;AAAA,EAAoDqE,mCAApD,E;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGO,IAAM,WAAb;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,WAiBI,sBAAoB,MAApB,EAA4B,KAA5B,EAAiC;AAC7B,iBAAW,CAAC,KAAZ,CAAkB,MAAlB,IAA4B,KAA5B;AACH;AAnBL;AAAA;AAAA,WAqBI,uBAAqB,IAArB,EAAyB;AACrB,aAAO,WAAW,CAAC,KAAZ,CAAkB,IAAlB,CAAP;AACH;AAvBL;AAAA;AAAA,WAyBI,sBAAoB,SAApB,EAA+B,iBAA/B,EAAgD;AAC5C,UAAI,KAAK,GAAG,IAAK,WAAW,CAAC,KAAZ,CAAkB,SAAS,CAAC,UAAD,CAA3B,CAAL,CAA+C,iBAA/C,CAAZ;AACA,WAAK,CAAC,QAAN,CAAe,IAAI,CAAC,KAAL,CAAW,SAAS,CAAC,OAAD,CAAT,CAAmB,OAAnB,CAA2B,SAA3B,EAAsC,GAAtC,CAAX,CAAf;AACA,WAAK,CAAC,KAAN,CAAY,SAAS,CAAC,IAAD,CAArB;AACA,WAAK,CAAC,YAAN,CAAmB,SAAnB;AAEA,eAAS,CAAC,WAAD,CAAT,GAAyB,IAAI,CAAC,KAAL,CAAW,SAAS,CAAC,WAAD,CAApB,CAAzB;;AACA,WAAK,IAAI,CAAC,GAAG,CAAR,EAAW,CAAC,GAAG,SAAS,CAAC,WAAD,CAAT,CAAuB,MAA3C,EAAmD,CAAC,GAAG,CAAvD,EAA0D,CAAC,EAA3D,EAA+D;AAC3D,YAAI,SAAS,CAAC,WAAD,CAAT,CAAuB,CAAvB,KAA6B,CAAjC,EAAoC;AAChC,mBAAS,CAAC,WAAD,CAAT,CAAuB,CAAvB,IAA4B,KAAK,SAAS,CAAC,WAAD,CAAT,CAAuB,CAAvB,CAAjC;AACH;AACJ;;AAED,WAAK,CAAC,iBAAN,CAAwB,SAAS,CAAC,WAAD,CAAjC;AACA,aAAO,KAAP;AACH;AAxCL;;AAAA;AAAA;AAC2B,oBAAQ;AAC3B,MAAI,WADuB;AAE3B,MAAI,SAFuB;AAG3B,MAAI,UAHuB;AAI3B,MAAI,wBAJuB;AAK3B,MAAI,wBALuB;AAM3B,MAAI,wBANuB;AAO3B,MAAI,wBAPuB;AAQ3B,OAAK,iBARsB;AAS3B,OAAK,8BATsB;AAU3B,OAAK,8BAVsB;AAW3B,OAAK,8BAXsB;AAY3B,OAAK,eAZsB;AAa3B,OAAK,kBAbsB;AAc3B,OAAK,gBAAgB;AAdM,CAAR,C;;;;;;;;;;;;;;;;;;;;ACjB3B,IAAM,IAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;AAEO,IAAM,OAAb;AAAA;;AAAA;;AACI,mBAAY,WAAZ,EAAuB;AAAA;;AAAA,6BACb,WADa,EACA,IADA;AAEtB;;AAHL;AAAA,EAA6B,kBAA7B,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AAGO,IAAM,uBAAb;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,WAKI,gCAA2B;AACvB,UAAI,OAAO,GAAG,iGAAd;;AACA,aAAO,CAAC,QAAD,CAAP,GAAoB;AAAC,YAAI,EAAE,sCAAY,CAAC,KAAb,CAAmB,OAA1B;AAAmC,eAAO,EAAE;AAA5C,OAApB;AACA,aAAO,OAAP;AACH;AATL;AAAA;AAAA,WAWI,kCAA6B;AACzB,UAAI,SAAS,GAAG,mGAAhB;;AACA,eAAS,CAAC,WAAD,CAAT,GAAyB;AACrB,cAAM,EAAE,mBAAS,CAAC,aAAV,EADa;AAErB,YAAI,EAAE,YAFe;AAGrB,kBAAU,EAAE,IAHS,CAIrB;;AAJqB,OAAzB;AAMA,aAAO,SAAP;AACH;AApBL;AAAA;AAAA,WAsBI,mBAAuB,SAAvB,EAAkC,MAAlC,EAAyC;;;;;;;AACrC,sBAAM,GAAG,gBAAM,CAAC,OAAP,CAAe,MAAf,EAAuB,IAAvB,CAAT;AACI,2B,GAAc,IAAI,WAAJ,E;AAClB,2BAAW,CAAC,SAAZ,GAAwB,SAAxB;AACA,2BAAW,CAAC,MAAZ,GAAqB,MAArB;;AAEO,uBAAM,WAAW,CAAC,IAAZ,EAAN;;;;;;;;;;;;AACV;AA7BL;AAAA;AAAA,WA+BI,0BAA8B,QAA9B,EAAsC;;;;;;;;AACM,uBAAM,KAAK,SAAL,CAAe,kBAAf,CAAkC,mBAAlC,CAAN;;;AAApC,kB;AAEJ,kBAAE,GAAG,EAAE,CAAC,MAAH,CAAU,+BAAV,EACA,QADA,CACS,WADT,EACsB,aADtB,EACqC,sCADrC,EAEA,KAFA,CAEM,oCAFN,EAGA,QAHA,CAGS,kBAAgB,QAAQ,CAAC,IAAT,CAAc,GAAd,CAAhB,GAAmC,GAH5C,EAIA,QAJA,CAIS,oDAJT,EAKA,OALA,CAKQ,YALR,EAMA,OANA,CAMQ,0BANR,CAAL;;AAQe,uBAAM,EAAE,CAAC,UAAH,EAAN;;;AAAX,wB;AAEA,0B,GAAa,I;AACb,sB,GAAS,I;;oBAER,QAAQ,CAAC,IAAT,CAAc,aAAG,EAAG;AACrB,sBAAI,GAAG,CAAC,OAAD,CAAH,GAAe,CAAnB,EAAqB;AACjB,8BAAU,GAAG,GAAG,CAAC,YAAD,CAAhB;AACA,0BAAM,GAAG,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,KAAgB,IAAI,CAAC,KAAL,CAAW,GAAG,CAAC,OAAD,CAAd,CAA3B,CAAT;AACA,2BAAO,IAAP;AACH;;AACD,yBAAO,KAAP;AACH,iBAPI,C;;;;;kDAQM,I;;;;AAGyB,uBAAM,KAAK,SAAL,CAAe,kBAAf,CAAkC,mBAAlC,CAAN;;;AAApC,kB;AACA,kBAAE,GAAG,EAAE,CACF,QADA,CACS,WADT,EACsB,aADtB,EACqC,sCADrC,EAEA,KAFA,CAEM,oCAFN,EAGA,QAHA,CAGS,kBAAgB,UAHzB,EAIA,QAJA,CAIS,kBAAgB,QAAQ,CAAC,IAAT,CAAc,GAAd,CAAhB,GAAmC,GAJ5C,EAKA,QALA,CAKS,oDALT,EAMA,OANA,CAMQ,cANR,EAOA,KAPA,CAOM,CAPN,EAQA,MARA,CAQO,MARP,CAAL;;AAUO,uBAAM,EAAE,CAAC,MAAH,EAAN;;;;;;;;;;;;AACV;AAtEL;;AAAA;AAAA,EAAiC,sBAAjC;AAwEA,sCAAY,CAAC,QAAb,CAAsB,uBAAtB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5EA,IAAM,QAAQ,GAAG,mBAAO,CAAC,GAAD,CAAP,CAA8B,OAA/C;;AACA,IAAM,cAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA,IAAM,SAAS,GAAG,mBAAO,CAAC,GAAD,CAAP,CAAyD,OAA3E;;AAEA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AAEA;AACA;AAEO,IAAM,mBAAb;AAAA;;AAAA;;AAuBI,qBAAY,WAAZ,EAAuB;AAAA;;AAAA,8BACb,WADa,EACA,cADA,GAEnB;AACH;;AA1BL;AAAA;AAAA,WA4BU,sBAAa,MAAb,EAAmB;AAAA;;;;;;;;;;;;;;;;;;AACrB,uBAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,EAAmB,MAAnB;;8BAEqB,oB;8BAAW,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;;;0CAAR,O,gCAAqD,G;;8BAAM,YAAK,CACtG,C;;8BAAE,oBAAU,CAAC,W;AADV,0B,0DACuB,G;AAC3B,0BAAU,CAAC,gBAAX,GAA8B,KAA9B;AACA,0BAAU,CAAC,UAAX,CAAsB,kBAAtB;AACA,sBAAM,CAAC,SAAP,CAAiB,UAAjB;AACA,qBAAK,UAAL,GAAkB,UAAlB;AAEI,kC,GAAqB,IAAI,oBAAJ,CAAe,gBAAM,CAAC,OAAP,CAAe,KAAK,YAApB,EAAkC,GAAlC,CAAf,EAAuD,YAAK,CACpF,CADwB,EACtB,oBAAU,CAAC,WADW,EACE,GADF,C;AAEzB,kCAAkB,CAAC,gBAAnB,GAAsC,KAAtC;AACA,kCAAkB,CAAC,UAAnB,CAA8B,eAA9B;AACA,sBAAM,CAAC,SAAP,CAAiB,kBAAjB;AACA,qBAAK,kBAAL,GAA0B,kBAA1B;AAEI,0B,GAAa,IAAI,oBAAJ,CAAe,EAAf,EAAmB,YAAK;AACrC,wBAAI,CAAC,IAAL;AACH,iBAFgB,EAEd,oBAAU,CAAC,WAFG,EAEU,GAFV,C;AAGjB,0BAAU,CAAC,gBAAX,GAA8B,KAA9B;AACA,0BAAU,CAAC,KAAX,GAAmB,QAAnB;AACA,0BAAU,CAAC,UAAX,CAAsB,gCAAtB;AACA,sBAAM,CAAC,SAAP,CAAiB,UAAjB;iDAEO,M;;;;;;;;;AACV;AAtDL;AAAA;AAAA,WAwDU,qBAAY,IAAZ,EAAgB;AAAA;;;;;;;;;;;;;;;;+BACE,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,cAA7B,CAAN;;;;AAAnC,qBAAK,Y,gBAAsB,O,kCAA4D,C;;AACvF;AACA,qBAAK,WAAL,GAAmB,YAAK,CACvB,CADD;;AAEA,qBAAK,SAAL,GAAiB;AACb,yBAAO,EAAE,KADI;AAEb,kCAAgB,EAAE;AAFL,iBAAjB;AAIA,qBAAK,WAAL,GAAmB,OAAO,CAAC,OAAR,EAAnB;AAEI,4B,GAAe,4BAAY,CAAC,WAAb,E;+BACnB,Y;+BACW,S;;AACE,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;gDAA2D,G;;AADpE,uB;AACA,uB;AACA,wB,EAAQ;;+BACT,4BAAY,CAAC,QAAb,CAAsB,K;;6BAJZ,G;;AAMb,4BAAY,CAAC,MAAb,CAAoB,4BAAY,CAAC,QAAb,CAAsB,KAA1C;kDAEO,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,IAAlB,C;;;;;;;;;AACV;AA7EL;AAAA;AAAA,WA+EU,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AACN,mC,GAAsB,KAAK,MAAL,CAAY,wBAAZ,C;AACtB,qC,GAAwB,KAAK,MAAL,CAAY,0BAAZ,C;AACxB,kC,GAAqB,KAAK,MAAL,CAAY,uBAAZ,C;AACrB,gC,GAAmB,KAAK,MAAL,CAAY,4BAAZ,C;AACnB,8B,GAAiB,KAAK,MAAL,CAAY,0BAAZ,C;AAErB,mCAAmB,CAAC,eAApB,CAAoC,IAApC;AACA,qCAAqB,CAAC,eAAtB,CAAsC,IAAtC;AACA,kCAAkB,CAAC,eAAnB,CAAmC,IAAnC;AACA,gCAAgB,CAAC,eAAjB,CAAiC,IAAjC;AACA,8BAAc,CAAC,eAAf,CAA+B,IAA/B;AAEA,mCAAmB,CAAC,MAApB;AACA,qCAAqB,CAAC,MAAtB;AACA,kCAAkB,CAAC,MAAnB;AACA,gCAAgB,CAAC,MAAjB;AACA,8BAAc,CAAC,MAAf;AAEI,8B,GAAiB,KAAK,MAAL,CAAY,kBAAZ,C;AACrB,8BAAc,CAAC,gBAAf,CAAgC,OAAhC,EAAyC,YAAK;AAC1C,gCAAc,CAAC,KAAf,CAAqB,OAArB,GAA+B,CAA/B;;AACA,wBAAI,CAAC,SAAL;AACH,iBAHD;AAKI,uB,GAAU,KAAK,MAAL,CAAY,WAAZ,C;AAEV,2B,GAAc,IAAI,qBAAJ,E;;AACU,uBAAM,WAAW,CAAC,WAAZ,CAAwB,cAAxB,EAAwC,cAAc,CAAC,aAAvD,EAAsE,KAAtE,EAA6E,IAA7E,EAAmF,CAAnF,CAAN;;;AAA5B,qBAAK,oB;;AACgB,uBAAM,WAAW,CAAC,WAAZ,CAAwB,OAAxB,EAAiC,OAAO,CAAC,aAAzC,EAAwD,KAAxD,EAA+D,KAA/D,EAAsE,CAAtE,EAAyE,IAAzE,EAA+E,CAA/E,CAAN;;;AAArB,qBAAK,a;AACL,qBAAK,OAAL,GAAe,OAAf;AACA,qBAAK,OAAL,CAAa,KAAb,CAAmB,QAAnB,GAA8B,GAA9B;AAEA,qBAAK,iBAAL,GAAyB,IAAI,iBAAJ,CAAsB,mBAAtB,EAA2C,qBAA3C,EAAkE,kBAAlE,EAAsF,gBAAtF,EAAwG,cAAxG,CAAzB;AAEA,qBAAK,YAAL,GAAoB,KAAK,MAAL,CAAY,gBAAZ,CAApB;AACA,qBAAK,aAAL,GAAqB,KAAK,MAAL,CAAY,iBAAZ,CAArB;AAEA,qBAAK,YAAL,CAAkB,EAAlB,GAAuB,IAAvB;AACA,wCAAU,CAAC,iBAAX,CAA6B,KAAK,aAAlC,E,CAEA;AACA;AACA;;;AACA,uBAAM,KAAK,aAAL,EAAN;;;kDAEO,G;;;;;;;;;AACV;AA/HL;AAAA;AAAA,WAiIU,yBAAa;;;;;;;;;;;AAEY,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,cAA7B,CAAN;;;AAAnB,gC;;qBACA,gBAAM,CAAC,SAAP,CAAiB,gBAAjB,C;;;;;AACA,gCAAgB,GAAG,IAAI,CAAC,KAAL,CAAW,gBAAX,CAAnB;;AAEgB,uBAAM,mBAAS,CAAC,QAAV,CAAmB,gBAAgB,CAAC,IAAD,CAAnC,CAAN;;;AAAZ,yB;;qBAEA,gBAAM,CAAC,MAAP,CAAc,SAAd,C;;;;;kDACO,KAAK,SAAL,E;;;AAGP,qB,GAAQ,WAAW,CAAC,YAAZ,CAAyB,SAAzB,EAAoC,KAAK,iBAAzC,C;AACZ,qBAAK,CAAC,iBAAN,CAAwB,gBAAgB,CAAC,WAAD,CAAxC;AAEA,qBAAK,CAAC,aAAN,GAAsB,IAAtB,CAA2B,YAAK;AAC5B,wBAAI,CAAC,QAAL,CAAc,KAAd;AACH,iBAFD;AAIA,qBAAK,CAAC,cAAN;AACA,qBAAK,CAAC,QAAN,CAAe,gBAAgB,CAAC,OAAD,CAA/B;;AACA,qBAAK,CAAC,cAAN,GAAuB,cAAvB;;AAEA,qBAAK,CAAC,kBAAN;AAEI,4B,GAAe,KAAK,MAAL,CAAY,QAAZ,C;AACnB,wCAAU,CAAC,iBAAX,CAA6B,YAA7B,EAA2C,WAA3C,CAAuD,KAAK,CAAC,cAAN,GAAuB,UAAvB,EAAvD;AACI,2B,GAAc,IAAI,qBAAJ,E;;AACC,uBAAM,WAAW,CAAC,OAAZ,CAAoB,CAApB,EAAuB,YAAvB,EAAqC,YAAY,CAAC,aAAlD,EAAiE,KAAjE,EAAwE,KAAxE,EAA+E,CAA/E,EAAkF,KAAK,CAAC,KAAN,CAAY,CAAZ,EAAe,MAAf,GAAwB,GAA1G,EAA+G,IAA/G,EAAqH,CAArH,CAAN;;;AAAnB,qBAAK,W;AAEL,qBAAK,KAAL,GAAa,KAAb;AACA,gCAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,WAAf,EAA4B,eAA5B,CAAZ;AACA,qBAAK,KAAL,CAAW,WAAX;;;;;;;;;;AAIJ,uBAAO,CAAC,KAAR;;;kDAEG,KAAK,SAAL,E;;;;;;;;;AACV;AAxKL;AAAA;AAAA,WA0KI,wBAAY;AACR,WAAK,SAAL,CAAe,OAAf;AACA,WAAK,MAAL;AACH;AA7KL;AAAA;AAAA,WA+KI,8BAAkB;AACd,WAAK,kBAAL,CAAwB,OAAxB,CAAgC,KAAK,YAArC;;AACA,UAAI,KAAK,YAAL,IAAqB,EAArB,IAA2B,KAAK,YAAL,IAAqB,EAApD,EAAwD;AACpD,aAAK,kBAAL,CAAwB,UAAxB,CAAmC,sBAAnC;AACH,OAFD,MAEO,IAAI,KAAK,YAAL,IAAqB,GAArB,IAA4B,KAAK,YAAL,IAAqB,GAArD,EAA0D;AAC7D,aAAK,kBAAL,CAAwB,UAAxB,CAAmC,uBAAnC;AACH,OAFM,MAEA,IAAI,KAAK,YAAL,IAAqB,IAAzB,EAA+B;AAClC,aAAK,kBAAL,CAAwB,UAAxB,CAAmC,wBAAnC;AACH,OAFM,MAEA;AACH,aAAK,kBAAL,CAAwB,UAAxB,CAAmC,eAAnC;AACH;AACJ;AA1LL;AAAA;AAAA,WA4LU,qBAAS;;;;;;;;;AACX,qBAAK,iBAAL;;;AAEoB,uBAAM,uBAAW,CAAC,gBAAZ,CAA6B,SAAS,CAAC,cAAvC,CAAN;;;AAAZ,yB;;qBAEA,gBAAM,CAAC,MAAP,CAAc,SAAd,C;;;;;AACA,qBAAK,YAAL;;;;AAIE,qB,GAAQ,WAAW,CAAC,YAAZ,CAAyB,SAAzB,EAAoC,KAAK,iBAAzC,C,EAEd;;sBACI,KAAK,KAAL,IAAc,KAAK,CAAC,EAAN,KAAa,KAAK,KAAL,CAAW,E;;;;;AACtC,uBAAO,CAAC,GAAR,CAAY,sCAAZ;;AACA,uBAAM,IAAI,OAAJ,CAAY,UAAC,OAAD;AAAA,yBAAa,UAAU,CAAC,OAAD,EAAU,EAAV,CAAvB;AAAA,iBAAZ,CAAN;;;AACA;AACA;kDACO,KAAK,SAAL,E;;;AAGX,qBAAK,CAAC,aAAN,GAAsB,IAAtB,CAA2B;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAClC,mCAAM,KAAK,QAAL,CAAc,KAAd,CAAN;;AADkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAA3B;AAIA,qBAAK,CAAC,cAAN;;AACA,qBAAK,CAAC,cAAN,GAAuB,cAAvB;;AAEA,qBAAK,CAAC,kBAAN;AAEI,4B,GAAe,KAAK,MAAL,CAAY,QAAZ,C;AACnB,wCAAU,CAAC,iBAAX,CAA6B,YAA7B,EAA2C,WAA3C,CAAuD,KAAK,CAAC,cAAN,GAAuB,UAAvB,EAAvD;;AAEA,qBAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,KAA5B;;AACA,qBAAK,OAAL,CAAa,KAAb,CAAmB,QAAnB,GAA8B,GAA9B;AACA,qBAAK,mBAAL;AAEI,2B,GAAc,IAAI,qBAAJ,E;;AACC,uBAAM,WAAW,CAAC,WAAZ,CAAwB,YAAxB,EAAsC,YAAY,CAAC,aAAnD,EAAkE,KAAlE,EAAyE,KAAzE,EAAgF,CAAhF,EAAmF,KAAK,CAAC,KAAN,CAAY,CAAZ,EAAe,MAAf,GAAwB,GAA3G,EAAgH,IAAhH,EAAsH,CAAtH,CAAN;;;AAAnB,qBAAK,W;AAEL,qBAAK,KAAL,GAAa,KAAb;AACA,qBAAK,kBAAL;+BAEA,KAAK,U;+BAAmB,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;;;4CAAR,O,kCAAqD,G;;6BAApE,O;;AAChB;AAEA,qBAAK,SAAL,CAAe,OAAf,GAAyB,IAAzB;AACA,4BAAY,CAAC,KAAK,SAAL,CAAe,gBAAhB,CAAZ;AAEA,gCAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,WAAf,EAA4B,WAA5B,EAAyC,qBAAzC,EAAgE,KAAK,YAArE,CAAZ;AAEA,qBAAK,KAAL,CAAW,WAAX;kDAEO,KAAK,QAAL,E;;;;;AAEP,uBAAO,CAAC,GAAR,CAAY,SAAZ;AACA,uBAAO,CAAC,KAAR;AACA,qBAAK,YAAL;;;;;;;;;AAEP;AAvPL;AAAA;AAAA,WAyPU,iBAAQ,IAAR,EAAY;AAAA;;;;;;;;;;;;;;;;AACd,qBAAK,QAAL,CAAc,IAAd;AAEA,gCAAM,CAAC,MAAP,CAAc,aAAd;AACI,mB,GAAM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,IAAd,C;;AAEV,oBAAI,KAAK,kBAAT,EAA6B;AACzB,uBAAK,kBAAL;AACH;;AACD,qBAAK,WAAL,G,CAEA;;AACI,4B,GAAe,4BAAY,CAAC,WAAb,E;+BACnB,Y;+BACW,S;;AACC,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;gDAA0D,G;;AADlE,uB;AACA,uB;AACA,wB,EAAQ;;+BACT,4BAAY,CAAC,QAAb,CAAsB,K;;6BAJZ,G;;;AAMb,uBAAM,KAAK,QAAL,EAAN;;;kDAEO,G;;;;;;;;;AACV;AA/QL;AAAA;AAAA,WAiRU,kBAAS,KAAT,EAAc;;;;;;;;;;;;;;;;AAEN,qC,GAAc,uBAAW,CAAC,SAAZ,CAAsB,KAAK,CAAC,YAAN,EAAtB,C,EAEpB;;AAEA,gCAAI,CAAC,YAAL;;AACA,iCAAM,8BAAoB,CAAC,OAArB,CAA6B,cAA7B,EAA6C,MAAI,CAAC,YAAlD,CAAN;;;;AACA,iCAAM,8BAAoB,CAAC,MAArB,CAA4B,cAA5B,CAAN;;;AAEI,wC,GAAiB,MAAI,CAAC,MAAL,CAAY,kBAAZ,C;AACrB,wCAAc,CAAC,KAAf,CAAqB,UAArB,GAAkC,MAAlC;AACA,wCAAc,CAAC,KAAf,CAAqB,OAArB,GAA+B,CAA/B,C,CAEA;;AACA,gCAAI,CAAC,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,KAAzB;;AACA,kDAAU,CAAC,iBAAX,CAA6B,MAAI,CAAC,aAAlC;;AACoB,iCAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,EAA8C,CAA9C,CAAN;;;AAAhB,uC;AAEA,qC,GAAc,C;AAEd,sC,GAAe,4BAAY,CAAC,WAAb,E;AACf,sC,GAAe,YAAY,CAAC,GAAb,CAAiB,4BAAY,CAAC,QAAb,CAAsB,KAAvC,C;AAEnB,gCAAI,CAAC,WAAL,GAAmB,MAAI,CAAC,WAAL,CAAiB,IAAjB,CAAsB;AAAA,mCAAW;AAAA;AAAA;AAAA;AAAA;AAAA,qDAClC,QADkC;AAAA,qDACzB,gBADyB;AAAA;AACV,6CAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;AADU;AAAA;AAAA,kEAClB,OADkB,kCACmC,GADnC;AAChD,iDADgD;AAAA;AAEhD,6CAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,EAAsC,WAAW,GAAG,QAAQ,CAAC,aAAD,CAA5D,CAAN;;AAFgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAX;AAAA,2BAAtB,EAGhB,IAHgB,CAGX;AAAA,mCAAW;AAAA;AAAA;AAAA;AAAA;AAAA,wEACR,OAAO,CAAC,GAAR,CAAY,CAAC,IAAI,OAAJ,CAAkB,UAAC,CAAD,EAAM;AACxC,kDAAU,CAAC,YAAK;AACZ;AACA,wDAAc,CAAC,KAAf,CAAqB,OAArB,GAA+B,CAA/B;AACA,2CAAC;AACJ,yCAJS,EAIP,GAJO,CAAV;AAKH,uCANmB,CAAD,EAOf,YAAY,CAAC,aAAb,CAA2B,KAA3B,CAAiC,WAAC,EAAG;AACjC,+CAAO,CAAC,KAAR,CAAc,CAAd;AACH,uCAFD,CAPe,CAAZ,CADQ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAX;AAAA,2BAHW,CAAnB;AAiBA,gCAAI,CAAC,SAAL,CAAe,OAAf,GAAyB,KAAzB;;iDAES,C;AACL,gCAAI,QAAQ,GAAgB,MAAI,CAAC,YAAL,CAAkB,SAAlB,CAA4B,IAA5B,CAA5B;;AACA,kCAAI,CAAC,aAAL,CAAmB,WAAnB,CAA+B,QAA/B;;AACA,kCAAI,CAAC,WAAL,GAAmB,MAAI,CAAC,WAAL,CAAiB,IAAjB,CAAsB,YAAK;AAC1C,qCAAO,IAAI,OAAJ,CAAkB,WAAC,EAAG;AACzB,oCAAI,OAAO,GAAG,GAAd;;AACA,oCAAI,CAAC,MAAI,CAAC,SAAL,CAAe,OAApB,EAA6B;AACzB;AAEA,0CAAQ,CAAC,KAAT,CAAe,OAAf,GAAyB,GAAzB;AACA,8CAAY,CAAC,IAAb,CAAkB,4BAAY,CAAC,QAAb,CAAsB,KAAxC;AAEA,wCAAI,CAAC,SAAL,CAAe,gBAAf,GAAkC,UAAU,CAAC,YAAK;AAC9C,wCAAI,CAAC,MAAI,CAAC,SAAL,CAAe,OAApB,EAA6B;AACzB,4CAAI,CAAC,UAAL,CAAgB,OAAhB,CAAwB,EAAE,WAA1B;AACH;AACJ,mCAJ2C,EAIzC,OAAO,GAAG,CAJ+B,CAA5C;AAKH,iCAXD,MAWO;AACH,mCAAC;AACJ,iCAfwB,CAiBzB;;;AACA,0CAAU,CAAC,CAAD,EAAI,OAAJ,CAAV;AACH,+BAnBM,CAAP;AAoBH,6BArBkB,CAAnB;;;AAHJ,+BAAS,CAAT,GAAa,CAAb,EAAgB,CAAC,GAAG,aAApB,EAAmC,CAAC,EAApC,EAAwC;AAAA,kCAA/B,CAA+B;AAyBvC;;AAED,gCAAI,CAAC,WAAL,GAAmB,MAAI,CAAC,WAAL,CAAiB,KAAjB,CAAuB,UAAC,CAAD,EAAM;AAC5C,mCAAO,CAAC,KAAR,CAAc,CAAd;AACH,2BAFkB,CAAnB;;AAIA,gCAAI,CAAC,aAAL;;AACA,gCAAI,CAAC,oBAAL;;AACA,gCAAI,CAAC,WAAL;;0CAEA,gB;0CAA6D,Q;0CAAS,gB;;AAAe,iCAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;;;wDAAR,O,oCAAqD,G;;2CAArH,Y,EAAc,W,EAAa,U,EAAY,O;;wCAA7C,I;;AAEH,+B,GAAQ,KAAK,CAAC,eAAN,E;AACZ,+BAAK,CAAC,OAAN,CAAc,UAAC,IAAD,EAAO,CAAP,EAAY;AACtB,gCAAI,IAAI,GAAG,IAAI,CAAC,UAAL,EAAX;AACA,gCAAI,CAAC,KAAL,CAAW,cAAX,GAA4B,CAAC,GAAG,EAAJ,GAAS,IAArC;AACA,gCAAI,CAAC,SAAL,CAAe,GAAf,CAAmB,gBAAnB;AACH,2BAJD;;AAMA,iCAAM,WAAN;;;;;;;;;;;;;;;;;AAEA,uBAAO,CAAC,KAAR;;;;;;;;;AAEP;AA5WL;AAAA;AAAA,WA8WU,gBAAI;;;;;;;;AACK,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,aAA7B,EAA4C,EAA5C,CAAN;;;AAAP,oB;gCACe,Q;gCAAS,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;;;8CAAR,O,oCAAqD,C;AAApF,4B;;sBAEA,YAAY,IAAI,I;;;;;AAChB,4BAAY,IAAI,IAAhB;;AACA,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,EAAsC,YAAtC,CAAN;;;AACA,qBAAK,UAAL,CAAgB,OAAhB,CAAwB,YAAxB;AAEI,0B,GAAa,KAAK,KAAL,CAAW,oBAAX,E;AACjB,0BAAU,GAAG,UAAU,CAAC,MAAX,CAAkB,UAAC,OAAD,EAAY;AACvC,yBAAQ,CAAC,OAAO,CAAC,QAAR,CAAiB,KAAjB,CAAT;AACH,iBAFY,CAAb;AAII,qB,GAAQ,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,KAAgB,UAAU,CAAC,MAAtC,C;AAER,6B,GAAgB,UAAU,CAAC,KAAD,C;;AAC9B,uBAAO,aAAa,CAAC,QAAd,KAA2B,CAAlC,EAAqC;AACjC,+BAAa,CAAC,MAAd;AACH;;AACD,6BAAa,CAAC,cAAd,CAA6B,KAA7B;AACA,qBAAK,KAAL,CAAW,kBAAX,G,CAEA;;;;;;AAEA,oBAAI,eAAJ,CAAU,kBAAV,EAA8B,IAA9B,G,CACA;;;;;;;;;AAEP;AA1YL;AAAA;AAAA,WA4YU,oBAAQ;;;;;;;;;;AACJ,6B,GAAgB,I;;sBAElB,KAAK,KAAL,CAAW,EAAX,KAAkB,SAAS,CAAC,QAAV,CAAmB,W;;;;;gCACnB,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,CAAN;;;;AAA7B,2B,iBAAqB,O,oCAA6D,G;AAElF,2B,GAAc,IAAI,qBAAJ,E;;AAClB,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAzB;;AACA,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAU,WAAnC;;gCAEQ,W;oDACC,G,0BAcA,G;;;;AAbD,qBAAK,KAAL,CAAW,yBAAX,CAAqC;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAC5C,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,QAA5B;;AAD4C;AAE5C,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,EAA8C,GAA9C,CAAN;;AAF4C;AAG5C,iCAAK,QAAL;;AAH4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAArC,E,CAMA;;;AAEA,uBAAM,KAAK,WAAL,EAAN;;;;;;AAMA,qBAAK,KAAL,CAAW,yBAAX,CAAqC,YAAK,CACzC,CADD;AAEA,qBAAK,KAAL,CAAW,aAAX,GAA2B,IAA3B,CAAgC;AAAA,yBAAW;AAAA;;AAAA;AAAA;AAAA;AAAA;AACvC,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;AACA,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,QAA5B;;AAFuC;AAGvC,mCAAM,8BAAoB,CAAC,MAArB,CAA4B,eAA5B,CAAN;;AAHuC;AAIvC,iCAAK,WAAL,GAAmB,KAAK,WAAL,CAAiB,IAAjB,CAAsB;AAAA,qCAAW;AAAA;AAAA;AAAA;AAAA;AAChD,4CAAI,eAAJ,CAAU,+BAAV,EAA2C,IAA3C;AADgD,wDAE1C,8BAF0C;AAAA,wDAEJ,QAFI;AAAA,wDAEK,gBAFL;AAAA;AAEoB,+CAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;AAFpB;AAAA;AAAA,sEAEY,OAFZ,oCAEiE,GAFjE;AAAA;AAAA,wEAEyE,EAFzE;AAAA;AAEhD,6DAA2B,OAA3B,qBAAmC,OAAnC;;AAFgD;AAAA,wDAGhD,KAAK,UAH2C;AAAA,wDAGxB,gBAHwB;AAAA;AAGT,+CAAM,8BAAoB,CAAC,OAArB,CAA6B,OAA7B,CAAN;;AAHS;AAAA;AAAA,uEAGjB,OAHiB,oCAGoC,GAHpC;;AAAA,sDAGhC,OAHgC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAX;AAAA,6BAAtB,CAAnB;;AAJuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAAhC,E,CAYA;;;AAEA,uBAAM,KAAK,WAAL,EAAN;;;;;;AAMA,qBAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;;;;;;sBAGD,KAAK,KAAL,CAAW,EAAX,KAAkB,SAAS,CAAC,QAAV,CAAmB,Y;;;;;gCAC1B,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,CAAN;;;;AAA7B,4B,iBAAqB,O,oCAA6D,G;gCAE9E,Y;oDACC,G;;;;AACG,4B,GAAc,IAAI,qBAAJ,E;;AAElB,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAzB;;AACA,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAU,YAAnC;;AAEI,6B,GAAgB,SAAhB,aAAgB;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAC3B,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;AACA,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,QAA5B;;AAF2B;AAG3B,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,EAA8C,GAA9C,CAAN;;AAH2B;AAI3B;AACA,iCAAK,WAAL;;AAL2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iB;;AAOpB,qBAAK,MAAL,CAAY,cAAZ,EAA4B,gBAA5B,CAA6C,OAA7C,EAAsD,aAAtD,E,CAEA;;;AAEA,uBAAM,KAAK,WAAL,EAAN;;;;;;AAKA,qBAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;;;;;;sBAGD,KAAK,KAAL,CAAW,EAAX,KAAkB,SAAS,CAAC,QAAV,CAAmB,iB;;;;;gCAC1B,gB;;AAAe,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,CAAN;;;;AAA7B,6B,iBAAqB,O,oCAA6D,G;gCAE9E,a;oDACC,G;;;;AAEG,6B,GAAc,IAAI,qBAAJ,E;;AAClB,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAzB;;AACA,qBAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,UAAU,aAAnC;;AAEI,iC,GAAoB,KAAK,KAAL,CAAW,oBAAX,E;AACpB,4B,GAAe,iBAAiB,CAAC,CAAD,C;AAEhC,uB,GAAU,KAAK,MAAL,CAAY,mBAAZ,C;AACd,uBAAO,CAAC,MAAR;AACA,4BAAY,CAAC,OAAb,CAAqB,WAArB,CAAiC,OAAjC;AAEA,qBAAK,KAAL,CAAW,yBAAX,CAAqC,UAAO,OAAP;AAAA,yBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,kCAC/C,YAAY,KAAK,OAD8B;AAAA;AAAA;AAAA;;AAE/C,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;AACA,iCAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,QAA5B;;AAH+C;AAI/C,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,eAA7B,EAA8C,GAA9C,CAAN;;AAJ+C;AAK/C,iCAAK,WAAL;;AAL+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAlB;AAAA,iBAArC,E,CASA;;;AAEA,uBAAM,KAAK,WAAL,EAAN;;;;;;AAOA,qBAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,UAA5B;;;;;;;;;AAIf;AAngBL;;AAAA;AAAA,EAA+B,oBAA/B;AAE2B,qCAAiB,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,GAA7B,EAAkC,GAAlC,EAAuC,GAAvC,EAA4C,GAA5C,EAAiD,GAAjD,EAAsD,GAAtD,EAA2D,GAA3D,CAAjB;AACA,+BAAW;AAC9B,aAAW,EAAE,EADiB;AAE9B,cAAY,EAAE,EAFgB;AAG9B,mBAAiB,EAAE;AAHW,CAAX,C;;;;;;;;;;;;;;;;;;;;;;;;AC7B3B;AAEO,IAAMc,aAAb;AAAA;;AAAA;;AAEI,yBAAYnF,iBAAZ,EAA+B;AAAA;;AAAA,6BACrBA,iBADqB,EACF,CADE;AAE9B;;AAJL;AAAA;AAAA,WAMI,8BAAqB,CACpB,CAPL,CASI;AACA;;AAVJ;;AAAA;AAAA,EAAmCiE,6BAAnC,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAGA;AAEA;AACA;AACA;AACA;;AAGA,IAAM,iBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AAEO,IAAM,yBAAb;AAAA;;AAAA;;AAGI,wBAAY,WAAZ,EAA4B;AAAA;;AAAA,8BAClB,WADkB,EACL,iBADK;AAE3B;;AALL;AAAA;AAAA,WAOU,qBAAY,mBAAZ,EAAoC;AAAA;;;;;;;;;;;;;;;;;;AAChC,mB,GAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,C;;AACZ,uBAAM,OAAO,CAAC,IAAR,CAAa,CAAC,IAAI,8CAAJ,GAAc,IAAd,CAAmB,CAAC,mBAAD,CAAnB,EAAgC,KAAhC,CAAsC,WAAC;AAAA,yBAAI,OAAO,CAAC,KAAR,CAAc,CAAd,CAAJ;AAAA,iBAAvC,CAAD,EAA+D,IAAI,OAAJ,CAAkB,UAAM,OAAN;AAAA,yBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAChG,mCAAM,mBAAS,CAAC,QAAV,CAAmB,mBAAS,CAAC,QAAV,CAAmB,WAAtC,CAAN;;AADgG;AAC5G,qCAD4G;;AAEhH,gCAAI,SAAS,KAAK,IAAlB,EAAwB;AACpB,qCAAO;AACV;;AAJ+G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAhB;AAAA,iBAAlB,CAA/D,CAAb,CAAN;;;kDAMO,G;;;;;;;;;AACV;AAhBL;AAAA;AAAA,WAkBU,wBAAY;AAAA;;;;;;;;;;;;;;;;AACR,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAER,mC,GAAsB,KAAK,MAAL,CAAY,wBAAZ,C;AACtB,qC,GAAwB,KAAK,MAAL,CAAY,0BAAZ,C;AACxB,kC,GAAqB,KAAK,MAAL,CAAY,uBAAZ,C;AACrB,gC,GAAmB,KAAK,MAAL,CAAY,4BAAZ,C;AACnB,8B,GAAiB,KAAK,MAAL,CAAY,0BAAZ,C;AAErB,mCAAmB,CAAC,eAApB,CAAoC,IAApC;AACA,qCAAqB,CAAC,eAAtB,CAAsC,IAAtC;AACA,kCAAkB,CAAC,eAAnB,CAAmC,IAAnC;AACA,gCAAgB,CAAC,eAAjB,CAAiC,IAAjC;AACA,8BAAc,CAAC,eAAf,CAA+B,IAA/B;AAEA,mCAAmB,CAAC,MAApB;AACA,qCAAqB,CAAC,MAAtB;AACA,kCAAkB,CAAC,MAAnB;AACA,gCAAgB,CAAC,MAAjB;AACA,8BAAc,CAAC,MAAf;AAEA,qBAAK,iBAAL,GAAyB,IAAI,iBAAJ,CAAsB,mBAAtB,EAA2C,qBAA3C,EAAkE,kBAAlE,EAAsF,gBAAtF,EAAwG,cAAxG,CAAzB;AAEM,kC,GAAqB,KAAK,MAAL,CAAY,8BAAZ,C;AACrB,kC,GAAqB,KAAK,MAAL,CAAY,8BAAZ,C;AACrB,kC,GAAqB,KAAK,MAAL,CAAY,8BAAZ,C;;AAEZ,uBAAM,KAAK,SAAL,CAAe,mBAAS,CAAC,QAAV,CAAmB,WAAlC,CAAN;;;AAAT,sB;;AACS,uBAAM,KAAK,SAAL,CAAe,mBAAS,CAAC,QAAV,CAAmB,YAAlC,CAAN;;;AAAT,sB;;AACS,uBAAM,KAAK,SAAL,CAAe,mBAAS,CAAC,QAAV,CAAmB,iBAAlC,CAAN;;;AAAT,sB;AAEN,sBAAM,CAAC,6BAAP,CAAqC,KAArC;AACA,sBAAM,CAAC,6BAAP,CAAqC,KAArC;AACA,sBAAM,CAAC,6BAAP,CAAqC,KAArC;AAEA,kCAAkB,CAAC,WAAnB,CAA+B,MAAM,CAAC,cAAP,GAAwB,UAAxB,EAA/B;AACA,kCAAkB,CAAC,WAAnB,CAA+B,MAAM,CAAC,cAAP,GAAwB,UAAxB,EAA/B;AACA,kCAAkB,CAAC,WAAnB,CAA+B,MAAM,CAAC,cAAP,GAAwB,UAAxB,EAA/B;AAEI,uB,GAAU,KAAK,MAAL,CAAY,mBAAZ,C;AACd,uBAAO,CAAC,MAAR;AAEI,iC,GAAoB,MAAM,CAAC,oBAAP,E;AACpB,8B,GAAiB,iBAAiB,CAAC,CAAD,C;AACtC,8BAAc,CAAC,OAAf,CAAuB,WAAvB,CAAmC,OAAnC;AAEA,qBAAK,IAAL,CAAU,cAAV,EAA0B,gBAA1B,CAA2C,OAA3C,EAAoD,YAAK;AACrD,8BAAY,CAAC,IAAb,CAAkB,MAAlB;AACH,iBAFD;kDAIO,G;;;;;;;;;AACV;AArEL;AAAA;AAAA,WA0FU,mBAAU,EAAV,EAAY;;;;;;;;;AAEM,uBAAM,mBAAS,CAAC,QAAV,CAAmB,EAAnB,CAAN;;;AAAZ,yB;AACE,qB,GAAQ,WAAW,CAAC,YAAZ,CAAyB,SAAzB,EAAoC,KAAK,iBAAzC,C;AAEd,qBAAK,CAAC,aAAN,GAAsB,IAAtB,CAA2B,YAAK;AAC5B,yBAAO,CAAC,GAAR,CAAY,YAAZ;AACA,sBAAI,eAAJ,CAAU,gCAAV,EAA4C,IAA5C,GAF4B,CAG5B;AACA;AACH,iBALD;AAOA,qBAAK,CAAC,cAAN;;AACA,qBAAK,CAAC,cAAN,GAAuB,cAAvB;;kDAEO,K;;;;;AAEP,uBAAO,CAAC,GAAR,CAAY,SAAZ;AACA,uBAAO,CAAC,KAAR,e,CACA;;kDACO,I;;;;;;;;;AAEd;AAhHL;AAAA;AAAA,WAuEI,cAAkB,KAAlB,EAA8B;;;;;;;AACtB,0B,GAAa,KAAK,CAAC,oBAAN,E;AACjB,0BAAU,GAAG,UAAU,CAAC,MAAX,CAAkB,UAAC,OAAD,EAAY;AACvC,yBAAQ,CAAC,OAAO,CAAC,QAAR,CAAiB,KAAjB,CAAT;AACH,iBAFY,CAAb;;sBAII,UAAU,CAAC,MAAX,KAAsB,C;;;;;;;;AAItB,qB,GAAQ,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,KAAgB,UAAU,CAAC,MAAtC,C;AAER,6B,GAAgB,UAAU,CAAC,KAAD,C;;AAC9B,uBAAO,aAAa,CAAC,QAAd,KAA2B,CAAlC,EAAqC;AACjC,+BAAa,CAAC,MAAd;AACH;;AACD,6BAAa,CAAC,cAAd,CAA6B,KAA7B;;;;;;;;;AACH;AAxFL;;AAAA;AAAA,EAAkC,kBAAlC;AAmHA,UAAG,CAAC,iBAAJ,CAAsB,aAAG,EAAG;AACxB,KAAG,CAAC,WAAJ,CAAgB,UAAhB,EAA4B,yBAA5B;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;ACjIA,IAAM,gBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;AACA;AAEO,IAAM,WAAb;AAAA;;AAAA;;AACI,uBAAY,WAAZ,EAAuB;AAAA;;AAAA,6BACb,WADa,EACA,gBADA;AAEtB;;AAHL;AAAA,EAAiC,kBAAjC;AAMA,UAAG,CAAC,iBAAJ,CAAsB,aAAG,EAAG;AACxB,KAAG,CAAC,WAAJ,CAAgB,SAAhB,EAA2B,WAA3B;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,IAAM,sBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;AACA;AACA;AAEO,IAAM,mCAAb;AAAA;;AAAA;;AACI,6BAAY,WAAZ,EAAuB;AAAA;;AAAA,8BACb,WADa,EACD,sBADC;AAEtB;;AAHL;AAAA;AAAA,WAKU,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,2B,GAAa,KAAK,MAAL,CAAY,eAAZ,C;AAEjB,2BAAW,CAAC,gBAAZ,CAA6B,QAA7B,EAAuC,UAAU,CAAV,EAAW;AAC9C,kCAAM,CAAC,QAAP,CAAgB,KAAK,OAAL,KAAiB,IAAjC;AACA,mBAAC,CAAC,eAAF;AACA,mBAAC,CAAC,cAAF;AACH,iBAJD;iDAKO,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;;;;;;;;;AACV;AAdL;AAAA;AAAA,WAgBU,iBAAQ,IAAR,EAAY;AAAA;;;;;;;;;;;;;;;;AACV,2B,GAAa,KAAK,MAAL,CAAY,eAAZ,C;;AACO,uBAAM,gBAAM,CAAC,kBAAP,EAAN;;;;AAAxB,2BAAW,CAAC,O,oBAAmD,G;kDAGxD,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,IAAd,C;;;;;;;;;AACV;AAtBL;;AAAA;AAAA,EAAuC,kBAAvC;AAyBA,UAAG,CAAC,iBAAJ,CAAsB,aAAG,EAAG;AACxB,KAAG,CAAC,WAAJ,CAAgB,eAAhB,EAAiC,mCAAjC;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;AC9BA,IAAM,kBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;AACA;AAEO,IAAM,aAAb;AAAA;;AAAA;;AACI,yBAAY,WAAZ,EAAuB;AAAA;;AAAA,6BACb,WADa,EACA,kBADA;AAEtB;;AAHL;AAAA,EAAmC,kBAAnC;AAMA,UAAG,CAAC,iBAAJ,CAAsB,aAAG,EAAG;AACxB,KAAG,CAAC,WAAJ,CAAgB,WAAhB,EAA6B,aAA7B;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,IAAM,gBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM,uBAAb;AAAA;;AAAA;;AACI,uBAAY,WAAZ,EAAuB;AAAA;;AAAA,6BACb,WADa,EACA,gBADA;AAEtB;;AAHL;AAAA;AAAA,WAKI,wBAAY;AAAA;;AACR,UAAI,GAAG,GAAG,mGAAV,CADQ,CAGR;;;AACA,WAAK,MAAL,CAAY,cAAZ,EAA4B,WAA5B,CAAwC,wBAAU,CAAC,yBAAX,CAAqC,cAArC,EAAqD,CAAC,wBAAD,CAArD,CAAxC;AAEA,UAAI,YAAJ,CAAS,KAAK,MAAL,CAAY,eAAZ,CAAT,EAAuC,UAAM,MAAN;AAAA,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAErC,yBAAM,0BAAW,CAAC,IAAZ,CAAiB,SAAjB,EAA4B,MAA5B,CAAN;;AAFqC;AAE9C,wBAF8C;;AAGlD,sBAAI,MAAM,CAAC,OAAX,EAAoB;AAChB,wBAAI,cAAJ,CAAU,sBAAV,EAAkC,IAAlC;AACA,yBAAK,MAAL;AACH,mBAHD,MAGO;AACH,wBAAI,MAAJ,EAAY;AACR,0BAAI,cAAJ,CAAU,MAAM,CAAC,OAAjB,EAA0B,IAA1B;AACH,qBAFD,MAEO;AACH,0BAAI,cAAJ,CAAU,kCAAV,EAA8C,IAA9C;AACH;AACJ;;AAZiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAf;AAAA,OAAvC;AAeA,aAAO,GAAP;AACH;AA3BL;;AAAA;AAAA,EAAiC,oBAAjC;AA8BA,UAAG,CAAC,iBAAJ,CAAsB,UAAC,GAAD,EAAQ;AAC1B,KAAG,CAAC,WAAJ,CAAgB,SAAhB,EAA2B,uBAA3B;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;;AAEA,IAAM,+BAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM,qDAAb;AAAA;;AAAA;;AACI,sCAAY,IAAZ,EAAgB;AAAA;;AAAA,8BACN,IADM,EACA,+BADA;AAEf;;AAHL;AAAA;AAAA,WAKU,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,MAAL,CAAY,eAAZ,EAA6B,gBAA7B,CAA8C,OAA9C,EAAuD;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAC9D,mCAAM,4CAAoB,CAAC,MAArB,CAA4B,cAA5B,CAAN;;AAD8D;AAAA;AAE9D,mCAAM,4CAAoB,CAAC,MAArB,CAA4B,cAA5B,CAAN;;AAF8D;AAAA;AAG9D,mCAAM,4CAAoB,CAAC,MAArB,CAA4B,eAA5B,CAAN;;AAH8D;AAAA;AAK9D,mCAAM,uBAAW,CAAC,KAAZ,EAAN;;AAL8D;AAAA;AAM9D,mCAAM,mBAAS,CAAC,KAAV,EAAN;;AAN8D;AAAA;AAO9D,mCAAM,8BAAa,CAAC,KAAd,EAAN;;AAP8D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAAvD;;AAUA,oBAAI,QAAQ,CAAC,QAAT,CAAkB,QAAlB,CAA2B,MAA3B,KAAsC,QAAQ,CAAC,QAAT,CAAkB,QAAlB,CAA2B,WAA3B,CAAtC,IAAiF,QAAQ,CAAC,QAAT,CAAkB,QAAlB,CAA2B,WAA3B,CAArF,EAA8H,CAC1H;AACH;;AAEG,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,4CAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;AACrF,+BAAe,CAAC,gBAAhB,CAAiC,QAAjC,EAA2C;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAClD,mCAAM,4CAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA4C,eAAe,CAAC,OAAjB,GAA4B,GAA5B,GAAkC,GAA7E,CAAN;;AADkD;AAE9C,wCAF8C,GAE/B,4BAAY,CAAC,WAAb,EAF+B;AAGlD,wCAAY,CAAC,GAAb,CAAiB;AAAC,mCAAK,EAAE,CAAC,eAAe,CAAC;AAAzB,6BAAjB,EAAoD,4BAAY,CAAC,QAAb,CAAsB,KAA1E;;AAHkD,iCAI9C,eAAe,CAAC,OAJ8B;AAAA;AAAA;AAAA;;AAAA;AAK9C,mCAAM,YAAY,CAAC,IAAb,CAAkB,4BAAY,CAAC,QAAb,CAAsB,KAAxC,CAAN;;AAL8C;AAQlD;AACA,4CAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,UAAf,EAA2B,WAA3B,EAAwC,YAAxC,EAAuD,eAAe,CAAC,OAAjB,GAA4B,CAA5B,GAAgC,CAAtF,CAAZ;;AATkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAA3C;AAYI,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,4CAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;AACrF,+BAAe,CAAC,gBAAhB,CAAiC,QAAjC,EAA2C;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAClD,mCAAM,4CAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA4C,eAAe,CAAC,OAAjB,GAA4B,GAA5B,GAAkC,GAA7E,CAAN;;AADkD;AAE9C,wCAF8C,GAE/B,4BAAY,CAAC,WAAb,EAF+B;AAGlD,wCAAY,CAAC,GAAb,CAAiB;AAAC,mCAAK,EAAE,CAAC,eAAe,CAAC;AAAzB,6BAAjB,EAAoD,4BAAY,CAAC,QAAb,CAAsB,KAA1E,EAHkD,CAKlD;;AACA,4CAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,UAAf,EAA2B,WAA3B,EAAwC,YAAxC,EAAuD,eAAe,CAAC,OAAjB,GAA4B,CAA5B,GAAgC,CAAtF,CAAZ;;AANkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAA3C;AASA,qBAAK,MAAL,CAAY,eAAZ,EAA6B,gBAA7B,CAA8C,QAA9C,EAAwD,UAAU,CAAV,EAAW;AAC/D,kCAAM,CAAC,QAAP,CAAgB,KAAK,OAAL,KAAiB,IAAjC;AACA,mBAAC,CAAC,eAAF;AACA,mBAAC,CAAC,cAAF;AACH,iBAJD;AAMA,qBAAK,MAAL,CAAY,kBAAZ,EAAgC,gBAAhC,CAAiD,OAAjD,EAA0D,YAAK;AAC3D,wBAAI,CAAC,OAAL,GAAe,SAAf,CAAyB,yBAAzB;AACH,iBAFD;AAGA,qBAAK,MAAL,CAAY,iBAAZ,EAA+B,gBAA/B,CAAgD,OAAhD,EAAyD,YAAK;AAC1D,wBAAI,CAAC,OAAL,GAAe,SAAf,CAAyB,WAAzB;AACH,iBAFD;AAGA,qBAAK,MAAL,CAAY,wBAAZ,EAAsC,gBAAtC,CAAuD,OAAvD,EAAgE,YAAK;AACjE,wBAAI,CAAC,OAAL,GAAe,SAAf,CAAyB,mCAAzB;AACH,iBAFD;AAGA,qBAAK,MAAL,CAAY,iBAAZ,EAA+B,gBAA/B,CAAgD,OAAhD,EAAyD,YAAK;AAC1D;AACA,wBAAI,CAAC,OAAL,GAAe,SAAf,CAAyB,uBAAzB;AACH,iBAHD;AAIA,qBAAK,MAAL,CAAY,mBAAZ,EAAiC,gBAAjC,CAAkD,OAAlD,EAA2D,YAAK;AAC5D,wBAAI,CAAC,OAAL,GAAe,SAAf,CAAyB,aAAzB;AACH,iBAFD,E,CAGA;;AACA,qBAAK,MAAL,CAAY,eAAZ,EAA6B,SAA7B,GAAyC,OAAzC;kDAEO,G;;;;;;;;;AACV;AAzEL;AAAA;AAAA,WA2EI,iBAAQ,IAAR,EAAY;AACR,sBAAM,CAAC,MAAP,CAAc,gBAAd;AACA,yJAAqB,IAArB;AACH;AA9EL;;AAAA;AAAA,EAAgD,oCAAhD,E;;;;;;;;;;;;;;;;;;;;AChBA,IAAM,iBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AACA;AACA;AACA;AAEO,IAAM,yBAAb;AAAA;;AAAA;;AAEI,wBAAY,WAAZ,EAAuB;AAAA;;AAAA;;AACnB,8BAAM,WAAN,EAAmB,iBAAnB;;AACA,UAAK,WAAL,CAAiB,sBAAjB,EAAyC,IAAI,qDAAJ,2CAAzC;;AAFmB;AAGtB;;AALL;AAAA,EAAkC,oBAAlC;AAQA,UAAG,CAAC,iBAAJ,CAAsB,UAAC,GAAD,EAAQ;AAC1B,KAAG,CAAC,WAAJ,CAAgB,UAAhB,EAA4B,yBAA5B;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA,IAAM,YAAY,GAAG,mBAAO,CAAC,GAAD,CAAP,CAAkC,OAAvD;;AACA,IAAM,iBAAI,GAAG,mBAAO,CAAC,GAAD,CAApB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM,yBAAb;AAAA;;AAAA;;AAQI,wBAAY,WAAZ,EAAuB;AAAA;;AAAA;;AACnB,+BAAM,WAAN,EAAmB,iBAAnB;AACA,UAAK,gBAAL,GAAwB,IAAI,kBAAJ,GAAc,IAAd,CAAmB,CAAC,mBAAD,CAAnB,EAAgC,KAAhC,CAAsC,WAAC;AAAA,aAAI,OAAO,CAAC,KAAR,CAAc,CAAd,CAAJ;AAAA,KAAvC,CAAxB;AACA,UAAK,QAAL,GAAgB,IAAhB;;AACA,UAAK,iBAAL,GAAyB,YAAzB,CAAsC,KAAtC;;AAJmB;AAKtB;;AAbL;AAAA;AAAA,WAeI,sBAAa,MAAb,EAAmB;AAAA;;AACf,6GAAmB,MAAnB;;AACA,UAAI,cAAc,GAAG,IAAI,wBAAJ,CAAe,EAAf,EAAmB,YAAK;AACzC,cAAI,CAAC,SAAL,CAAe,yBAAf;AACH,OAFoB,EAElB,wBAAU,CAAC,WAFO,EAEM,IAFN,EAEY,YAFZ,CAArB;AAGA,YAAM,CAAC,SAAP,CAAiB,cAAjB;AACA,aAAO,MAAP;AACH;AAtBL;AAAA;AAAA,WAwBU,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACR,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAER,0B,GAAa,KAAK,MAAL,CAAY,cAAZ,C;AACjB,0BAAU,CAAC,gBAAX,CAA4B,OAA5B,EAAqC,YAAK;AACtC;AACA,wBAAI,CAAC,cAAL;AACH,iBAHD;AAKI,mC,GAAsB,KAAK,MAAL,CAAY,wBAAZ,C;AACtB,qC,GAAwB,KAAK,MAAL,CAAY,0BAAZ,C;AACxB,kC,GAAqB,KAAK,MAAL,CAAY,uBAAZ,C;AACrB,gC,GAAmB,KAAK,MAAL,CAAY,4BAAZ,C;AAEvB,mCAAmB,CAAC,EAApB,GAAyB,IAAzB;AACA,qCAAqB,CAAC,EAAtB,GAA2B,IAA3B;AACA,kCAAkB,CAAC,EAAnB,GAAwB,IAAxB;AACA,gCAAgB,CAAC,EAAjB,GAAsB,IAAtB;AAEA,mCAAmB,CAAC,MAApB;AACA,qCAAqB,CAAC,MAAtB;AACA,kCAAkB,CAAC,MAAnB;AACA,gCAAgB,CAAC,MAAjB;AAEA,qBAAK,iBAAL,GAAyB,IAAI,iBAAJ,CAAsB,mBAAtB,EAA2C,qBAA3C,EAAkE,kBAAlE,EAAsF,gBAAtF,CAAzB,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEI,4B,GAAe,4BAAY,CAAC,WAAb,E;AAEf,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;AACrF,+BAAe,CAAC,gBAAhB,CAAiC,QAAjC,EAA2C;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAClD,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA4C,eAAe,CAAC,OAAjB,GAA4B,GAA5B,GAAkC,GAA7E,CAAN;;AADkD;AAElD,wCAAY,CAAC,GAAb,CAAiB;AAAC,mCAAK,EAAE,CAAC,eAAe,CAAC;AAAzB,6BAAjB,EAAoD,4BAAY,CAAC,QAAb,CAAsB,KAA1E;;AAFkD,iCAG9C,eAAe,CAAC,OAH8B;AAAA;AAAA;AAAA;;AAAA;AAI9C,mCAAM,YAAY,CAAC,IAAb,CAAkB,4BAAY,CAAC,QAAb,CAAsB,KAAxC,CAAN;;AAJ8C;AAOlD;AACA,4CAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,UAAf,EAA2B,WAA3B,EAAwC,YAAxC,EAAuD,eAAe,CAAC,OAAjB,GAA4B,CAA5B,GAAgC,CAAtF,CAAZ;;AARkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAA3C;AAWI,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;AACrF,+BAAe,CAAC,gBAAhB,CAAiC,QAAjC,EAA2C;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAClD,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA4C,eAAe,CAAC,OAAjB,GAA4B,GAA5B,GAAkC,GAA7E,CAAN;;AADkD;AAElD,wCAAY,CAAC,GAAb,CAAiB;AAAC,mCAAK,EAAE,CAAC,eAAe,CAAC;AAAzB,6BAAjB,EAAoD,4BAAY,CAAC,QAAb,CAAsB,KAA1E,EAFkD,CAIlD;;AACA,4CAAM,CAAC,IAAP,CAAY,CAAC,YAAD,EAAe,UAAf,EAA2B,WAA3B,EAAwC,YAAxC,EAAuD,eAAe,CAAC,OAAjB,GAA4B,CAA5B,GAAgC,CAAtF,CAAZ;;AALkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAA3C;AAQA,qBAAK,MAAL,CAAY,eAAZ,EAA6B,gBAA7B,CAA8C,OAA9C,EAAuD,YAAK;AACxD,sBAAI,4BAAJ,GAAmB,KAAnB,CAAyB,wBAAU,CAAC,WAAX,GAAyB,SAAzB,CAAmC,YAAnC,EAAiD,CAAC,MAAM,CAAC,QAAR,CAAjD,CAAzB;AACH,iBAFD;kDAGO,G;;;;;;;;;AAEV;AAzFL;AAAA;AAAA,WA2FU,iBAAQ,IAAR,EAAY;AAAA;;;;;;;;;;;;;;;;;;AACd;AACI,mB,GAAM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,IAAd,C;AAEN,qB,GAAQ,IAAI,aAAJ,CAAkB,KAAK,iBAAvB,C;AACZ,qBAAK,CAAC,QAAN,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,EAAyB,MAAzB,CAAf;AACA,qBAAK,CAAC,cAAN;AAEA,qBAAK,CAAC,aAAN,GAAsB,IAAtB,CAA2B,YAAK;AAC5B;AACA,wBAAI,CAAC,cAAL;AACH,iBAHD;AAKI,uB,GAAU,KAAK,CAAC,cAAN,E;;AACd,uBAAO,CAAC,cAAR;;AAEI,4B,GAAe,KAAK,MAAL,CAAY,QAAZ,C;AACnB,wCAAU,CAAC,iBAAX,CAA6B,YAA7B,EAA2C,WAA3C,CAAuD,OAAO,CAAC,UAAR,EAAvD;AAEI,iC,GAAoB,KAAK,CAAC,oBAAN,E;;AAEpB,sC,GAAyB,SAAzB,sBAAyB,GAAK;AAC9B,sBAAI,OAAO,GAAG,IAAI,CAAC,MAAL,KAAgB,IAAhB,GAAuB,IAArC;AACA,wBAAI,CAAC,mBAAL,GAA2B,UAAU,CAAC,YAAK;AACvC,wBAAI,YAAY,GAAG,CAAC,CAApB;AACA,wBAAI,eAAe,GAAG,EAAtB;;AACA,yBAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,iBAAiB,CAAC,MAAtC,EAA8C,CAAC,EAA/C,EAAmD;AAC/C,0BAAI,iBAAiB,CAAC,CAAD,CAAjB,CAAqB,QAArB,KAAkC,CAAtC,EAAyC;AACrC,uCAAe,CAAC,IAAhB,CAAqB,CAArB;;AACA,4BAAI,eAAe,CAAC,MAAhB,IAA0B,CAA9B,EAAiC;AAC7B;AACH;AACJ;AACJ;;AACD,wBAAI,eAAe,CAAC,MAAhB,KAA2B,CAA/B,EAAkC;AAC9B,kCAAY,GAAG,eAAe,CAAC,CAAD,CAA9B;AACH;;AAED,wBAAI,KAAK,GAAG,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,MAAL,KAAgB,iBAAiB,CAAC,MAA7C,CAAZ;;AACA,wBAAI,KAAK,KAAK,YAAd,EAA4B;AACxB,2BAAK,GAAG,CAAC,KAAK,GAAG,CAAT,IAAc,iBAAiB,CAAC,MAAxC;AACH;;AAED,qCAAiB,CAAC,KAAD,CAAjB,CAAyB,MAAzB;AACA,0CAAsB;AACzB,mBAtBoC,EAsBlC,OAtBkC,CAArC;AAuBH,iB;;AACD,sCAAsB;;AAEtB,qBAAK,QAAL,GAAgB;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AACnB,sCADmB,GACN,KAAK,MAAL,CAAY,cAAZ,CADM;AAEnB,uCAFmB,GAEL,KAAK,MAAL,CAAY,eAAZ,CAFK;AAAA,2CAGC,gBAHD;AAAA;AAGgB,mCAAM,8BAAoB,CAAC,OAArB,CAA6B,cAA7B,CAAN;;AAHhB;AAAA;AAGvB,uCAAW,CAAC,SAHW,gBAGQ,OAHR,kCAGoE,CAHpE;AAKnB,wCALmB,GAKJ,KAAK,MAAL,CAAY,QAAZ,CALI;AAOnB,uCAPmB,GAOL,IAAI,qBAAJ,EAPK;AAAA;AAQvB,mCAAM,WAAW,CAAC,WAAZ,CAAwB,YAAxB,EAAsC,YAAY,CAAC,aAAnD,EAAkE,KAAlE,EAAyE,KAAzE,EAAgF,CAAhF,EAAmF,CAAnF,EAAsF,IAAtF,EAA4F,KAA5F,CAAN;;AARuB;AAUnB,sCAVmB,GAUN,gBAAgB,CAAC,YAAD,CAVV;AAWvB,sCAAU,CAAC,KAAX,CAAiB,KAAjB,GAAyB,UAAU,CAAC,gBAAX,CAA4B,OAA5B,CAAzB;AACA,uCAAW,CAAC,OAAZ,CAAoB,IAApB,EAA0B,UAAU,CAAC,QAAX,CAAoB,CAApB,CAA1B,EAAkD,UAAlD,EAA8D,IAA9D,EAAoE,IAApE,EAA0E,IAA1E,EAAgF,CAAhF,EAAmF,IAAnF,EAAyF,KAAzF;AAZuB;AAcvB,mCAAM,WAAW,CAAC,OAAZ,CAAoB,GAApB,EAAyB,WAAW,CAAC,aAArC,EAAoD,WAAW,CAAC,aAAZ,CAA0B,aAA9E,EAA6F,IAA7F,EAAmG,IAAnG,EAAyG,IAAzG,EAA+G,EAA/G,EAAmH,IAAnH,EAAyH,KAAzH,CAAN;;AAduB;AAevB,uCAAW,CAAC,OAAZ,CAAoB,CAApB,EAAuB,WAAvB,EAAoC,WAAW,CAAC,aAAhD,EAA+D,KAA/D,EAAsE,KAAtE,EAA6E,CAA7E,EAAgF,IAAhF,EAAsF,IAAtF,EAA4F,KAA5F;;AAfuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAAhB,C,CAkBA;;;AACA,sBAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,KAAK,QAAvC;AACA,0BAAU,CAAC,KAAK,QAAN,EAAgB,EAAhB,CAAV,C,CAEA;AACA;;AACI,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;AACjF,+B,GAAkB,KAAK,MAAL,CAAY,aAAZ,C;;AACK,uBAAM,8BAAoB,CAAC,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAAN;;;;AAA3B,+BAAe,CAAC,O,oBAAqE,G;kDAE9E,G;;;;;;;;;AACV;AA1KL;AAAA;AAAA,WA4KU,0BAAc;;;;;;;;AAChB,4CAAY,CAAC,WAAb,GAA2B,aAA3B;AAEA,qBAAK,SAAL,CAAe,mBAAf,EAA0B,OAAO,CAAC,IAAR,CAAa,CAAC,KAAK,gBAAN,EAAwB,IAAI,OAAJ,CAAkB,UAAM,OAAN;AAAA,yBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC7E,mCAAM,uBAAW,CAAC,gBAAZ,CAA6B,mBAAS,CAAC,cAAvC,CAAN;;AAD6E;AACzF,qCADyF;;AAE7F,gCAAI,SAAS,KAAK,IAAlB,EAAwB;AACpB,qCAAO;AACV;;AAJ4F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAhB;AAAA,iBAAlB,CAAxB,CAAb,CAA1B;;;;;;;;;AAMH;AArLL;AAAA;AAAA,WAuLI,mBAAO;AACH,kBAAY,CAAC,KAAK,mBAAN,CAAZ;AACA,YAAM,CAAC,mBAAP,CAA2B,QAA3B,EAAqC,KAAK,QAA1C;AACA;AACH;AA3LL;;AAAA;AAAA,EAAkC,kBAAlC;AAiPA,aAAG,CAAC,iBAAJ,CAAsB,aAAG,EAAG;AACxB,2BAAY,CAAC,GAAb,GAAmB,GAAnB;AACH,CAFD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpQA;AACA;AAEO,IAAM,oCAAb;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,WAEU,YAAG,WAAH,EAA2B;;;;;;;AAC7B,uBAAM,yBAAe,CAAC,sBAAhB,CAAuC,uBAAvC,EAAoD,WAApD,CAAN;;;;;;;;;AACH;AAJL;AAAA;AAAA,WAMI,cAAK,WAAL,EAA6B;AACzB,aAAO,SAAP;AACH;AARL;;AAAA;AAAA,I;;;;;;;;ACJe,wFAA+B,E;;;;;;ACA9C;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEApE,MAAM,CAAC,UAAD,CAAN,GAAqBuF,MAArB,C,CAEA;;AACAvF,MAAM,CAAC,sBAAD,CAAN,GAAiC,KAAjC;AAEAwF,wBAAS,CAACC,gBAAV,GAA6B,KAA7B;AACAC,+BAAgB,CAACC,uBAAjB,GAA2C,KAA3C;AAEAC,aAAG,CAACC,iBAAJ,6EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAClBC,8BAAU,CAACC,IAAX,CAAgB;AACZC,wBAAY,EAAE;AACV,oBAAMC,EADI;AAEV,oBAAMC,EAAaA;AAFT,aADF;AAKZC,4BAAgB,EAAE,IALN;AAMZ;AACAC,wCAA4B,EAAE;AAPlB,WAAhB,EADkB,CAWlB;;AACAC,0CAAc,CAACC,KAAf,GAAuB,aAAvB;AAEIC,sBAdc,GAcCC,4BAAY,CAACC,WAAb,EAdD;AAAA,yBAelBF,YAfkB;AAAA,yBAeAC,4BAAY,CAACE,QAAb,CAAsBC,KAftB;AAAA,yBAgBPC,oBAhBO;AAAA;AAAA,iBAmBAzF,4CAAoB,CAAC0F,OAArB,CAA6B,YAA7B,EAA2C,GAA3C,CAnBA;;AAAA;AAAA;AAAA,0CAmBoD,GAnBpD;AAAA;AAgBdC,iBAhBc;AAiBdC,gBAjBc,EAiBR,IAjBQ;AAkBdC,kBAlBc,EAkBN,GAlBM;AAmBdC,iBAnBc;AAAA;;AAAA,uBAeLC,IAfK,gDAoBfC,KApBe,CAoBT,UAAA1L,CAAC;AAAA,mBAAI2L,OAAO,CAACC,KAAR,CAAc5L,CAAd,CAAJ;AAAA,WApBQ;;AAAA;AAAA,iBAsBZ6L,0BAAW,CAACb,WAAZ,GAA0Bc,KAA1B,GAAkCJ,KAAlC,CAAwC,UAAA1L,CAAC;AAAA,mBAAI2L,OAAO,CAACC,KAAR,CAAc5L,CAAd,CAAJ;AAAA,WAAzC,CAtBY;;AAAA;AAwBlB6L,oCAAW,CAACb,WAAZ,GAA0Be,sBAA1B;AAAA,sFAAiD,iBAAOC,UAAP;AAAA;AAAA;AAAA;AAAA;AAC7C,0BAAIA,UAAJ,EAAgB,CACZ;AACH;;AAH4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAjD;;AAAA;AAAA;AAAA;AAAA;;AAxBkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAtB;AA+BAC,qBAAW,CAACC,SAAZ,GAAwBC,wCAAxB;;AACAF,qBAAW,CAACG,cAAZ,GAA6B,UAAAC,QAAQ,EAAI;AACrC,MAAI,CAACA,QAAL,EAAc;AACV,QAAIC,eAAJ,CAAU,aAAV,EAAyBC,IAAzB;AACH;AACJ,CAJD;;AAMAzC,MAAM,CAAC0C,MAAP,CAAcC,sCAAY,CAACC,kBAA3B,EAA+C;AAC3CC,SAAO,EAAE,CAAC,OAAD,CADkC;AAE3CC,aAAW,EAAE,KAF8B;AAG3CC,eAAa,EAAE,IAH4B;AAI3CC,YAAU,EAAE,CACRC,yDADQ,EAERC,iEAFQ,EAGRC,uDAHQ,EAIRC,wBAJQ,EAKRC,oCALQ;AAJ+B,CAA/C;AAaA,IAAIC,GAAG,GAAG,IAAIjD,aAAJ,EAAV;AACAiD,GAAG,CAACC,KAAJ,CAAUC,yBAAV,EAAwB5B,KAAxB,CAA8B,UAAA1L,CAAC;AAAA,SAAI2L,OAAO,CAACC,KAAR,CAAc5L,CAAd,CAAJ;AAAA,CAA/B,EAAqD6C,IAArD,6EAA0D;AAAA;AAAA;AAAA;AAAA;AACtD0B,gBAAM,CAAC,SAAD,CAAN;AAAA,sFAAoB,kBAAOgJ,GAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKAC,oCAAgB,CAACxC,WAAjB,GAA+ByC,QAA/B,CAAwCF,GAAxC,CALA;;AAAA;AAKZG,yBALY;AAMhB/B,6BAAO,CAACgC,GAAR,CAAYD,GAAZ;AANgB,wDAOTA,GAPS;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAApB;;AAAA;AAAA;AAAA;AAAA;;AADsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA1D;AAWAN,GAAG,CAACQ,KAAJ,CAAU,YAAM;AACZjC,SAAO,CAACgC,GAAR,CAAY,qBAAZ,EAAmC,IAAIzN,IAAJ,EAAnC;;AAEA,MAAI2N,MAAM,CAACC,QAAP,KAAoB,SAAxB,EAAkC;AAC9B;AACA,QAAI,mBAAmBC,SAAvB,EAAkC;AAC9B;AACAxJ,YAAM,CAACH,gBAAP,CAAwB,MAAxB,EAAgC,YAAM;AAClC2J,iBAAS,CAACC,aAAV,CAAwBC,QAAxB,CAAiC,mBAAjC;AACH,OAFD;AAGH;AACJ;AAEJ,CAbD,E","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 288);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Dummy driver classes for replacement via `package.json` in browser builds.\n * Using those classes reduces the build size by one third.\n *\n * If we don't include those dummy classes (and just disable the driver import\n * with `false` in `package.json`) typeorm will throw an error on runtime and\n * during webpack builds even if those driver are not used.\n */\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoDriver = /** @class */ (function () {\n function MongoDriver() {\n }\n return MongoDriver;\n}());\nexport { MongoDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoQueryRunner = /** @class */ (function () {\n function MongoQueryRunner() {\n }\n return MongoQueryRunner;\n}());\nexport { MongoQueryRunner };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoEntityManager = /** @class */ (function () {\n function MongoEntityManager() {\n }\n return MongoEntityManager;\n}());\nexport { MongoEntityManager };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoRepository = /** @class */ (function () {\n function MongoRepository() {\n }\n return MongoRepository;\n}());\nexport { MongoRepository };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar PostgresDriver = /** @class */ (function () {\n function PostgresDriver() {\n }\n return PostgresDriver;\n}());\nexport { PostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiDriver = /** @class */ (function () {\n function AuroraDataApiDriver() {\n }\n return AuroraDataApiDriver;\n}());\nexport { AuroraDataApiDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar CockroachDriver = /** @class */ (function () {\n function CockroachDriver() {\n }\n return CockroachDriver;\n}());\nexport { CockroachDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiPostgresDriver = /** @class */ (function () {\n function AuroraDataApiPostgresDriver() {\n }\n return AuroraDataApiPostgresDriver;\n}());\nexport { AuroraDataApiPostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqlServerDriver = /** @class */ (function () {\n function SqlServerDriver() {\n }\n return SqlServerDriver;\n}());\nexport { SqlServerDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SapDriver = /** @class */ (function () {\n function SapDriver() {\n }\n return SapDriver;\n}());\nexport { SapDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MysqlDriver = /** @class */ (function () {\n function MysqlDriver() {\n }\n return MysqlDriver;\n}());\nexport { MysqlDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar OracleDriver = /** @class */ (function () {\n function OracleDriver() {\n }\n return OracleDriver;\n}());\nexport { OracleDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqliteDriver = /** @class */ (function () {\n function SqliteDriver() {\n }\n return SqliteDriver;\n}());\nexport { SqliteDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar BetterSqlite3Driver = /** @class */ (function () {\n function BetterSqlite3Driver() {\n }\n return BetterSqlite3Driver;\n}());\nexport { BetterSqlite3Driver };\n\n//# sourceMappingURL=BrowserDisabledDriversDummy.js.map\n","/**\n * This class stores query and its parameters\n */\nvar Query = /** @class */ (function () {\n function Query(query, parameters) {\n this.query = query;\n this.parameters = parameters;\n }\n return Query;\n}());\nexport { Query };\n\n//# sourceMappingURL=Query.js.map\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/js/Context/UserSite\"), exports);\n__exportStar(require(\"./client/js/Dialog/SelectUserDialog\"), exports);\n__exportStar(require(\"./client/js/MenuAction/StartUserSiteMenuAction\"), exports);\n__exportStar(require(\"./client/js/MenuAction/UserMenuAction\"), exports);\n__exportStar(require(\"./client/js/OfflineUserManager\"), exports);\n__exportStar(require(\"./client/js/Site/ChangeUserSite\"), exports);\n__exportStar(require(\"./client/js/Site/ForgotPasswordSite\"), exports);\n__exportStar(require(\"./client/js/Site/LoginSite\"), exports);\n__exportStar(require(\"./client/js/Site/NotAllowedSite\"), exports);\n__exportStar(require(\"./client/js/Site/RegistrationSite\"), exports);\n__exportStar(require(\"./client/js/UserManager\"), exports);\n__exportStar(require(\"./client/js/translationInit\"), exports);\n//# sourceMappingURL=client.js.map","import { TableColumn } from \"./TableColumn\";\nimport { TableIndex } from \"./TableIndex\";\nimport { TableForeignKey } from \"./TableForeignKey\";\nimport { TableUtils } from \"../util/TableUtils\";\nimport { TableUnique } from \"./TableUnique\";\nimport { TableCheck } from \"./TableCheck\";\nimport { TableExclusion } from \"./TableExclusion\";\n/**\n * Table in the database represented in this class.\n */\nvar Table = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Table(options) {\n /**\n * Table columns.\n */\n this.columns = [];\n /**\n * Table indices.\n */\n this.indices = [];\n /**\n * Table foreign keys.\n */\n this.foreignKeys = [];\n /**\n * Table unique constraints.\n */\n this.uniques = [];\n /**\n * Table check constraints.\n */\n this.checks = [];\n /**\n * Table exclusion constraints.\n */\n this.exclusions = [];\n /**\n * Indicates if table was just created.\n * This is needed, for example to check if we need to skip primary keys creation\n * for new tables.\n */\n this.justCreated = false;\n if (options) {\n this.name = options.name;\n if (options.columns)\n this.columns = options.columns.map(function (column) { return new TableColumn(column); });\n if (options.indices)\n this.indices = options.indices.map(function (index) { return new TableIndex(index); });\n if (options.foreignKeys)\n this.foreignKeys = options.foreignKeys.map(function (foreignKey) { return new TableForeignKey(foreignKey); });\n if (options.uniques)\n this.uniques = options.uniques.map(function (unique) { return new TableUnique(unique); });\n if (options.checks)\n this.checks = options.checks.map(function (check) { return new TableCheck(check); });\n if (options.exclusions)\n this.exclusions = options.exclusions.map(function (exclusion) { return new TableExclusion(exclusion); });\n if (options.justCreated !== undefined)\n this.justCreated = options.justCreated;\n this.engine = options.engine;\n }\n }\n Object.defineProperty(Table.prototype, \"primaryColumns\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n get: function () {\n return this.columns.filter(function (column) { return column.isPrimary; });\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n Table.prototype.clone = function () {\n return new Table({\n name: this.name,\n columns: this.columns.map(function (column) { return column.clone(); }),\n indices: this.indices.map(function (constraint) { return constraint.clone(); }),\n foreignKeys: this.foreignKeys.map(function (constraint) { return constraint.clone(); }),\n uniques: this.uniques.map(function (constraint) { return constraint.clone(); }),\n checks: this.checks.map(function (constraint) { return constraint.clone(); }),\n exclusions: this.exclusions.map(function (constraint) { return constraint.clone(); }),\n justCreated: this.justCreated,\n engine: this.engine,\n });\n };\n /**\n * Add column and creates its constraints.\n */\n Table.prototype.addColumn = function (column) {\n this.columns.push(column);\n };\n /**\n * Remove column and its constraints.\n */\n Table.prototype.removeColumn = function (column) {\n var foundColumn = this.columns.find(function (c) { return c.name === column.name; });\n if (foundColumn)\n this.columns.splice(this.columns.indexOf(foundColumn), 1);\n };\n /**\n * Adds unique constraint.\n */\n Table.prototype.addUniqueConstraint = function (uniqueConstraint) {\n this.uniques.push(uniqueConstraint);\n if (uniqueConstraint.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === uniqueConstraint.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = true;\n }\n };\n /**\n * Removes unique constraint.\n */\n Table.prototype.removeUniqueConstraint = function (removedUnique) {\n var foundUnique = this.uniques.find(function (unique) { return unique.name === removedUnique.name; });\n if (foundUnique) {\n this.uniques.splice(this.uniques.indexOf(foundUnique), 1);\n if (foundUnique.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === foundUnique.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = false;\n }\n }\n };\n /**\n * Adds check constraint.\n */\n Table.prototype.addCheckConstraint = function (checkConstraint) {\n this.checks.push(checkConstraint);\n };\n /**\n * Removes check constraint.\n */\n Table.prototype.removeCheckConstraint = function (removedCheck) {\n var foundCheck = this.checks.find(function (check) { return check.name === removedCheck.name; });\n if (foundCheck) {\n this.checks.splice(this.checks.indexOf(foundCheck), 1);\n }\n };\n /**\n * Adds exclusion constraint.\n */\n Table.prototype.addExclusionConstraint = function (exclusionConstraint) {\n this.exclusions.push(exclusionConstraint);\n };\n /**\n * Removes exclusion constraint.\n */\n Table.prototype.removeExclusionConstraint = function (removedExclusion) {\n var foundExclusion = this.exclusions.find(function (exclusion) { return exclusion.name === removedExclusion.name; });\n if (foundExclusion) {\n this.exclusions.splice(this.exclusions.indexOf(foundExclusion), 1);\n }\n };\n /**\n * Adds foreign keys.\n */\n Table.prototype.addForeignKey = function (foreignKey) {\n this.foreignKeys.push(foreignKey);\n };\n /**\n * Removes foreign key.\n */\n Table.prototype.removeForeignKey = function (removedForeignKey) {\n var fk = this.foreignKeys.find(function (foreignKey) { return foreignKey.name === removedForeignKey.name; });\n if (fk)\n this.foreignKeys.splice(this.foreignKeys.indexOf(fk), 1);\n };\n /**\n * Adds index.\n */\n Table.prototype.addIndex = function (index, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n this.indices.push(index);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we mark this column as unique\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column)\n column.isUnique = true;\n }\n };\n /**\n * Removes index.\n */\n Table.prototype.removeIndex = function (tableIndex, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n var index = this.indices.find(function (index) { return index.name === tableIndex.name; });\n if (index) {\n this.indices.splice(this.indices.indexOf(index), 1);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we move `unique` attribute from its column\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column_1 = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column_1)\n column_1.isUnique = this.indices.some(function (ind) { return ind.columnNames.length === 1 && ind.columnNames[0] === column_1.name && !!index.isUnique; });\n }\n }\n };\n Table.prototype.findColumnByName = function (name) {\n return this.columns.find(function (column) { return column.name === name; });\n };\n /**\n * Returns all column indices.\n */\n Table.prototype.findColumnIndices = function (column) {\n return this.indices.filter(function (index) {\n return !!index.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column foreign keys.\n */\n Table.prototype.findColumnForeignKeys = function (column) {\n return this.foreignKeys.filter(function (foreignKey) {\n return !!foreignKey.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column uniques.\n */\n Table.prototype.findColumnUniques = function (column) {\n return this.uniques.filter(function (unique) {\n return !!unique.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column checks.\n */\n Table.prototype.findColumnChecks = function (column) {\n return this.checks.filter(function (check) {\n return !!check.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table from a given entity metadata.\n */\n Table.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n engine: entityMetadata.engine,\n columns: entityMetadata.columns\n .filter(function (column) { return column; })\n .map(function (column) { return TableUtils.createTableColumnOptions(column, driver); }),\n indices: entityMetadata.indices\n .filter(function (index) { return index.synchronize === true; })\n .map(function (index) { return TableIndex.create(index); }),\n uniques: entityMetadata.uniques.map(function (unique) { return TableUnique.create(unique); }),\n checks: entityMetadata.checks.map(function (check) { return TableCheck.create(check); }),\n exclusions: entityMetadata.exclusions.map(function (exclusion) { return TableExclusion.create(exclusion); }),\n };\n return new Table(options);\n };\n return Table;\n}());\nexport { Table };\n\n//# sourceMappingURL=Table.js.map\n","import { __read, __spreadArray } from \"tslib\";\nvar OrmUtils = /** @class */ (function () {\n function OrmUtils() {\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Chunks array into peaces.\n */\n OrmUtils.chunk = function (array, size) {\n return Array.from(Array(Math.ceil(array.length / size)), function (_, i) {\n return array.slice(i * size, i * size + size);\n });\n };\n OrmUtils.splitClassesAndStrings = function (clsesAndStrings) {\n return [\n (clsesAndStrings).filter(function (cls) { return typeof cls !== \"string\"; }),\n (clsesAndStrings).filter(function (str) { return typeof str === \"string\"; }),\n ];\n };\n OrmUtils.groupBy = function (array, propertyCallback) {\n return array.reduce(function (groupedArray, value) {\n var key = propertyCallback(value);\n var grouped = groupedArray.find(function (i) { return i.id === key; });\n if (!grouped) {\n grouped = { id: key, items: [] };\n groupedArray.push(grouped);\n }\n grouped.items.push(value);\n return groupedArray;\n }, []);\n };\n OrmUtils.uniq = function (array, criteriaOrProperty) {\n return array.reduce(function (uniqueArray, item) {\n var found = false;\n if (criteriaOrProperty instanceof Function) {\n var itemValue_1 = criteriaOrProperty(item);\n found = !!uniqueArray.find(function (uniqueItem) { return criteriaOrProperty(uniqueItem) === itemValue_1; });\n }\n else if (typeof criteriaOrProperty === \"string\") {\n found = !!uniqueArray.find(function (uniqueItem) { return uniqueItem[criteriaOrProperty] === item[criteriaOrProperty]; });\n }\n else {\n found = uniqueArray.indexOf(item) !== -1;\n }\n if (!found)\n uniqueArray.push(item);\n return uniqueArray;\n }, []);\n };\n OrmUtils.isObject = function (item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n };\n /**\n * Deep Object.assign.\n *\n * @see http://stackoverflow.com/a/34749873\n */\n OrmUtils.mergeDeep = function (target) {\n var _a, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n if (!sources.length)\n return target;\n var source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (var key in source) {\n var value = source[key];\n if (key === \"__proto__\" || value instanceof Promise)\n continue;\n if (this.isObject(value)\n && !(value instanceof Map)\n && !(value instanceof Set)\n && !(value instanceof Date)\n && !(value instanceof Buffer)\n && !(value instanceof RegExp)) {\n if (!target[key])\n Object.assign(target, (_a = {}, _a[key] = Object.create(Object.getPrototypeOf(value)), _a));\n this.mergeDeep(target[key], value);\n }\n else {\n Object.assign(target, (_b = {}, _b[key] = value, _b));\n }\n }\n }\n return this.mergeDeep.apply(this, __spreadArray([target], __read(sources)));\n };\n /**\n * Deep compare objects.\n *\n * @see http://stackoverflow.com/a/1144249\n */\n OrmUtils.deepCompare = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var i, l, leftChain, rightChain;\n if (arguments.length < 1) {\n return true; // Die silently? Don't know how to handle such case, please help...\n // throw \"Need two or more arguments to compare\";\n }\n for (i = 1, l = arguments.length; i < l; i++) {\n leftChain = []; // Todo: this can be cached\n rightChain = [];\n if (!this.compare2Objects(leftChain, rightChain, arguments[0], arguments[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * Check if two entity-id-maps are the same\n */\n OrmUtils.compareIds = function (firstId, secondId) {\n if (firstId === undefined || firstId === null || secondId === undefined || secondId === null)\n return false;\n // Optimized version for the common case\n if (((typeof firstId.id === \"string\" && typeof secondId.id === \"string\") ||\n (typeof firstId.id === \"number\" && typeof secondId.id === \"number\")) &&\n Object.keys(firstId).length === 1 &&\n Object.keys(secondId).length === 1) {\n return firstId.id === secondId.id;\n }\n return OrmUtils.deepCompare(firstId, secondId);\n };\n /**\n * Transforms given value into boolean value.\n */\n OrmUtils.toBoolean = function (value) {\n if (typeof value === \"boolean\")\n return value;\n if (typeof value === \"string\")\n return value === \"true\" || value === \"1\";\n if (typeof value === \"number\")\n return value > 0;\n return false;\n };\n /**\n * Composes an object from the given array of keys and values.\n */\n OrmUtils.zipObject = function (keys, values) {\n return keys.reduce(function (object, column, index) {\n object[column] = values[index];\n return object;\n }, {});\n };\n /**\n * Compares two arrays.\n */\n OrmUtils.isArraysEqual = function (arr1, arr2) {\n if (arr1.length !== arr2.length)\n return false;\n return arr1.every(function (element) {\n return arr2.indexOf(element) !== -1;\n });\n };\n // -------------------------------------------------------------------------\n // Private methods\n // -------------------------------------------------------------------------\n OrmUtils.compare2Objects = function (leftChain, rightChain, x, y) {\n var p;\n // remember that NaN === NaN returns false\n // and isNaN(undefined) returns true\n if (Number.isNaN(x) && Number.isNaN(y))\n return true;\n // Compare primitives and functions.\n // Check if both arguments link to the same object.\n // Especially useful on the step where we compare prototypes\n if (x === y)\n return true;\n // Unequal, but either is null or undefined (use case: jsonb comparasion)\n // PR #3776, todo: add tests\n if (x === null || y === null || x === undefined || y === undefined)\n return false;\n // Fix the buffer compare bug.\n // See: https://github.com/typeorm/typeorm/issues/3654\n if ((typeof x.equals === \"function\" || x.equals instanceof Function) && x.equals(y))\n return true;\n // Works in case when functions are created in constructor.\n // Comparing dates is a common scenario. Another built-ins?\n // We can even handle functions passed across iframes\n if ((typeof x === \"function\" && typeof y === \"function\") ||\n (x instanceof Date && y instanceof Date) ||\n (x instanceof RegExp && y instanceof RegExp) ||\n (x instanceof String && y instanceof String) ||\n (x instanceof Number && y instanceof Number))\n return x.toString() === y.toString();\n // At last checking prototypes as good as we can\n if (!(x instanceof Object && y instanceof Object))\n return false;\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x))\n return false;\n if (x.constructor !== y.constructor)\n return false;\n if (x.prototype !== y.prototype)\n return false;\n // Check for infinitive linking loops\n if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1)\n return false;\n // Quick checking of one object being a subset of another.\n // todo: cache the structure of arguments[0] for performance\n for (p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n }\n for (p in x) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n switch (typeof (x[p])) {\n case \"object\":\n case \"function\":\n leftChain.push(x);\n rightChain.push(y);\n if (!this.compare2Objects(leftChain, rightChain, x[p], y[p])) {\n return false;\n }\n leftChain.pop();\n rightChain.pop();\n break;\n default:\n if (x[p] !== y[p]) {\n return false;\n }\n break;\n }\n }\n return true;\n };\n return OrmUtils;\n}());\nexport { OrmUtils };\n\n//# sourceMappingURL=OrmUtils.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst JsonHelper_1 = require(\"./JsonHelper\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable, ...args) {\n return Helper.isAllNull(...arguments);\n }\n static isAllNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable, ...args) {\n return Helper.isAllNotNull(...arguments);\n }\n static isAllNotNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNotNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n return JsonHelper_1.JsonHelper.deepCopy(obj);\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n static isMobileApp() {\n return (typeof device !== \"undefined\" && device.platform !== \"browser\");\n }\n static toSnakeCase(camelCase) {\n return camelCase.replace(/([A-Z])/g, function (find, something, position) { return ((position > 0) ? \"_\" : \"\") + find[0].toLowerCase(); });\n }\n static wait(timeout, result) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(() => {\n r(result);\n }, timeout);\n });\n });\n }\n static timeout(time, otherPromise, timeoutResult) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.race([otherPromise, Helper.wait(time).then(() => {\n if (timeoutResult === undefined) {\n return Promise.reject();\n }\n else {\n return timeoutResult;\n }\n })]);\n });\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","/**\n * Broadcaster execution result - promises executed by operations and number of executed listeners and subscribers.\n */\nvar BroadcasterResult = /** @class */ (function () {\n function BroadcasterResult() {\n /**\n * Number of executed listeners and subscribers.\n */\n this.count = 0;\n /**\n * Promises returned by listeners and subscribers which needs to be awaited.\n */\n this.promises = [];\n }\n return BroadcasterResult;\n}());\nexport { BroadcasterResult };\n\n//# sourceMappingURL=BroadcasterResult.js.map\n","/**\n * Find Operator used in Find Conditions.\n */\nvar FindOperator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function FindOperator(type, value, useParameter, multipleParameters, getSql, objectLiteralParameters) {\n if (useParameter === void 0) { useParameter = true; }\n if (multipleParameters === void 0) { multipleParameters = false; }\n this._type = type;\n this._value = value;\n this._useParameter = useParameter;\n this._multipleParameters = multipleParameters;\n this._getSql = getSql;\n this._objectLiteralParameters = objectLiteralParameters;\n }\n Object.defineProperty(FindOperator.prototype, \"useParameter\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Indicates if parameter is used or not for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.useParameter;\n return this._useParameter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"multipleParameters\", {\n /**\n * Indicates if multiple parameters must be used for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.multipleParameters;\n return this._multipleParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"type\", {\n /**\n * Gets the Type of this FindOperator\n */\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"value\", {\n /**\n * Gets the final value needs to be used as parameter value.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.value;\n return this._value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"objectLiteralParameters\", {\n /**\n * Gets ObjectLiteral parameters.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.objectLiteralParameters;\n return this._objectLiteralParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"child\", {\n /**\n * Gets the child FindOperator if it exists\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value;\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"getSql\", {\n /**\n * Gets the SQL generator\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.getSql;\n return this._getSql;\n },\n enumerable: false,\n configurable: true\n });\n return FindOperator;\n}());\nexport { FindOperator };\n\n//# sourceMappingURL=FindOperator.js.map\n","/**\n * Browser's implementation of the platform-specific tools.\n *\n * This file gonna replace PlatformTools for browser environment.\n * For node.js environment this class is not getting packaged.\n * Don't use methods of this class in the code, use PlatformTools methods instead.\n */\nvar PlatformTools = /** @class */ (function () {\n function PlatformTools() {\n }\n /**\n * Gets global variable where global stuff can be stored.\n */\n PlatformTools.getGlobalVariable = function () {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n // NativeScript uses global, not window\n return global;\n }\n };\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n PlatformTools.load = function (name) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: require(\\\"\" + name + \"\\\").\");\n return \"\";\n };\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n PlatformTools.pathNormalize = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.normalize(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Gets file extension. Does \"path.extname\".\n */\n PlatformTools.pathExtname = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.extname(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n PlatformTools.pathResolve = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.resolve(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n PlatformTools.fileExist = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.existsSync(\\\"\" + pathStr + \"\\\").\");\n return false;\n };\n PlatformTools.dotenv = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: dotenv.config({ path: \\\"\" + pathStr + \"\\\" }).\");\n };\n /**\n * Gets environment variable.\n */\n PlatformTools.getEnvVariable = function (name) {\n // if (this.type === \"browser\")\n // throw new Error(`This option/function is not supported in the browser environment. Failed operation: process.env[\"${name}\"].`);\n return undefined;\n };\n PlatformTools.readFileSync = function (filename) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.readFileSync(\\\"\" + filename + \"\\\").\");\n return null;\n };\n PlatformTools.appendFileSync = function (filename, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.appendFileSync(\\\"\" + filename + \"\\\").\");\n };\n PlatformTools.writeFile = function (path, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.writeFile(\\\"\" + path + \"\\\").\");\n return Promise.reject(null);\n };\n /**\n * Highlights sql string to be print in the console.\n */\n PlatformTools.highlightSql = function (sql) {\n return sql;\n };\n /**\n * Highlights json string to be print in the console.\n */\n PlatformTools.highlightJson = function (json) {\n return json;\n };\n /**\n * Logging functions needed by AdvancedConsoleLogger (but here without chalk)\n */\n PlatformTools.logInfo = function (prefix, info) {\n console.info(prefix + \" \", info);\n };\n PlatformTools.logError = function (prefix, error) {\n console.error(prefix + \" \", error);\n };\n PlatformTools.logWarn = function (prefix, warning) {\n console.warn(prefix + \" \", warning);\n };\n PlatformTools.log = function (message) {\n console.log(message);\n };\n PlatformTools.warn = function (message) {\n return message;\n };\n /**\n * Type of the currently running platform.\n */\n PlatformTools.type = \"browser\";\n return PlatformTools;\n}());\nexport { PlatformTools };\n/**\n * These classes are needed for stream operations or\n * in the mongodb driver. Both aren't supported in the browser.\n */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n }\n return EventEmitter;\n}());\nexport { EventEmitter };\nvar Readable = /** @class */ (function () {\n function Readable() {\n }\n return Readable;\n}());\nexport { Readable };\nvar Writable = /** @class */ (function () {\n function Writable() {\n }\n return Writable;\n}());\nexport { Writable };\nif (typeof window !== \"undefined\") {\n window.Buffer = require(\"buffer/\").Buffer;\n}\n// NativeScript uses global, not window\nif (typeof global !== \"undefined\") {\n global.Buffer = require(\"buffer/\").Buffer;\n}\n\n//# sourceMappingURL=BrowserPlatformTools.js.map\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst Translator_1 = require(\"../Translator\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable) {\n return (variable === null || variable === undefined);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable) {\n return !Helper.isNull(variable);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string|never}\n */\n static strftime(sFormat, date, useUTC, makePersistentTranslation) {\n useUTC = Helper.nonNull(useUTC, false);\n makePersistentTranslation = Helper.nonNull(makePersistentTranslation, true);\n date = Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, function (sMatch) {\n return {\n '%a': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDaysShort[nDay]).outerHTML : Translator_1.Translator.translate(aDaysShort[nDay]),\n '%A': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDays[nDay]).outerHTML : Translator_1.Translator.translate(aDays[nDay]),\n '%b': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth].slice(0, 3)).outerHTML : Translator_1.Translator.translate(aMonths[nMonth].slice(0, 3)),\n '%B': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth]).outerHTML : Translator_1.Translator.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = Helper.cloneJson(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = Helper.cloneJson(obj[i]);\n }\n return cloneO;\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n // debugger;\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n // static getIndexedObject(array, keyValue) {\n // let obj = {};\n // for (let i = 0, n = array.length; i < n; i++) {\n // obj[array[i][keyValue]] = array[i];\n // }\n // return obj;\n // }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n if (array instanceof Map) {\n array = Array.from(array.values());\n }\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { Table } from \"./table/Table\";\nimport { TableColumn } from \"./table/TableColumn\";\nimport { TableForeignKey } from \"./table/TableForeignKey\";\nimport { TableIndex } from \"./table/TableIndex\";\nimport { TableUtils } from \"./util/TableUtils\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { TableUnique } from \"./table/TableUnique\";\nimport { TableCheck } from \"./table/TableCheck\";\nimport { TableExclusion } from \"./table/TableExclusion\";\nimport { View } from \"./view/View\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates complete tables schemas in the database based on the entity metadatas.\n *\n * Steps how schema is being built:\n * 1. load list of all tables with complete column and keys information from the db\n * 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata\n * 3. create new tables that does not exist in the db, but exist in the metadata\n * 4. drop all columns exist (left old) in the db table, but does not exist in the metadata\n * 5. add columns from metadata which does not exist in the table\n * 6. update all exist columns which metadata has changed\n * 7. update primary keys - update old and create new primary key from changed columns\n * 8. create foreign keys which does not exist in the table yet\n * 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore\n */\nvar RdbmsSchemaBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RdbmsSchemaBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates complete schemas for the given entity metadatas.\n */\n RdbmsSchemaBuilder.prototype.build = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 12, 18, 20]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 7:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 9];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 11];\n return [4 /*yield*/, this.queryRunner.commitTransaction()];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 20];\n case 12:\n error_1 = _a.sent();\n _a.label = 13;\n case 13:\n _a.trys.push([13, 16, , 17]);\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 15];\n return [4 /*yield*/, this.queryRunner.rollbackTransaction()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18: return [4 /*yield*/, this.queryRunner.release()];\n case 19:\n _a.sent();\n return [7 /*endfinally*/];\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns sql queries to be executed by schema builder.\n */\n RdbmsSchemaBuilder.prototype.log = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 9, 11]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 5:\n _a.sent();\n this.queryRunner.enableSqlMemory();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 6:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 8];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [2 /*return*/, this.queryRunner.getMemorySql()];\n case 9:\n // its important to disable this mode despite the fact we are release query builder\n // because there exist drivers which reuse same query runner. Also its important to disable\n // sql memory after call of getMemorySql() method because last one flushes sql memory.\n this.queryRunner.disableSqlMemory();\n return [4 /*yield*/, this.queryRunner.release()];\n case 10:\n _a.sent();\n return [7 /*endfinally*/];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"entityToSyncMetadatas\", {\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.synchronize && metadata.tableType !== \"entity-child\" && metadata.tableType !== \"view\"; });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"viewEntityToSyncMetadatas\", {\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.tableType === \"view\" && metadata.synchronize; });\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Executes schema sync operations in a proper order.\n * Order of operations matter here.\n */\n RdbmsSchemaBuilder.prototype.executeSchemaSyncOperationsInProperOrder = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.dropOldViews()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.dropOldForeignKeys()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.dropOldIndices()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.dropOldChecks()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.dropOldExclusions()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.dropCompositeUniqueConstraints()];\n case 6:\n _a.sent();\n // await this.renameTables();\n return [4 /*yield*/, this.renameColumns()];\n case 7:\n // await this.renameTables();\n _a.sent();\n return [4 /*yield*/, this.createNewTables()];\n case 8:\n _a.sent();\n return [4 /*yield*/, this.dropRemovedColumns()];\n case 9:\n _a.sent();\n return [4 /*yield*/, this.addNewColumns()];\n case 10:\n _a.sent();\n return [4 /*yield*/, this.updatePrimaryKeys()];\n case 11:\n _a.sent();\n return [4 /*yield*/, this.updateExistColumns()];\n case 12:\n _a.sent();\n return [4 /*yield*/, this.createNewIndices()];\n case 13:\n _a.sent();\n return [4 /*yield*/, this.createNewChecks()];\n case 14:\n _a.sent();\n return [4 /*yield*/, this.createNewExclusions()];\n case 15:\n _a.sent();\n return [4 /*yield*/, this.createCompositeUniqueConstraints()];\n case 16:\n _a.sent();\n return [4 /*yield*/, this.createForeignKeys()];\n case 17:\n _a.sent();\n return [4 /*yield*/, this.createViews()];\n case 18:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata.\n */\n RdbmsSchemaBuilder.prototype.dropOldForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_1, this_1, _a, _b, metadata, e_1_1;\n var e_1, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_1 = function (metadata) {\n var table, tableForeignKeysToDrop;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_1.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n tableForeignKeysToDrop = table.foreignKeys.filter(function (tableForeignKey) {\n var metadataFK = metadata.foreignKeys.find(function (metadataForeignKey) { return foreignKeysMatch(tableForeignKey, metadataForeignKey); });\n return !metadataFK\n || (metadataFK.onDelete && metadataFK.onDelete !== tableForeignKey.onDelete)\n || (metadataFK.onUpdate && metadataFK.onUpdate !== tableForeignKey.onUpdate);\n });\n if (tableForeignKeysToDrop.length === 0)\n return [2 /*return*/, \"continue\"];\n this_1.connection.logger.logSchemaBuild(\"dropping old foreign keys of \" + table.name + \": \" + tableForeignKeysToDrop.map(function (dbForeignKey) { return dbForeignKey.name; }).join(\", \"));\n // drop foreign keys from the database\n return [4 /*yield*/, this_1.queryRunner.dropForeignKeys(table, tableForeignKeysToDrop)];\n case 1:\n // drop foreign keys from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_1(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _d.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rename tables\n */\n RdbmsSchemaBuilder.prototype.renameTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Renames columns.\n * Works if only one column per table was changed.\n * Changes only column name. If something besides name was changed, these changes will be ignored.\n */\n RdbmsSchemaBuilder.prototype.renameColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_2, this_2, _a, _b, metadata, e_2_1;\n var e_2, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_2 = function (metadata) {\n var table, renamedMetadataColumns, renamedTableColumns, renamedColumn;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_2.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n if (metadata.columns.length !== table.columns.length)\n return [2 /*return*/, \"continue\"];\n renamedMetadataColumns = metadata.columns.filter(function (column) {\n return !table.columns.find(function (tableColumn) {\n return tableColumn.name === column.databaseName\n && tableColumn.type === _this.connection.driver.normalizeType(column)\n && tableColumn.isNullable === column.isNullable\n && tableColumn.isUnique === _this.connection.driver.normalizeIsUnique(column);\n });\n });\n if (renamedMetadataColumns.length === 0 || renamedMetadataColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (column) {\n return column.databaseName === tableColumn.name\n && _this.connection.driver.normalizeType(column) === tableColumn.type\n && column.isNullable === tableColumn.isNullable\n && _this.connection.driver.normalizeIsUnique(column) === tableColumn.isUnique;\n });\n });\n if (renamedTableColumns.length === 0 || renamedTableColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedColumn = renamedTableColumns[0].clone();\n renamedColumn.name = renamedMetadataColumns[0].databaseName;\n this_2.connection.logger.logSchemaBuild(\"renaming column \\\"\" + renamedTableColumns[0].name + \"\\\" in to \\\"\" + renamedColumn.name + \"\\\"\");\n return [4 /*yield*/, this_2.queryRunner.renameColumn(table, renamedTableColumns[0], renamedColumn)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_2(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_2_1 = _d.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_3, this_3, _a, _b, metadata, e_3_1;\n var e_3, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_3 = function (metadata) {\n var table, dropQueries;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_3.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n dropQueries = table.indices\n .filter(function (tableIndex) {\n var indexMetadata = metadata.indices.find(function (index) { return index.name === tableIndex.name; });\n if (indexMetadata) {\n if (indexMetadata.synchronize === false)\n return false;\n if (indexMetadata.isUnique !== tableIndex.isUnique)\n return true;\n if (indexMetadata.isSpatial !== tableIndex.isSpatial)\n return true;\n if (_this.connection.driver.isFullTextColumnTypeSupported() && indexMetadata.isFulltext !== tableIndex.isFulltext)\n return true;\n if (indexMetadata.columns.length !== tableIndex.columnNames.length)\n return true;\n return !indexMetadata.columns.every(function (column) { return tableIndex.columnNames.indexOf(column.databaseName) !== -1; });\n }\n return true;\n })\n .map(function (tableIndex) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.connection.logger.logSchemaBuild(\"dropping an index: \\\"\" + tableIndex.name + \"\\\" from table \" + table.name);\n return [4 /*yield*/, this.queryRunner.dropIndex(table, tableIndex)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(dropQueries)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_3 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_3(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _d.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_4, this_4, _a, _b, metadata, e_4_1;\n var e_4, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_4 = function (metadata) {\n var table, oldChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_4.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldChecks = table.checks.filter(function (tableCheck) {\n return !metadata.checks.find(function (checkMetadata) { return checkMetadata.name === tableCheck.name; });\n });\n if (oldChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_4.connection.logger.logSchemaBuild(\"dropping old check constraint: \" + oldChecks.map(function (check) { return \"\\\"\" + check.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_4.queryRunner.dropCheckConstraints(table, oldChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_4 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_4(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_4_1 = _d.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_5, this_5, _a, _b, metadata, e_5_1;\n var e_5, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_5 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_5.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = table.uniques.filter(function (tableUnique) {\n return tableUnique.columnNames.length > 1 && !metadata.uniques.find(function (uniqueMetadata) { return uniqueMetadata.name === tableUnique.name; });\n });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_5.connection.logger.logSchemaBuild(\"dropping old unique constraint: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_5.queryRunner.dropUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_5 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_5(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_5_1 = _d.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_6, this_6, _a, _b, metadata, e_6_1;\n var e_6, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_6 = function (metadata) {\n var table, oldExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_6.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldExclusions = table.exclusions.filter(function (tableExclusion) {\n return !metadata.exclusions.find(function (exclusionMetadata) { return exclusionMetadata.name === tableExclusion.name; });\n });\n if (oldExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_6.connection.logger.logSchemaBuild(\"dropping old exclusion constraint: \" + oldExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_6.queryRunner.dropExclusionConstraints(table, oldExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_6 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_6(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_6_1 = _d.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates tables that do not exist in the database yet.\n * New tables are created without foreign and primary keys.\n * Primary key only can be created in conclusion with auto generated column.\n */\n RdbmsSchemaBuilder.prototype.createNewTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_7, this_7, _a, _b, metadata, e_7_1;\n var e_7, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_7 = function (metadata) {\n var existTable, table;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existTable = this_7.queryRunner.loadedTables.find(function (table) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullTableName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n return table.name === fullTableName;\n });\n if (existTable)\n return [2 /*return*/, \"continue\"];\n this_7.connection.logger.logSchemaBuild(\"creating a new table: \" + metadata.tablePath);\n table = Table.create(metadata, this_7.connection.driver);\n return [4 /*yield*/, this_7.queryRunner.createTable(table, false, false)];\n case 1:\n _e.sent();\n this_7.queryRunner.loadedTables.push(table);\n return [2 /*return*/];\n }\n });\n };\n this_7 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_7(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_7_1 = _d.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_8, this_8, _a, _b, metadata, e_8_1;\n var e_8, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_8 = function (metadata) {\n var existView, view;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existView = this_8.queryRunner.loadedViews.find(function (view) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existView)\n return [2 /*return*/, \"continue\"];\n this_8.connection.logger.logSchemaBuild(\"creating a new view: \" + metadata.tablePath);\n view = View.create(metadata, this_8.connection.driver);\n return [4 /*yield*/, this_8.queryRunner.createView(view)];\n case 1:\n _e.sent();\n this_8.queryRunner.loadedViews.push(view);\n return [2 /*return*/];\n }\n });\n };\n this_8 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.viewEntityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_8(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_8_1 = _d.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_9, this_9, _a, _b, view, e_9_1;\n var e_9, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_9 = function (view) {\n var existViewMetadata;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existViewMetadata = this_9.viewEntityToSyncMetadatas.find(function (metadata) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existViewMetadata)\n return [2 /*return*/, \"continue\"];\n this_9.connection.logger.logSchemaBuild(\"dropping an old view: \" + view.name);\n // drop an old view\n return [4 /*yield*/, this_9.queryRunner.dropView(view)];\n case 1:\n // drop an old view\n _e.sent();\n this_9.queryRunner.loadedViews.splice(this_9.queryRunner.loadedViews.indexOf(view), 1);\n return [2 /*return*/];\n }\n });\n };\n this_9 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.queryRunner.loadedViews), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n view = _b.value;\n return [5 /*yield**/, _loop_9(view)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_9_1 = _d.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all columns that exist in the table, but does not exist in the metadata (left old).\n * We drop their keys too, since it should be safe.\n */\n RdbmsSchemaBuilder.prototype.dropRemovedColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_10, this_10, _a, _b, metadata, e_10_1;\n var e_10, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_10 = function (metadata) {\n var table, droppedTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_10.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n droppedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (columnMetadata) { return columnMetadata.databaseName === tableColumn.name; });\n });\n if (droppedTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_10.connection.logger.logSchemaBuild(\"columns dropped in \" + table.name + \": \" + droppedTableColumns.map(function (column) { return column.name; }).join(\", \"));\n // drop columns from the database\n return [4 /*yield*/, this_10.queryRunner.dropColumns(table, droppedTableColumns)];\n case 1:\n // drop columns from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_10 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_10(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_10_1 = _d.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Adds columns from metadata which does not exist in the table.\n * Columns are created without keys.\n */\n RdbmsSchemaBuilder.prototype.addNewColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_11, this_11, _a, _b, metadata, e_11_1;\n var e_11, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_11 = function (metadata) {\n var table, newColumnMetadatas, newTableColumnOptions, newTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_11.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newColumnMetadatas = metadata.columns.filter(function (columnMetadata) {\n return !table.columns.find(function (tableColumn) { return tableColumn.name === columnMetadata.databaseName; });\n });\n if (newColumnMetadatas.length === 0)\n return [2 /*return*/, \"continue\"];\n newTableColumnOptions = this_11.metadataColumnsToTableColumnOptions(newColumnMetadatas);\n newTableColumns = newTableColumnOptions.map(function (option) { return new TableColumn(option); });\n if (newTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_11.connection.logger.logSchemaBuild(\"new columns added: \" + newColumnMetadatas.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_11.queryRunner.addColumns(table, newTableColumns)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_11 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_11(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_11_1 = _d.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n RdbmsSchemaBuilder.prototype.updatePrimaryKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_12, this_12, _a, _b, metadata, e_12_1;\n var e_12, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_12 = function (metadata) {\n var table, primaryMetadataColumns, primaryTableColumns, changedPrimaryColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_12.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n primaryMetadataColumns = metadata.columns.filter(function (column) { return column.isPrimary; });\n primaryTableColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (!(primaryTableColumns.length !== primaryMetadataColumns.length && primaryMetadataColumns.length > 1)) return [3 /*break*/, 2];\n changedPrimaryColumns = primaryMetadataColumns.map(function (primaryMetadataColumn) {\n return new TableColumn(TableUtils.createTableColumnOptions(primaryMetadataColumn, _this.connection.driver));\n });\n return [4 /*yield*/, this_12.queryRunner.updatePrimaryKeys(table, changedPrimaryColumns)];\n case 1:\n _e.sent();\n _e.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n };\n this_12 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_12(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_12_1 = _d.sent();\n e_12 = { error: e_12_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_12) throw e_12.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Update all exist columns which metadata has changed.\n * Still don't create keys. Also we don't touch foreign keys of the changed columns.\n */\n RdbmsSchemaBuilder.prototype.updateExistColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_13, this_13, _a, _b, metadata, e_13_1;\n var e_13, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_13 = function (metadata) {\n var table, changedColumns, changedColumns_1, changedColumns_1_1, changedColumn, e_14_1, changedColumns_2, changedColumns_2_1, changedColumn, e_15_1, changedColumns_3, changedColumns_3_1, changedColumn, e_16_1, newAndOldTableColumns;\n var e_14, _e, e_15, _f, e_16, _g;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n table = this_13.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n changedColumns = this_13.connection.driver.findChangedColumns(table.columns, metadata.columns);\n if (changedColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n _h.label = 1;\n case 1:\n _h.trys.push([1, 6, 7, 8]);\n changedColumns_1 = (e_14 = void 0, __values(changedColumns)), changedColumns_1_1 = changedColumns_1.next();\n _h.label = 2;\n case 2:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 5];\n changedColumn = changedColumns_1_1.value;\n return [4 /*yield*/, this_13.dropColumnReferencedForeignKeys(metadata.tablePath, changedColumn.databaseName)];\n case 3:\n _h.sent();\n _h.label = 4;\n case 4:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_14_1 = _h.sent();\n e_14 = { error: e_14_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_e = changedColumns_1.return)) _e.call(changedColumns_1);\n }\n finally { if (e_14) throw e_14.error; }\n return [7 /*endfinally*/];\n case 8:\n _h.trys.push([8, 13, 14, 15]);\n changedColumns_2 = (e_15 = void 0, __values(changedColumns)), changedColumns_2_1 = changedColumns_2.next();\n _h.label = 9;\n case 9:\n if (!!changedColumns_2_1.done) return [3 /*break*/, 12];\n changedColumn = changedColumns_2_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeIndices(metadata.tablePath, changedColumn.databaseName)];\n case 10:\n _h.sent();\n _h.label = 11;\n case 11:\n changedColumns_2_1 = changedColumns_2.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_15_1 = _h.sent();\n e_15 = { error: e_15_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (changedColumns_2_1 && !changedColumns_2_1.done && (_f = changedColumns_2.return)) _f.call(changedColumns_2);\n }\n finally { if (e_15) throw e_15.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!!(this_13.connection.driver instanceof MysqlDriver || this_13.connection.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 23];\n _h.label = 16;\n case 16:\n _h.trys.push([16, 21, 22, 23]);\n changedColumns_3 = (e_16 = void 0, __values(changedColumns)), changedColumns_3_1 = changedColumns_3.next();\n _h.label = 17;\n case 17:\n if (!!changedColumns_3_1.done) return [3 /*break*/, 20];\n changedColumn = changedColumns_3_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeUniques(metadata.tablePath, changedColumn.databaseName)];\n case 18:\n _h.sent();\n _h.label = 19;\n case 19:\n changedColumns_3_1 = changedColumns_3.next();\n return [3 /*break*/, 17];\n case 20: return [3 /*break*/, 23];\n case 21:\n e_16_1 = _h.sent();\n e_16 = { error: e_16_1 };\n return [3 /*break*/, 23];\n case 22:\n try {\n if (changedColumns_3_1 && !changedColumns_3_1.done && (_g = changedColumns_3.return)) _g.call(changedColumns_3);\n }\n finally { if (e_16) throw e_16.error; }\n return [7 /*endfinally*/];\n case 23:\n newAndOldTableColumns = changedColumns.map(function (changedColumn) {\n var oldTableColumn = table.columns.find(function (column) { return column.name === changedColumn.databaseName; });\n var newTableColumnOptions = TableUtils.createTableColumnOptions(changedColumn, _this.connection.driver);\n var newTableColumn = new TableColumn(newTableColumnOptions);\n return {\n oldColumn: oldTableColumn,\n newColumn: newTableColumn\n };\n });\n if (newAndOldTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_13.connection.logger.logSchemaBuild(\"columns changed in \\\"\" + table.name + \"\\\". updating: \" + changedColumns.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_13.queryRunner.changeColumns(table, newAndOldTableColumns)];\n case 24:\n _h.sent();\n return [2 /*return*/];\n }\n });\n };\n this_13 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_13(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_13_1 = _d.sent();\n e_13 = { error: e_13_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_13) throw e_13.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite indices which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_14, this_14, _a, _b, metadata, e_17_1;\n var e_17, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_14 = function (metadata) {\n var table, newIndices;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_14.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newIndices = metadata.indices\n .filter(function (indexMetadata) { return !table.indices.find(function (tableIndex) { return tableIndex.name === indexMetadata.name; }) && indexMetadata.synchronize === true; })\n .map(function (indexMetadata) { return TableIndex.create(indexMetadata); });\n if (newIndices.length === 0)\n return [2 /*return*/, \"continue\"];\n this_14.connection.logger.logSchemaBuild(\"adding new indices \" + newIndices.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_14.queryRunner.createIndices(table, newIndices)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_14 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_14(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_17_1 = _d.sent();\n e_17 = { error: e_17_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_17) throw e_17.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createNewChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_15, this_15, _a, _b, metadata, e_18_1;\n var e_18, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_15 = function (metadata) {\n var table, newChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_15.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newChecks = metadata.checks\n .filter(function (checkMetadata) { return !table.checks.find(function (tableCheck) { return tableCheck.name === checkMetadata.name; }); })\n .map(function (checkMetadata) { return TableCheck.create(checkMetadata); });\n if (newChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_15.connection.logger.logSchemaBuild(\"adding new check constraints: \" + newChecks.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_15.queryRunner.createCheckConstraints(table, newChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_15 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_15(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_18_1 = _d.sent();\n e_18 = { error: e_18_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_18) throw e_18.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite uniques which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_16, this_16, _a, _b, metadata, e_19_1;\n var e_19, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_16 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_16.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = metadata.uniques\n .filter(function (uniqueMetadata) { return uniqueMetadata.columns.length > 1 && !table.uniques.find(function (tableUnique) { return tableUnique.name === uniqueMetadata.name; }); })\n .map(function (uniqueMetadata) { return TableUnique.create(uniqueMetadata); });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_16.connection.logger.logSchemaBuild(\"adding new unique constraints: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_16.queryRunner.createUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_16 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_16(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_19_1 = _d.sent();\n e_19 = { error: e_19_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_19) throw e_19.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates exclusions which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_17, this_17, _a, _b, metadata, e_20_1;\n var e_20, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_17 = function (metadata) {\n var table, newExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_17.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newExclusions = metadata.exclusions\n .filter(function (exclusionMetadata) { return !table.exclusions.find(function (tableExclusion) { return tableExclusion.name === exclusionMetadata.name; }); })\n .map(function (exclusionMetadata) { return TableExclusion.create(exclusionMetadata); });\n if (newExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_17.connection.logger.logSchemaBuild(\"adding new exclusion constraints: \" + newExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_17.queryRunner.createExclusionConstraints(table, newExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_17 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_17(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_20_1 = _d.sent();\n e_20 = { error: e_20_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_20) throw e_20.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates foreign keys which does not exist in the table yet.\n */\n RdbmsSchemaBuilder.prototype.createForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_18, this_18, _a, _b, metadata, e_21_1;\n var e_21, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_18 = function (metadata) {\n var table, newKeys, dbForeignKeys;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_18.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newKeys = metadata.foreignKeys\n .filter(function (foreignKey) {\n return !table.foreignKeys.find(function (dbForeignKey) { return foreignKeysMatch(dbForeignKey, foreignKey); });\n });\n if (newKeys.length === 0)\n return [2 /*return*/, \"continue\"];\n dbForeignKeys = newKeys.map(function (foreignKeyMetadata) { return TableForeignKey.create(foreignKeyMetadata); });\n this_18.connection.logger.logSchemaBuild(\"creating a foreign keys: \" + newKeys.map(function (key) { return key.name; }).join(\", \") + \" on table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_18.queryRunner.createForeignKeys(table, dbForeignKeys)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_18 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_18(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_21_1 = _d.sent();\n e_21 = { error: e_21_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_21) throw e_21.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all foreign keys where given column of the given table is being used.\n */\n RdbmsSchemaBuilder.prototype.dropColumnReferencedForeignKeys = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, tablesWithFK, columnForeignKey, clonedTable, tablesWithFK_1, tablesWithFK_1_1, tableWithFK, e_22_1;\n var e_22, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n tablesWithFK = [];\n columnForeignKey = table.foreignKeys.find(function (foreignKey) { return foreignKey.columnNames.indexOf(columnName) !== -1; });\n if (columnForeignKey) {\n clonedTable = table.clone();\n clonedTable.foreignKeys = [columnForeignKey];\n tablesWithFK.push(clonedTable);\n table.removeForeignKey(columnForeignKey);\n }\n this.queryRunner.loadedTables.forEach(function (loadedTable) {\n var dependForeignKeys = loadedTable.foreignKeys.filter(function (foreignKey) {\n return foreignKey.referencedTableName === tablePath && foreignKey.referencedColumnNames.indexOf(columnName) !== -1;\n });\n if (dependForeignKeys.length > 0) {\n var clonedTable = loadedTable.clone();\n clonedTable.foreignKeys = dependForeignKeys;\n tablesWithFK.push(clonedTable);\n dependForeignKeys.forEach(function (dependForeignKey) { return loadedTable.removeForeignKey(dependForeignKey); });\n }\n });\n if (!(tablesWithFK.length > 0)) return [3 /*break*/, 8];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, 7, 8]);\n tablesWithFK_1 = __values(tablesWithFK), tablesWithFK_1_1 = tablesWithFK_1.next();\n _b.label = 2;\n case 2:\n if (!!tablesWithFK_1_1.done) return [3 /*break*/, 5];\n tableWithFK = tablesWithFK_1_1.value;\n this.connection.logger.logSchemaBuild(\"dropping related foreign keys of \" + tableWithFK.name + \": \" + tableWithFK.foreignKeys.map(function (foreignKey) { return foreignKey.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropForeignKeys(tableWithFK, tableWithFK.foreignKeys)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n tablesWithFK_1_1 = tablesWithFK_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_22_1 = _b.sent();\n e_22 = { error: e_22_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (tablesWithFK_1_1 && !tablesWithFK_1_1.done && (_a = tablesWithFK_1.return)) _a.call(tablesWithFK_1);\n }\n finally { if (e_22) throw e_22.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite indices, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeIndices = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedIndices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedIndices = table.indices.filter(function (index) { return index.columnNames.length > 1 && index.columnNames.indexOf(columnName) !== -1; });\n if (relatedIndices.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related indices of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedIndices.map(function (index) { return index.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropIndices(table, relatedIndices)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite uniques, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeUniques = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedUniques;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedUniques = table.uniques.filter(function (unique) { return unique.columnNames.length > 1 && unique.columnNames.indexOf(columnName) !== -1; });\n if (relatedUniques.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related unique constraints of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedUniques.map(function (unique) { return unique.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropUniqueConstraints(table, relatedUniques)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new columns from the given column metadatas.\n */\n RdbmsSchemaBuilder.prototype.metadataColumnsToTableColumnOptions = function (columns) {\n var _this = this;\n return columns.map(function (columnMetadata) { return TableUtils.createTableColumnOptions(columnMetadata, _this.connection.driver); });\n };\n /**\n * Creates typeorm service table for storing user defined Views.\n */\n RdbmsSchemaBuilder.prototype.createTypeormMetadataTable = function () {\n return __awaiter(this, void 0, void 0, function () {\n var options, typeormMetadataTable;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n options = this.connection.driver.options;\n typeormMetadataTable = this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n return [4 /*yield*/, this.queryRunner.createTable(new Table({\n name: typeormMetadataTable,\n columns: [\n {\n name: \"type\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataType }),\n isNullable: false\n },\n {\n name: \"database\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataDatabase }),\n isNullable: true\n },\n {\n name: \"schema\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataSchema }),\n isNullable: true\n },\n {\n name: \"table\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataTable }),\n isNullable: true\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataName }),\n isNullable: true\n },\n {\n name: \"value\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataValue }),\n isNullable: true\n },\n ]\n }), true)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return RdbmsSchemaBuilder;\n}());\nexport { RdbmsSchemaBuilder };\nfunction foreignKeysMatch(tableForeignKey, metadataForeignKey) {\n return (tableForeignKey.name === metadataForeignKey.name)\n && (tableForeignKey.referencedTableName === metadataForeignKey.referencedTablePath);\n}\n\n//# sourceMappingURL=RdbmsSchemaBuilder.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { DateUtils } from \"../../util/DateUtils\";\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\n/**\n * Organizes communication with sqlite DBMS.\n */\nvar AbstractSqliteDriver = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteDriver(connection) {\n /**\n * Indicates if replication is enabled.\n */\n this.isReplicated = false;\n /**\n * Indicates if tree tables are supported by this driver.\n */\n this.treeSupport = true;\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n this.supportedDataTypes = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support length by a driver.\n */\n this.withLengthColumnTypes = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n /**\n * Gets list of spatial column data types.\n */\n this.spatialTypes = [];\n /**\n * Gets list of column data types that support precision by a driver.\n */\n this.withPrecisionColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support scale by a driver.\n */\n this.withScaleColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n this.mappedDataTypes = {\n createDate: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n this.connection = connection;\n this.options = connection.options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n AbstractSqliteDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AbstractSqliteDriver.prototype.afterConnect = function () {\n return Promise.resolve();\n };\n /**\n * Closes connection with database.\n */\n AbstractSqliteDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(function (err) { return err ? fail(err) : ok(); });\n })];\n });\n });\n };\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n AbstractSqliteDriver.prototype.createSchemaBuilder = function () {\n return new RdbmsSchemaBuilder(this.connection);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AbstractSqliteDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n if (value === null || value === undefined)\n return value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n }\n else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value);\n }\n return value;\n };\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n AbstractSqliteDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n value = DateUtils.normalizeHydratedDate(value);\n }\n else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return value;\n };\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n AbstractSqliteDriver.prototype.escapeQueryWithParameters = function (sql, parameters, nativeParameters) {\n var builtParameters = Object.keys(nativeParameters).map(function (key) {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n return nativeParameters[key];\n });\n if (!parameters || !Object.keys(parameters).length)\n return [sql, builtParameters];\n var keys = Object.keys(parameters).map(function (parameter) { return \"(:(\\\\.\\\\.\\\\.)?\" + parameter + \"\\\\b)\"; }).join(\"|\");\n sql = sql.replace(new RegExp(keys, \"g\"), function (key) {\n var value;\n var isArray = false;\n if (key.substr(0, 4) === \":...\") {\n isArray = true;\n value = parameters[key.substr(4)];\n }\n else {\n value = parameters[key.substr(1)];\n }\n if (isArray) {\n return value.map(function (v) {\n builtParameters.push(v);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }).join(\", \");\n }\n else if (value instanceof Function) {\n return value();\n }\n else {\n builtParameters.push(value);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, builtParameters];\n };\n /**\n * Escapes a column name.\n */\n AbstractSqliteDriver.prototype.escape = function (columnName) {\n return \"\\\"\" + columnName + \"\\\"\";\n };\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. \"myDB\".\"mySchema\".\"myTable\"\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n AbstractSqliteDriver.prototype.buildTableName = function (tableName, schema, database) {\n return tableName;\n };\n /**\n * Creates a database type from a given column metadata.\n */\n AbstractSqliteDriver.prototype.normalizeType = function (column) {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n }\n else if (column.type === String) {\n return \"varchar\";\n }\n else if (column.type === Date) {\n return \"datetime\";\n }\n else if (column.type === Boolean) {\n return \"boolean\";\n }\n else if (column.type === \"uuid\") {\n return \"varchar\";\n }\n else if (column.type === \"simple-array\") {\n return \"text\";\n }\n else if (column.type === \"simple-json\") {\n return \"text\";\n }\n else if (column.type === \"simple-enum\") {\n return \"varchar\";\n }\n else {\n return column.type || \"\";\n }\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeDefault = function (columnMetadata) {\n var defaultValue = columnMetadata.default;\n if (typeof defaultValue === \"number\") {\n return \"\" + defaultValue;\n }\n else if (typeof defaultValue === \"boolean\") {\n return defaultValue === true ? \"1\" : \"0\";\n }\n else if (typeof defaultValue === \"function\") {\n return defaultValue();\n }\n else if (typeof defaultValue === \"string\") {\n return \"'\" + defaultValue + \"'\";\n }\n else if (defaultValue === null) {\n return undefined;\n }\n else {\n return defaultValue;\n }\n };\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeIsUnique = function (column) {\n return column.entityMetadata.uniques.some(function (uq) { return uq.columns.length === 1 && uq.columns[0] === column; });\n };\n /**\n * Calculates column length taking into account the default length values.\n */\n AbstractSqliteDriver.prototype.getColumnLength = function (column) {\n return column.length ? column.length.toString() : \"\";\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.createFullType = function (column) {\n var type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n if (column.isArray)\n type += \" array\";\n return type;\n };\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainMasterConnection = function () {\n return Promise.resolve();\n };\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainSlaveConnection = function () {\n return Promise.resolve();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n AbstractSqliteDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex, entityNum) {\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n var value;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n if (!value)\n return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n AbstractSqliteDriver.prototype.findChangedColumns = function (tableColumns, columnMetadatas) {\n var _this = this;\n return columnMetadatas.filter(function (columnMetadata) {\n var tableColumn = tableColumns.find(function (c) { return c.name === columnMetadata.databaseName; });\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== _this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || _this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== _this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n });\n };\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n AbstractSqliteDriver.prototype.isReturningSqlSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n AbstractSqliteDriver.prototype.isUUIDGenerationSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports fulltext indices.\n */\n AbstractSqliteDriver.prototype.isFullTextColumnTypeSupported = function () {\n return false;\n };\n /**\n * Creates an escaped parameter.\n */\n AbstractSqliteDriver.prototype.createParameter = function (parameterName, index) {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n AbstractSqliteDriver.prototype.createDatabaseConnection = function () {\n throw new Error(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AbstractSqliteDriver.prototype.loadDependencies = function () {\n // dependencies have to be loaded in the specific driver\n };\n return AbstractSqliteDriver;\n}());\nexport { AbstractSqliteDriver };\n\n//# sourceMappingURL=AbstractSqliteDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SoundManager = void 0;\nconst AudioChain_1 = require(\"./AudioChain\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst App_1 = require(\"../App\");\nconst DataManager_1 = require(\"../DataManager\");\nclass SoundManager {\n constructor() {\n this.channels = {};\n if ('AudioContext' in window) {\n this.context = new AudioContext();\n }\n else if ('webkitAudioContext' in window) {\n // @ts-ignore\n this.context = new webkitAudioContext();\n }\n else {\n throw new Error(\"No audio context found!\");\n }\n this.context.onstatechange = function () {\n console.log(\"stateChange from context\", arguments);\n };\n this.context.oncomplete = function () {\n console.log(\"onComplete from context\", arguments);\n };\n window.addEventListener(\"visibilitychange\", (e) => {\n // console.log(\"visibility Change event\", e);\n this.handleVisibilityChange();\n });\n //For safari\n let checkVisibility = () => {\n this.handleVisibilityChange();\n setTimeout(checkVisibility, 500);\n };\n checkVisibility();\n }\n static getInstance() {\n if (Helper_1.Helper.isNull(SoundManager._instance)) {\n SoundManager._instance = new SoundManager();\n }\n return SoundManager._instance;\n }\n isNotSuspended() {\n // return false;\n return this.context.state !== \"suspended\";\n }\n set(options, channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let audioObject = Helper_1.Helper.nonNull(this.channels[channel], {});\n if (typeof options === \"string\") {\n options = { audio: options };\n }\n let audio = options.audio;\n if (Helper_1.Helper.isNotNull(audio)) {\n audioObject.loadedPromise = DataManager_1.DataManager.loadAsset(audio, \"raw\").then(res => res.arrayBuffer()).then(arrayBuffer => {\n return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n }).catch(e => console.error(e));\n // audioObject.loadedPromise = fetch(audio).then(res => res.arrayBuffer()).then(arrayBuffer => {\n // return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n // }).catch(e => console.error(e));\n this.stop(channel);\n }\n audioObject.muted = Helper_1.Helper.nonNull(options.muted, audioObject.muted, false);\n audioObject.volume = Helper_1.Helper.nonNull(options.volume, audioObject.volume, 1);\n audioObject.loop = Helper_1.Helper.nonNull(options.loop, audioObject.loop, false);\n audioObject.timeOffset = Helper_1.Helper.nonNull(options.timeOffset, audioObject.timeOffset, 0);\n this.channels[channel] = audioObject;\n if (audioObject.muted) {\n this.stop(channel);\n }\n return this.channels[channel];\n }\n resumeContext() {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.context.resume === \"function\") {\n return this.context.resume();\n }\n });\n }\n play(channel, audioOrOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n this.resumeContext();\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNull(audioOrOptions)) {\n audioOrOptions = {};\n }\n else if (!(typeof audioOrOptions === \"object\")) {\n audioOrOptions = {\n audio: audioOrOptions\n };\n }\n audioOrOptions.timeOffset = Helper_1.Helper.nonNull(audioOrOptions.timeOffset, 0);\n this.stop(channel);\n this.set(audioOrOptions, channel);\n if (!this.channels[channel].muted) {\n let buffer = yield this.channels[channel].loadedPromise;\n let source = new AudioChain_1.AudioChain(this.context, buffer, (sourceNode) => {\n let gain = this.context.createGain();\n gain.gain.value = this.channels[channel].volume;\n sourceNode.connect(gain);\n gain.connect(this.context.destination);\n });\n source.setBuffer(buffer);\n //to prevent gap in mp3-files\n source.setLooping(this.channels[channel].loop, 0.3, buffer.duration - 0.3);\n this.channels[channel].source = source;\n yield source.start();\n }\n return this.channels[channel];\n });\n }\n stop(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let oldAudio = this.channels[channel];\n if (Helper_1.Helper.isNotNull(oldAudio) && Helper_1.Helper.isNotNull(oldAudio.source)) {\n oldAudio.source.stop();\n }\n }\n get(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n return this.channels[channel];\n }\n resume(channel) {\n return __awaiter(this, void 0, void 0, function* () {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNotNull(this.channels[channel]) && !this.channels[channel].muted && Helper_1.Helper.isNotNull(this.channels[channel].source)) {\n return this.channels[channel].source.resume();\n }\n });\n }\n stopAll() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.stop();\n }\n }\n }\n resumeAllIfNotMuted() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k]) && !this.channels[k].muted && Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.resume();\n }\n }\n }\n handleVisibilityChange() {\n if (document.hidden) {\n this.stopAll();\n }\n else {\n this.resumeAllIfNotMuted();\n }\n }\n}\nexports.SoundManager = SoundManager;\nSoundManager.CHANNELS = {\n MUSIC: \"music\",\n SOUND: \"sound\",\n DEFAULT: \"default\"\n};\nApp_1.App.addInitialization(app => {\n // PauseSite.onPauseListeners.push(() => {\n // SoundManager.getInstance().stopAll();\n // });\n // PauseSite.onStartListeners.push(() => {\n // SoundManager.getInstance().resumeAllIfNotMuted();\n // });\n});\n// AndroidBridge.addDefinition(() => {\n// window[\"soundManagerInstance\"] = SoundManager.getInstance();\n// window[\"soundManagerInstance\"][\"stopAll\"] = window[\"soundManagerInstance\"].stopAll;\n// window[\"soundManagerInstance\"][\"resumeAllIfNotMuted\"] = window[\"soundManagerInstance\"].resumeAllIfNotMuted;\n// });\n//# sourceMappingURL=SoundManager.js.map","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./BaseDatabase\"));\n__export(require(\"./BaseModel\"));\n__export(require(\"./cordova-sites-database\"));\n//# sourceMappingURL=cordova-sites-database.js.map","import { __read, __values } from \"tslib\";\nimport { hash } from \"../util/StringUtils\";\n/**\n * Common driver utility functions.\n */\nvar DriverUtils = /** @class */ (function () {\n function DriverUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n */\n DriverUtils.buildDriverOptions = function (options, buildOptions) {\n var e_1, _a;\n if (options.url) {\n var urlDriverOptions = this.parseConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * buildDriverOptions for MongodDB only to support replica set\n */\n DriverUtils.buildMongoDBDriverOptions = function (options, buildOptions) {\n var e_2, _a;\n if (options.url) {\n var urlDriverOptions = this.parseMongoDBConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * Builds column alias from given alias name and column name.\n *\n * If alias length is greater than the limit (if any) allowed by the current\n * driver, replaces it with a hashed string.\n *\n * @param driver Current `Driver`.\n * @param alias Alias part.\n * @param column Name of the column to be concatened to `alias`.\n *\n * @return An alias allowing to select/transform the target `column`.\n */\n DriverUtils.buildColumnAlias = function (_a, alias, column) {\n var maxAliasLength = _a.maxAliasLength;\n var columnAliasName = alias + \"_\" + column;\n if (maxAliasLength && maxAliasLength > 0 && columnAliasName.length > maxAliasLength) {\n return hash(columnAliasName, { length: maxAliasLength });\n }\n return columnAliasName;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Extracts connection data from the connection url.\n */\n DriverUtils.parseConnectionUrl = function (url) {\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n var _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined\n };\n };\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n */\n DriverUtils.parseMongoDBConnectionUrl = function (url) {\n var _a;\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n var afterQuestionMark = \"\";\n var host = undefined;\n var port = undefined;\n var hostReplicaSet = undefined;\n var replicaSet = undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params to get replica set\n afterQuestionMark = afterBase.substr((afterBase.indexOf(\"?\") + 1), afterBase.length);\n replicaSet = afterQuestionMark.split(\"=\")[1];\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n if (replicaSet) {\n hostReplicaSet = hostAndPort;\n }\n else {\n _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n }\n return {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined,\n replicaSet: replicaSet || undefined\n };\n };\n return DriverUtils;\n}());\nexport { DriverUtils };\n\n//# sourceMappingURL=DriverUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Provides utilities to transform hydrated and persisted data.\n */\nvar DateUtils = /** @class */ (function () {\n function DateUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes date object hydrated from the database.\n */\n DateUtils.normalizeHydratedDate = function (mixedDate) {\n if (!mixedDate)\n return mixedDate;\n return typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n };\n /**\n * Converts given value into date string in a \"YYYY-MM-DD\" format.\n */\n DateUtils.mixedDateToDateString = function (value) {\n if (value instanceof Date)\n return this.formatZerolessValue(value.getFullYear()) + \"-\" + this.formatZerolessValue(value.getMonth() + 1) + \"-\" + this.formatZerolessValue(value.getDate());\n return value;\n };\n /**\n * Converts given value into date object.\n */\n DateUtils.mixedDateToDate = function (mixedDate, toUtc, useMilliseconds) {\n if (toUtc === void 0) { toUtc = false; }\n if (useMilliseconds === void 0) { useMilliseconds = true; }\n var date = typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n if (toUtc)\n date = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n if (!useMilliseconds)\n date.setUTCMilliseconds(0);\n return date;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedDateToTimeString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n if (value instanceof Date)\n return this.formatZerolessValue(value.getHours()) +\n \":\" + this.formatZerolessValue(value.getMinutes()) +\n (!skipSeconds ? \":\" + this.formatZerolessValue(value.getSeconds()) : \"\");\n return value;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToDate = function (value) {\n if (typeof value === \"string\") {\n var _a = __read(value.split(\":\"), 3), hours = _a[0], minutes = _a[1], seconds = _a[2];\n var date = new Date();\n if (hours)\n date.setHours(parseInt(hours));\n if (minutes)\n date.setMinutes(parseInt(minutes));\n if (seconds)\n date.setSeconds(parseInt(seconds));\n return date;\n }\n return value;\n };\n /**\n * Converts given string value with \"-\" separator into a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n value = value instanceof Date ? (value.getHours() + \":\" + value.getMinutes() + (!skipSeconds ? \":\" + value.getSeconds() : \"\")) : value;\n if (typeof value === \"string\") {\n return value.split(\":\")\n .map(function (v) { return v.length === 1 ? \"0\" + v : v; }) // append zero at beginning if we have a first-zero-less number\n .join(\":\");\n }\n return value;\n };\n /**\n * Converts given value into datetime string in a \"YYYY-MM-DD HH-mm-ss\" format.\n */\n DateUtils.mixedDateToDatetimeString = function (value, useMilliseconds) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n var finalValue = this.formatZerolessValue(value.getFullYear()) + \"-\" +\n this.formatZerolessValue(value.getMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getDate()) + \" \" +\n this.formatZerolessValue(value.getHours()) + \":\" +\n this.formatZerolessValue(value.getMinutes()) + \":\" +\n this.formatZerolessValue(value.getSeconds());\n if (useMilliseconds)\n finalValue += \".\" + this.formatMilliseconds(value.getMilliseconds());\n value = finalValue;\n }\n return value;\n };\n /**\n * Converts given value into utc datetime string in a \"YYYY-MM-DD HH-mm-ss.sss\" format.\n */\n DateUtils.mixedDateToUtcDatetimeString = function (value) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n return this.formatZerolessValue(value.getUTCFullYear()) + \"-\" +\n this.formatZerolessValue(value.getUTCMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getUTCDate()) + \" \" +\n this.formatZerolessValue(value.getUTCHours()) + \":\" +\n this.formatZerolessValue(value.getUTCMinutes()) + \":\" +\n this.formatZerolessValue(value.getUTCSeconds()) + \".\" +\n this.formatMilliseconds(value.getUTCMilliseconds());\n }\n return value;\n };\n /**\n * Converts each item in the given array to string joined by \",\" separator.\n */\n DateUtils.simpleArrayToString = function (value) {\n if (Array.isArray(value)) {\n return value\n .map(function (i) { return String(i); })\n .join(\",\");\n }\n return value;\n };\n /**\n * Converts given string to simple array split by \",\" separator.\n */\n DateUtils.stringToSimpleArray = function (value) {\n if (value instanceof String || typeof value === \"string\") {\n if (value.length > 0) {\n return value.split(\",\");\n }\n else {\n return [];\n }\n }\n return value;\n };\n DateUtils.simpleJsonToString = function (value) {\n return JSON.stringify(value);\n };\n DateUtils.stringToSimpleJson = function (value) {\n return typeof value === \"string\" ? JSON.parse(value) : value;\n };\n DateUtils.simpleEnumToString = function (value) {\n return \"\" + value;\n };\n DateUtils.stringToSimpleEnum = function (value, columnMetadata) {\n if (columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in poosible enum options\n value = parseInt(value);\n }\n return value;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatZerolessValue = function (value) {\n if (value < 10)\n return \"0\" + value;\n return String(value);\n };\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatMilliseconds = function (value) {\n if (value < 10) {\n return \"00\" + value;\n }\n else if (value < 100) {\n return \"0\" + value;\n }\n else {\n return String(value);\n }\n };\n return DateUtils;\n}());\nexport { DateUtils };\n\n//# sourceMappingURL=DateUtils.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Counter\"), exports);\n__exportStar(require(\"./shared/DateHelper\"), exports);\n__exportStar(require(\"./shared/Helper\"), exports);\n__exportStar(require(\"./shared/JsonHelper\"), exports);\n__exportStar(require(\"./shared/MigrationHelper\"), exports);\n__exportStar(require(\"./shared/Prioritized\"), exports);\n__exportStar(require(\"./shared/PromiseWithHandlers\"), exports);\n__exportStar(require(\"./shared/Random\"), exports);\n__exportStar(require(\"./shared/XSSHelper\"), exports);\n//# sourceMappingURL=shared.js.map","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","import { __values } from \"tslib\";\nvar ObjectUtils = /** @class */ (function () {\n function ObjectUtils() {\n }\n /**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target The target object to copy to.\n * @param sources One or more source objects from which to copy properties\n */\n ObjectUtils.assign = function (target) {\n var e_1, _a, e_2, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n try {\n for (var sources_1 = __values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {\n var source = sources_1_1.value;\n try {\n for (var _c = (e_2 = void 0, __values(Object.getOwnPropertyNames(source))), _d = _c.next(); !_d.done; _d = _c.next()) {\n var prop = _d.value;\n target[prop] = source[prop];\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n return ObjectUtils;\n}());\nexport { ObjectUtils };\n\n//# sourceMappingURL=ObjectUtils.js.map\n","/**\n * Table's columns in the database represented in this class.\n */\nvar TableColumn = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableColumn(options) {\n /**\n * Indicates if column is NULL, or is NOT NULL in the database.\n */\n this.isNullable = false;\n /**\n * Indicates if column is auto-generated sequence.\n */\n this.isGenerated = false;\n /**\n * Indicates if column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if column has unique value.\n */\n this.isUnique = false;\n /**\n * Indicates if column stores array.\n */\n this.isArray = false;\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n this.length = \"\";\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n if (options) {\n this.name = options.name;\n this.type = options.type || \"\";\n this.length = options.length || \"\";\n this.width = options.width;\n this.charset = options.charset;\n this.collation = options.collation;\n this.precision = options.precision;\n this.scale = options.scale;\n this.zerofill = options.zerofill || false;\n this.unsigned = this.zerofill ? true : (options.unsigned || false);\n this.default = options.default;\n this.onUpdate = options.onUpdate;\n this.isNullable = options.isNullable || false;\n this.isGenerated = options.isGenerated || false;\n this.generationStrategy = options.generationStrategy;\n this.isPrimary = options.isPrimary || false;\n this.isUnique = options.isUnique || false;\n this.isArray = options.isArray || false;\n this.comment = options.comment;\n this.enum = options.enum;\n this.enumName = options.enumName;\n this.asExpression = options.asExpression;\n this.generatedType = options.generatedType;\n this.spatialFeatureType = options.spatialFeatureType;\n this.srid = options.srid;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this column to a new column with exact same properties as this column has.\n */\n TableColumn.prototype.clone = function () {\n return new TableColumn({\n name: this.name,\n type: this.type,\n length: this.length,\n width: this.width,\n charset: this.charset,\n collation: this.collation,\n precision: this.precision,\n scale: this.scale,\n zerofill: this.zerofill,\n unsigned: this.unsigned,\n enum: this.enum,\n enumName: this.enumName,\n asExpression: this.asExpression,\n generatedType: this.generatedType,\n default: this.default,\n onUpdate: this.onUpdate,\n isNullable: this.isNullable,\n isGenerated: this.isGenerated,\n generationStrategy: this.generationStrategy,\n isPrimary: this.isPrimary,\n isUnique: this.isUnique,\n isArray: this.isArray,\n comment: this.comment,\n spatialFeatureType: this.spatialFeatureType,\n srid: this.srid\n });\n };\n return TableColumn;\n}());\nexport { TableColumn };\n\n//# sourceMappingURL=TableColumn.js.map\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewHelper = void 0;\nclass ViewHelper {\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n from.childNodes.forEach(child => {\n children.push(child);\n });\n children.forEach(child => {\n from.removeChild(child);\n to.appendChild(child);\n });\n return to;\n }\n static insertAfter(newChild, referenceChild) {\n const parent = referenceChild.parentNode;\n if (parent) {\n if (parent.lastChild === referenceChild) {\n parent.appendChild(newChild);\n }\n else {\n parent.insertBefore(newChild, referenceChild.nextSibling);\n }\n return true;\n }\n return false;\n }\n}\nexports.ViewHelper = ViewHelper;\n//# sourceMappingURL=ViewHelper.js.map","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table unique constraint stored in this class.\n */\nvar TableUnique = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableUnique(options) {\n /**\n * Columns that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableUnique.prototype.clone = function () {\n return new TableUnique({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames))\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates unique from the unique metadata object.\n */\n TableUnique.create = function (uniqueMetadata) {\n return new TableUnique({\n name: uniqueMetadata.name,\n columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; })\n });\n };\n return TableUnique;\n}());\nexport { TableUnique };\n\n//# sourceMappingURL=TableUnique.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * This metadata contains all information about entity's column.\n */\nvar ColumnMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ColumnMetadata(options) {\n /**\n * Type's length in the database.\n */\n this.length = \"\";\n /**\n * Indicates if this column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if this column is generated (auto increment or generated other way).\n */\n this.isGenerated = false;\n /**\n * Indicates if column can contain nulls or not.\n */\n this.isNullable = false;\n /**\n * Indicates if column is selected by query builder or not.\n */\n this.isSelect = true;\n /**\n * Indicates if column is inserted by default or not.\n */\n this.isInsert = true;\n /**\n * Indicates if column allows updates or not.\n */\n this.isUpdate = true;\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n /**\n * Indicates if this column is an array.\n */\n this.isArray = false;\n /**\n * Indicates if column is virtual. Virtual columns are not mapped to the entity.\n */\n this.isVirtual = false;\n /**\n * Indicates if column is discriminator. Discriminator columns are not mapped to the entity.\n */\n this.isDiscriminator = false;\n /**\n * Indicates if column is tree-level column. Tree-level columns are used in closure entities.\n */\n this.isTreeLevel = false;\n /**\n * Indicates if this column contains an entity creation date.\n */\n this.isCreateDate = false;\n /**\n * Indicates if this column contains an entity update date.\n */\n this.isUpdateDate = false;\n /**\n * Indicates if this column contains an entity delete date.\n */\n this.isDeleteDate = false;\n /**\n * Indicates if this column contains an entity version.\n */\n this.isVersion = false;\n /**\n * Indicates if this column contains an object id.\n */\n this.isObjectId = false;\n /**\n * Indicates if this column is nested set's left column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetLeft = false;\n /**\n * Indicates if this column is nested set's right column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetRight = false;\n /**\n * Indicates if this column is materialized path's path column.\n * Used only in tree entities with materialized path type.\n */\n this.isMaterializedPath = false;\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.referencedColumn = options.referencedColumn;\n if (options.args.target)\n this.target = options.args.target;\n if (options.args.propertyName)\n this.propertyName = options.args.propertyName;\n if (options.args.options.name)\n this.givenDatabaseName = options.args.options.name;\n if (options.args.options.type)\n this.type = options.args.options.type;\n if (options.args.options.length)\n this.length = options.args.options.length ? options.args.options.length.toString() : \"\";\n if (options.args.options.width)\n this.width = options.args.options.width;\n if (options.args.options.charset)\n this.charset = options.args.options.charset;\n if (options.args.options.collation)\n this.collation = options.args.options.collation;\n if (options.args.options.primary)\n this.isPrimary = options.args.options.primary;\n if (options.args.options.default === null) // to make sure default: null is the same as nullable: true\n this.isNullable = true;\n if (options.args.options.nullable !== undefined)\n this.isNullable = options.args.options.nullable;\n if (options.args.options.select !== undefined)\n this.isSelect = options.args.options.select;\n if (options.args.options.insert !== undefined)\n this.isInsert = options.args.options.insert;\n if (options.args.options.update !== undefined)\n this.isUpdate = options.args.options.update;\n if (options.args.options.readonly !== undefined)\n this.isUpdate = !options.args.options.readonly;\n if (options.args.options.comment)\n this.comment = options.args.options.comment;\n if (options.args.options.default !== undefined)\n this.default = options.args.options.default;\n if (options.args.options.onUpdate)\n this.onUpdate = options.args.options.onUpdate;\n if (options.args.options.scale !== null && options.args.options.scale !== undefined)\n this.scale = options.args.options.scale;\n if (options.args.options.zerofill) {\n this.zerofill = options.args.options.zerofill;\n this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n }\n if (options.args.options.unsigned)\n this.unsigned = options.args.options.unsigned;\n if (options.args.options.precision !== undefined)\n this.precision = options.args.options.precision;\n if (options.args.options.enum) {\n if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) {\n this.enum = Object.keys(options.args.options.enum)\n .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them\n .map(function (key) { return options.args.options.enum[key]; });\n }\n else {\n this.enum = options.args.options.enum;\n }\n }\n if (options.args.options.enumName) {\n this.enumName = options.args.options.enumName;\n }\n if (options.args.options.asExpression) {\n this.asExpression = options.args.options.asExpression;\n this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : \"VIRTUAL\";\n }\n if (options.args.options.hstoreType)\n this.hstoreType = options.args.options.hstoreType;\n if (options.args.options.array)\n this.isArray = options.args.options.array;\n if (options.args.mode) {\n this.isVirtual = options.args.mode === \"virtual\";\n this.isTreeLevel = options.args.mode === \"treeLevel\";\n this.isCreateDate = options.args.mode === \"createDate\";\n this.isUpdateDate = options.args.mode === \"updateDate\";\n this.isDeleteDate = options.args.mode === \"deleteDate\";\n this.isVersion = options.args.mode === \"version\";\n this.isObjectId = options.args.mode === \"objectId\";\n }\n if (options.args.options.transformer)\n this.transformer = options.args.options.transformer;\n if (options.args.options.spatialFeatureType)\n this.spatialFeatureType = options.args.options.spatialFeatureType;\n if (options.args.options.srid !== undefined)\n this.srid = options.args.options.srid;\n if (this.isTreeLevel)\n this.type = options.connection.driver.mappedDataTypes.treeLevel;\n if (this.isCreateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.createDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; };\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.createDatePrecision;\n }\n if (this.isUpdateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.updateDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; };\n if (!this.onUpdate)\n this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision;\n }\n if (this.isDeleteDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.deleteDate;\n if (!this.isNullable)\n this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision;\n }\n if (this.isVersion)\n this.type = options.connection.driver.mappedDataTypes.version;\n if (options.closureType)\n this.closureType = options.closureType;\n if (options.nestedSetLeft)\n this.isNestedSetLeft = options.nestedSetLeft;\n if (options.nestedSetRight)\n this.isNestedSetRight = options.nestedSetRight;\n if (options.materializedPath)\n this.isMaterializedPath = options.materializedPath;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates entity id map from the given entity ids array.\n */\n ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) {\n var _a;\n var _this = this;\n if (useDatabaseName === void 0) { useDatabaseName = false; }\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_1 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_1(propertyNames, map[propertyName]);\n return map;\n }\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((_this.generationStrategy === \"increment\" || _this.generationStrategy === \"rowid\") && _this.type === \"bigint\" && value !== null)\n value = String(value);\n map[useDatabaseName ? _this.databaseName : _this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_1(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((this.generationStrategy === \"increment\" || this.generationStrategy === \"rowid\") && this.type === \"bigint\" && value !== null)\n value = String(value);\n return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a;\n }\n };\n /**\n * Extracts column value and returns its column name with this value in a literal object.\n * If column is in embedded (or recursive embedded) it returns complex literal object.\n *\n * Examples what this method can return depend if this column is in embeds.\n * { id: 1 } or { title: \"hello\" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } }\n */\n ColumnMetadata.prototype.getEntityValueMap = function (entity, options) {\n var _a, _b;\n var _this = this;\n var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will.\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) {\n var propertyName = propertyNames.shift();\n if (value === undefined)\n return map;\n if (propertyName) {\n var submap = {};\n extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap);\n if (Object.keys(submap).length > 0) {\n map[propertyName] = submap;\n }\n return map;\n }\n if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null))\n map[_this.propertyName] = value[_this.propertyName];\n return map;\n };\n var map = {};\n extractEmbeddedColumnValue_2(propertyNames, entity, map);\n return Object.keys(map).length > 0 ? map : undefined;\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) {\n var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) {\n var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]);\n if (value === undefined)\n return map;\n return OrmUtils.mergeDeep(map, value);\n }, {});\n if (Object.keys(map).length > 0)\n return _a = {}, _a[this.propertyName] = map, _a;\n return undefined;\n }\n else {\n if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null))\n return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b;\n return undefined;\n }\n }\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n ColumnMetadata.prototype.getEntityValue = function (entity, transform) {\n if (transform === void 0) { transform = false; }\n if (entity === undefined || entity === null)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n var value = undefined;\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_3 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity);\n if (embeddedObject) {\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(entity);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator) && !(relatedEntity instanceof Function)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof FindOperator) && !(entity[this.propertyName] instanceof Function)) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n if (transform && this.transformer)\n value = ApplyValueTransformers.transformTo(this.transformer, value);\n return value;\n };\n /**\n * Sets given entity's column value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n */\n ColumnMetadata.prototype.setEntityValue = function (entity, value) {\n var _this = this;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_4(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n // we write a deep object in this entity only if the column is virtual\n // because if its not virtual it means the user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) {\n if (!(this.propertyName in entity)) {\n entity[this.propertyName] = {};\n }\n entity[this.propertyName][this.referencedColumn.propertyName] = value;\n }\n else {\n entity[this.propertyName] = value;\n }\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n ColumnMetadata.prototype.build = function (connection) {\n this.propertyPath = this.buildPropertyPath();\n this.propertyAliasName = this.propertyPath.replace(\".\", \"_\");\n this.databaseName = this.buildDatabaseName(connection);\n this.databasePath = this.buildDatabasePath();\n this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []);\n return this;\n };\n ColumnMetadata.prototype.buildPropertyPath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.propertyName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName)\n path += \".\" + this.referencedColumn.propertyName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabasePath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.databaseName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName)\n path += \".\" + this.referencedColumn.databaseName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabaseName = function (connection) {\n var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : [];\n if (connection.driver instanceof MongoDriver) // we don't need to include embedded name for the mongodb column names\n propertyNames = [];\n return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames);\n };\n return ColumnMetadata;\n}());\nexport { ColumnMetadata };\n\n//# sourceMappingURL=ColumnMetadata.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst NativeStoragePromise_1 = require(\"./NativeStoragePromise\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"../../shared/Translator\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator extends Translator_1.Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config) {\n super(config);\n config = Helper_1.Helper.nonNull(config, {});\n this._currentLanguage = config.currentLanguage || this._fallbackLanguage;\n this._nativeStorageKey = config.nativeStorageKey || \"language\";\n this._translationClass = config.translationClass || \"translation\";\n this._initPromise = this.loadUserLanguage().then(userLanguage => this.setLanguage(userLanguage.toLowerCase()));\n }\n /**\n * Setzt die neue Sprache, updated alle Übersetzungen. Speichert danach die aktuelle Sprache in NativeStorage\n * @param language\n */\n setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._currentLanguage === language) {\n yield this.updateTranslations();\n return;\n }\n if (!this._translations[language]) {\n return;\n }\n if (typeof document !== 'undefined') {\n document.getElementsByTagName(\"html\")[0].setAttribute(\"lang\", language);\n }\n this._currentLanguage = language;\n yield this.updateTranslations();\n //zum schluss => Falls setzen des Keys fehlschlägt, wird trotzdem noch übersetzt\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this._nativeStorageKey, this._currentLanguage);\n });\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @returns {*}\n */\n translate(key, args, language) {\n return super.translate(key, args, Helper_1.Helper.nonNull(language, this._currentLanguage));\n }\n /**\n * Fügt eine Callback hinzu, die aufgerufen wird, sobald die Seite übersetzt wird. Sollte genutzt werden, um Teile\n * zu übersetzen, die nicht per HTML übersetzt werden können, die der Document Title\n *\n * wenn callImmediately true ist (default), wird die Callback sofort einmal ausgeführt\n *\n * Gibt die CallbackId zurück\n *\n * @param callback\n * @param callImmediately\n * @returns {number}\n */\n addTranslationCallback(callback, callImmediately) {\n callImmediately = Helper_1.Helper.nonNull(callImmediately, true);\n this._lastTranslationCallbackId++;\n this._translationCallbacks.set(this._lastTranslationCallbackId, callback);\n if (callImmediately) {\n callback();\n }\n return this._lastTranslationCallbackId;\n }\n /**\n * Entfernt die Callback anhand der gegebenen ID\n *\n * @param callbackId\n */\n removeTranslationCallback(callbackId) {\n this._translationCallbacks.delete(callbackId);\n }\n /**\n * Updated die aktuellen übersetzungen\n */\n updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n baseElement = Helper_1.Helper.nonNull(baseElement, document);\n if (typeof baseElement !== 'undefined') {\n let elements = baseElement.getElementsByClassName(this._translationClass);\n for (let i = 0, max = elements.length; i < max; i++) {\n let key = (Translator._isValid(elements[i].dataset[\"translation\"]) ? elements[i].dataset[\"translation\"] : (elements[i].innerText || \"\"));\n if (key !== \"\" && !elements[i].dataset[\"onlyTranslateAttributes\"]) {\n try {\n let translation = this.translate(key, (elements[i].dataset[\"translationArgs\"] !== undefined) ? JSON.parse(elements[i].dataset[\"translationArgs\"]) : undefined);\n if (elements[i].dataset[\"translationUseText\"] === \"1\") {\n elements[i].innerText = translation;\n }\n else {\n elements[i].innerHTML = translation;\n }\n elements[i].dataset[\"translation\"] = key;\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n //Übersetzung von Attributen\n for (let k in elements[i].dataset) {\n if (k.startsWith(\"translation\") && !k.endsWith(\"Args\")) {\n try {\n elements[i][k.substr(11).toLowerCase()] = this.translate(elements[i].dataset[k], (elements[i].dataset[k + \"Args\"] !== undefined) ? JSON.parse(elements[i].dataset[k + \"Args\"]) : undefined);\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n }\n }\n }\n //Call translation callbacks\n yield Helper_1.Helper.asyncForEach(this._translationCallbacks, (callback) => __awaiter(this, void 0, void 0, function* () { return callback(baseElement); }));\n // this._translationCallbacks.forEach(callback => callback(baseElement));\n });\n }\n /**\n * Lädt die im NativeStorage gespeicherte Sprache oder - falls diese nicht vorhanden ist - die vom User untersütze Sprache im Browser\n * @returns {Promise<*>}\n */\n loadUserLanguage() {\n return __awaiter(this, void 0, void 0, function* () {\n let userLanguage = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this._nativeStorageKey);\n if (!Translator._isValid(userLanguage) || !(userLanguage in this._translations)) {\n let userLanguages = [];\n if (navigator.language !== undefined) {\n userLanguages.push(navigator.language);\n }\n if (\"languages\" in navigator) {\n //.slice(0) klont das Array. Behebt einen Bug in Firefox\n userLanguages = navigator.languages.slice(0);\n }\n //sicherstellen, dass überhaupt eine Sprache gefunden wird\n userLanguages.push(this._fallbackLanguage);\n // if (userLanguages !== undefined) {\n for (let i = 0, numLanguages = userLanguages.length; i < numLanguages; i++) {\n if (userLanguages[i] in this._translations) {\n userLanguage = userLanguages[i];\n break;\n }\n }\n // }\n }\n return userLanguage;\n });\n }\n /**\n * Erstellt eine neue Übersetzung, welche auch übersetzt wird, wenn die Sprache geändert wird\n * @param key\n * @param args\n * @param tag\n * @param useText\n * @returns {any}\n */\n makePersistentTranslation(key, args, tag, useText) {\n useText = Helper_1.Helper.nonNull(useText, tag, args, false);\n tag = tag || \"span\";\n if (typeof document !== 'undefined') {\n let htmlElem = document.createElement(tag);\n htmlElem.dataset[\"translation\"] = key;\n htmlElem.classList.add(this._translationClass);\n if (args !== undefined) {\n htmlElem.dataset[\"translationArgs\"] = JSON.stringify(args);\n }\n if (useText === true) {\n htmlElem.innerText = this.translate(key, args);\n htmlElem.dataset[\"translationUseText\"] = \"1\";\n }\n else {\n htmlElem.innerHTML = this.translate(key, args);\n }\n return htmlElem;\n }\n }\n getTranslationClass() {\n return this._translationClass;\n }\n getCurrentLanguage() {\n return this._currentLanguage;\n }\n static getInstance() {\n return Translator_1.Translator.getInstance();\n }\n static setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.setLanguage(language);\n }\n });\n }\n static makePersistentTranslation(key, args, tag, useText) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.makePersistentTranslation(key, args, tag, useText);\n }\n }\n static addTranslationCallback(callback, callImmediately) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addTranslationCallback(callback, callImmediately);\n }\n }\n static removeTranslationCallback(callbackId) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.removeTranslationCallback(callbackId);\n }\n }\n static updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.updateTranslations(baseElement);\n }\n });\n }\n static init(config) {\n Translator_1.Translator.instance = new Translator(config);\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.logMissingTranslations = true;\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.App = void 0;\n/**\n * Eine Klasse, welche als Ursprung für die App genutzt wird\n */\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst SiteManager_1 = require(\"./Context/SiteManager\");\nclass App {\n /**\n * Erstellt eine neue App, speichert ein internes Promise, welches resolved wird, sobald das deviceready-Event gefeuert wird\n */\n constructor() {\n this._resolver = { resolve: null, reject: null };\n this._readyPromise = new Promise(r => document.addEventListener(\"deviceready\", r, false));\n this._deepLinks = {};\n this._siteManager = SiteManager_1.SiteManager.getInstance();\n }\n addDeepLink(link, siteConstructor) {\n this._deepLinks[link] = siteConstructor;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._siteManager) {\n return this._siteManager.startSite(site, args);\n }\n });\n }\n static setLogo(logo) {\n this._logo = logo;\n }\n static getLogo() {\n return this._logo;\n }\n start(startSiteConstructor) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.ready();\n let initialSiteConstructor = startSiteConstructor;\n let params = App._getStartParams();\n this.startingSite = initialSiteConstructor;\n this.startingSiteParameters = params;\n if (Helper_1.Helper.isNotNull(params[\"s\"])) {\n startSiteConstructor = Helper_1.Helper.nonNull(this._deepLinks[params[\"s\"]], startSiteConstructor);\n delete params[\"s\"];\n }\n this.startingSiteParameters = null;\n let siteManager = this._siteManager;\n siteManager.init(\"site\", this._deepLinks);\n Helper_1.Helper.removeAllChildren(document.getElementById(\"site\"));\n siteManager.startSite(startSiteConstructor, params);\n siteManager.setAppEndedListener(manager => {\n manager.startSite(initialSiteConstructor);\n });\n });\n }\n /**\n * Startet die erste Seite\n */\n startStartingSite() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.startingSite) {\n return this.startSite(this.startingSite, this.startingSiteParameters);\n }\n });\n }\n /**\n * Führt die Callback aus, sobald das interne Promise aufgelöst wird und App._promises fertig sind oder gibt das interne Promise zurück\n *\n * @param callback\n * @returns {Promise<*>}\n */\n ready(callback) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._readyPromise.then(() => {\n App._resolver.resolve(this);\n return Promise.all(App._promises);\n });\n if (callback) {\n return promise.then(callback);\n }\n else {\n return promise;\n }\n });\n }\n static addInitialization(callbackOrPromise) {\n if (typeof callbackOrPromise === \"function\") {\n let promise = callbackOrPromise;\n callbackOrPromise = App._mainPromise.then((app) => {\n return promise(app);\n });\n }\n App._promises.push(callbackOrPromise);\n }\n static _getStartParams() {\n return Object.assign(App._extractParams(window.location.search.substr(1)), App._startParams);\n }\n static _extractParams(paramString) {\n if (Helper_1.Helper.isNull(paramString)) {\n return null;\n }\n let result = {}, tmp = [];\n let items = paramString.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n tmp = items[index].split(\"=\");\n if (tmp[0].trim().length > 0) {\n result[tmp[0]] = decodeURIComponent(tmp[1]);\n }\n }\n return result;\n }\n static setStartParam(name, value) {\n this._startParams[name] = value;\n }\n}\nexports.App = App;\nApp._promises = [];\nApp._resolver = {\n resolve: null,\n reject: null,\n};\nApp._mainPromise = new Promise((res, rej) => {\n App._resolver = {\n resolve: res,\n reject: rej,\n };\n});\nApp._startParams = {};\n//# sourceMappingURL=App.js.map","import { __extends } from \"tslib\";\n/**\n */\nvar QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerAlreadyReleasedError, _super);\n function QueryRunnerAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerAlreadyReleasedError.prototype);\n _this.message = \"Query runner already released. Cannot run queries anymore.\";\n return _this;\n }\n return QueryRunnerAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerAlreadyReleasedError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { CannotCreateEntityIdMapError } from \"../error/CannotCreateEntityIdMapError\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Contains all entity metadata.\n */\nvar EntityMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityMetadata(options) {\n /**\n * Children entity metadatas. Used in inheritance patterns.\n */\n this.childEntityMetadatas = [];\n /**\n * All \"inheritance tree\" from a target entity.\n * For example for target Post < ContentModel < Unit it will be an array of [Post, ContentModel, Unit].\n * It also contains child entities for single table inheritance.\n */\n this.inheritanceTree = [];\n /**\n * Table type. Tables can be abstract, closure, junction, embedded, etc.\n */\n this.tableType = \"regular\";\n /**\n * Enables Sqlite \"WITHOUT ROWID\" modifier for the \"CREATE TABLE\" statement\n */\n this.withoutRowid = false;\n /**\n * Indicates if schema will be synchronized for this entity or not.\n */\n this.synchronize = true;\n /**\n * Checks if there any non-nullable column exist in this entity.\n */\n this.hasNonNullableRelations = false;\n /**\n * Indicates if this entity metadata of a junction table, or not.\n * Junction table is a table created by many-to-many relationship.\n *\n * Its also possible to understand if entity is junction via tableType.\n */\n this.isJunction = false;\n /**\n * Checks if this table is a junction table of the closure table.\n * This type is for tables that contain junction metadata of the closure tables.\n */\n this.isClosureJunction = false;\n /**\n * Checks if entity's table has multiple primary columns.\n */\n this.hasMultiplePrimaryKeys = false;\n /**\n * Indicates if this entity metadata has uuid generated columns.\n */\n this.hasUUIDGeneratedColumns = false;\n /**\n * Entity's column metadatas defined by user.\n */\n this.ownColumns = [];\n /**\n * Columns of the entity, including columns that are coming from the embeddeds of this entity.\n */\n this.columns = [];\n /**\n * Ancestor columns used only in closure junction tables.\n */\n this.ancestorColumns = [];\n /**\n * Descendant columns used only in closure junction tables.\n */\n this.descendantColumns = [];\n /**\n * All columns except for virtual columns.\n */\n this.nonVirtualColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of owner entity.\n */\n this.ownerColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of inverse entity.\n */\n this.inverseColumns = [];\n /**\n * Gets the column with generated flag.\n */\n this.generatedColumns = [];\n /**\n * Gets the primary columns.\n */\n this.primaryColumns = [];\n /**\n * Entity's relation metadatas.\n */\n this.ownRelations = [];\n /**\n * Relations of the entity, including relations that are coming from the embeddeds of this entity.\n */\n this.relations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.eagerRelations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.lazyRelations = [];\n /**\n * Gets only one-to-one relations of the entity.\n */\n this.oneToOneRelations = [];\n /**\n * Gets only owner one-to-one relations of the entity.\n */\n this.ownerOneToOneRelations = [];\n /**\n * Gets only one-to-many relations of the entity.\n */\n this.oneToManyRelations = [];\n /**\n * Gets only many-to-one relations of the entity.\n */\n this.manyToOneRelations = [];\n /**\n * Gets only many-to-many relations of the entity.\n */\n this.manyToManyRelations = [];\n /**\n * Gets only owner many-to-many relations of the entity.\n */\n this.ownerManyToManyRelations = [];\n /**\n * Gets only owner one-to-one and many-to-one relations.\n */\n this.relationsWithJoinColumns = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationIds = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationCounts = [];\n /**\n * Entity's foreign key metadatas.\n */\n this.foreignKeys = [];\n /**\n * Entity's embedded metadatas.\n */\n this.embeddeds = [];\n /**\n * All embeddeds - embeddeds from this entity metadata and from all child embeddeds, etc.\n */\n this.allEmbeddeds = [];\n /**\n * Entity's own indices.\n */\n this.ownIndices = [];\n /**\n * Entity's index metadatas.\n */\n this.indices = [];\n /**\n * Entity's unique metadatas.\n */\n this.uniques = [];\n /**\n * Entity's own uniques.\n */\n this.ownUniques = [];\n /**\n * Entity's check metadatas.\n */\n this.checks = [];\n /**\n * Entity's exclusion metadatas.\n */\n this.exclusions = [];\n /**\n * Entity's own listener metadatas.\n */\n this.ownListeners = [];\n /**\n * Entity listener metadatas.\n */\n this.listeners = [];\n /**\n * Listener metadatas with \"AFTER LOAD\" type.\n */\n this.afterLoadListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.beforeInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.afterInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.beforeUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.afterUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.beforeRemoveListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.afterRemoveListeners = [];\n this.connection = options.connection;\n this.inheritanceTree = options.inheritanceTree || [];\n this.inheritancePattern = options.inheritancePattern;\n this.treeType = options.tableTree ? options.tableTree.type : undefined;\n this.treeOptions = options.tableTree ? options.tableTree.options : undefined;\n this.parentClosureEntityMetadata = options.parentClosureEntityMetadata;\n this.tableMetadataArgs = options.args;\n this.target = this.tableMetadataArgs.target;\n this.tableType = this.tableMetadataArgs.type;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new entity.\n */\n EntityMetadata.prototype.create = function (queryRunner) {\n var _this = this;\n // if target is set to a function (e.g. class) that can be created then create it\n var ret;\n if (this.target instanceof Function) {\n ret = new this.target();\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, ret, queryRunner); });\n return ret;\n }\n // otherwise simply return a new empty object\n var newObject = {};\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, newObject, queryRunner); });\n return newObject;\n };\n /**\n * Checks if given entity has an id.\n */\n EntityMetadata.prototype.hasId = function (entity) {\n if (!entity)\n return false;\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined && value !== \"\";\n });\n };\n /**\n * Checks if given entity / object contains ALL primary keys entity must have.\n * Returns true if it contains all of them, false if at least one of them is not defined.\n */\n EntityMetadata.prototype.hasAllPrimaryKeys = function (entity) {\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined;\n });\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n EntityMetadata.prototype.ensureEntityIdMap = function (id) {\n if (id instanceof Object)\n return id;\n if (this.hasMultiplePrimaryKeys)\n throw new CannotCreateEntityIdMapError(this, id);\n return this.primaryColumns[0].createValueMap(id);\n };\n /**\n * Gets primary keys of the entity and returns them in a literal object.\n * For example, for Post{ id: 1, title: \"hello\" } where id is primary it will return { id: 1 }\n * For multiple primary keys it returns multiple keys in object.\n * For primary keys inside embeds it returns complex object literal with keys in them.\n */\n EntityMetadata.prototype.getEntityIdMap = function (entity) {\n if (!entity)\n return undefined;\n return EntityMetadata.getValueMap(entity, this.primaryColumns, { skipNulls: true });\n };\n /**\n * Creates a \"mixed id map\".\n * If entity has multiple primary keys (ids) then it will return just regular id map, like what getEntityIdMap returns.\n * But if entity has a single primary key then it will return just value of the id column of the entity, just value.\n * This is called mixed id map.\n */\n EntityMetadata.prototype.getEntityIdMixedMap = function (entity) {\n if (!entity)\n return entity;\n var idMap = this.getEntityIdMap(entity);\n if (this.hasMultiplePrimaryKeys) {\n return idMap;\n }\n else if (idMap) {\n return this.primaryColumns[0].getEntityValue(idMap); // todo: what about parent primary column?\n }\n return idMap;\n };\n /**\n * Compares two different entities by their ids.\n * Returns true if they match, false otherwise.\n */\n EntityMetadata.prototype.compareEntities = function (firstEntity, secondEntity) {\n var firstEntityIdMap = this.getEntityIdMap(firstEntity);\n if (!firstEntityIdMap)\n return false;\n var secondEntityIdMap = this.getEntityIdMap(secondEntity);\n if (!secondEntityIdMap)\n return false;\n return OrmUtils.compareIds(firstEntityIdMap, secondEntityIdMap);\n };\n /**\n * Finds column with a given property name.\n */\n EntityMetadata.prototype.findColumnWithPropertyName = function (propertyName) {\n return this.columns.find(function (column) { return column.propertyName === propertyName; });\n };\n /**\n * Finds column with a given database name.\n */\n EntityMetadata.prototype.findColumnWithDatabaseName = function (databaseName) {\n return this.columns.find(function (column) { return column.databaseName === databaseName; });\n };\n /**\n * Finds column with a given property path.\n */\n EntityMetadata.prototype.findColumnWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return column;\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns.length === 1)\n return relation.joinColumns[0];\n return undefined;\n };\n /**\n * Finds columns with a given property path.\n * Property path can match a relation, and relations can contain multiple columns.\n */\n EntityMetadata.prototype.findColumnsWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return [column];\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns)\n return relation.joinColumns;\n return [];\n };\n /**\n * Finds relation with the given property path.\n */\n EntityMetadata.prototype.findRelationWithPropertyPath = function (propertyPath) {\n return this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n };\n /**\n * Checks if there is an embedded with a given property path.\n */\n EntityMetadata.prototype.hasEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.some(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Finds embedded with a given property path.\n */\n EntityMetadata.prototype.findEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.find(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Iterates through entity and finds and extracts all values from relations in the entity.\n * If relation value is an array its being flattened.\n */\n EntityMetadata.prototype.extractRelationValuesFromEntity = function (entity, relations) {\n var _this = this;\n var relationsAndValues = [];\n relations.forEach(function (relation) {\n var value = relation.getEntityValue(entity);\n if (Array.isArray(value)) {\n value.forEach(function (subValue) { return relationsAndValues.push([relation, subValue, _this.getInverseEntityMetadata(subValue, relation)]); });\n }\n else if (value) {\n relationsAndValues.push([relation, value, _this.getInverseEntityMetadata(value, relation)]);\n }\n });\n return relationsAndValues;\n };\n EntityMetadata.prototype.getInverseEntityMetadata = function (value, relation) {\n var childEntityMetadata = relation.inverseEntityMetadata.childEntityMetadatas.find(function (metadata) {\n return metadata.target === value.constructor;\n });\n return childEntityMetadata ? childEntityMetadata : relation.inverseEntityMetadata;\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a property paths for a given entity.\n */\n EntityMetadata.createPropertyPath = function (metadata, entity, prefix) {\n var _this = this;\n if (prefix === void 0) { prefix = \"\"; }\n var paths = [];\n Object.keys(entity).forEach(function (key) {\n // check for function is needed in the cases when createPropertyPath used on values containg a function as a value\n // example: .update().set({ name: () => `SUBSTR('', 1, 2)` })\n var parentPath = prefix ? prefix + \".\" + key : key;\n if (metadata.hasEmbeddedWithPropertyPath(parentPath)) {\n var subPaths = _this.createPropertyPath(metadata, entity[key], parentPath);\n paths.push.apply(paths, __spreadArray([], __read(subPaths)));\n }\n else {\n var path = prefix ? prefix + \".\" + key : key;\n paths.push(path);\n }\n });\n return paths;\n };\n /**\n * Finds difference between two entity id maps.\n * Returns items that exist in the first array and absent in the second array.\n */\n EntityMetadata.difference = function (firstIdMaps, secondIdMaps) {\n return firstIdMaps.filter(function (firstIdMap) {\n return !secondIdMaps.find(function (secondIdMap) { return OrmUtils.compareIds(firstIdMap, secondIdMap); });\n });\n };\n /**\n * Creates value map from the given values and columns.\n * Examples of usages are primary columns map and join columns map.\n */\n EntityMetadata.getValueMap = function (entity, columns, options) {\n return columns.reduce(function (map, column) {\n var value = column.getEntityValueMap(entity, options);\n // make sure that none of the values of the columns are not missing\n if (map === undefined || value === null || value === undefined)\n return undefined;\n return column.isObjectId ? Object.assign(map, value) : OrmUtils.mergeDeep(map, value);\n }, {});\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n EntityMetadata.prototype.build = function () {\n var namingStrategy = this.connection.namingStrategy;\n var entityPrefix = this.connection.options.entityPrefix;\n this.engine = this.tableMetadataArgs.engine;\n this.database = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.database : this.tableMetadataArgs.database;\n if (this.tableMetadataArgs.schema) {\n this.schema = this.tableMetadataArgs.schema;\n }\n else if ((this.tableMetadataArgs.type === \"entity-child\") && this.parentEntityMetadata) {\n this.schema = this.parentEntityMetadata.schema;\n }\n else {\n this.schema = this.connection.options.schema;\n }\n this.givenTableName = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.givenTableName : this.tableMetadataArgs.name;\n this.synchronize = this.tableMetadataArgs.synchronize === false ? false : true;\n this.targetName = this.tableMetadataArgs.target instanceof Function ? this.tableMetadataArgs.target.name : this.tableMetadataArgs.target;\n if (this.tableMetadataArgs.type === \"closure-junction\") {\n this.tableNameWithoutPrefix = namingStrategy.closureJunctionTableName(this.givenTableName);\n }\n else if (this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata) {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.parentEntityMetadata.targetName, this.parentEntityMetadata.givenTableName);\n }\n else {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.targetName, this.givenTableName);\n if (this.connection.driver.maxAliasLength && this.connection.driver.maxAliasLength > 0 && this.tableNameWithoutPrefix.length > this.connection.driver.maxAliasLength) {\n this.tableNameWithoutPrefix = shorten(this.tableNameWithoutPrefix, { separator: \"_\", segmentLength: 3 });\n }\n }\n this.tableName = entityPrefix ? namingStrategy.prefixTableName(entityPrefix, this.tableNameWithoutPrefix) : this.tableNameWithoutPrefix;\n this.target = this.target ? this.target : this.tableName;\n this.name = this.targetName ? this.targetName : this.tableName;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid === true ? true : false;\n this.tablePath = this.buildTablePath();\n this.schemaPath = this.buildSchemaPath();\n this.orderBy = (this.tableMetadataArgs.orderBy instanceof Function) ? this.tableMetadataArgs.orderBy(this.propertiesMap) : this.tableMetadataArgs.orderBy; // todo: is propertiesMap available here? Looks like its not\n this.isJunction = this.tableMetadataArgs.type === \"closure-junction\" || this.tableMetadataArgs.type === \"junction\";\n this.isClosureJunction = this.tableMetadataArgs.type === \"closure-junction\";\n };\n /**\n * Registers a new column in the entity and recomputes all depend properties.\n */\n EntityMetadata.prototype.registerColumn = function (column) {\n if (this.ownColumns.indexOf(column) !== -1)\n return;\n this.ownColumns.push(column);\n this.columns = this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, this.ownColumns);\n this.primaryColumns = this.columns.filter(function (column) { return column.isPrimary; });\n this.hasMultiplePrimaryKeys = this.primaryColumns.length > 1;\n this.hasUUIDGeneratedColumns = this.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n this.propertiesMap = this.createPropertiesMap();\n if (this.childEntityMetadatas)\n this.childEntityMetadatas.forEach(function (entityMetadata) { return entityMetadata.registerColumn(column); });\n };\n /**\n * Creates a special object - all columns and relations of the object (plus columns and relations from embeds)\n * in a special format - { propertyName: propertyName }.\n *\n * example: Post{ id: number, name: string, counterEmbed: { count: number }, category: Category }.\n * This method will create following object:\n * { id: \"id\", counterEmbed: { count: \"counterEmbed.count\" }, category: \"category\" }\n */\n EntityMetadata.prototype.createPropertiesMap = function () {\n var map = {};\n this.columns.forEach(function (column) { return OrmUtils.mergeDeep(map, column.createValueMap(column.propertyPath)); });\n this.relations.forEach(function (relation) { return OrmUtils.mergeDeep(map, relation.createValueMap(relation.propertyPath)); });\n return map;\n };\n /**\n * Builds table path using database name, schema name and table name.\n */\n EntityMetadata.prototype.buildTablePath = function () {\n var tablePath = this.tableName;\n if (this.schema && ((this.connection.driver instanceof OracleDriver) || (this.connection.driver instanceof PostgresDriver) || (this.connection.driver instanceof SqlServerDriver) || (this.connection.driver instanceof SapDriver))) {\n tablePath = this.schema + \".\" + tablePath;\n }\n if (this.database && !(this.connection.driver instanceof PostgresDriver)) {\n if (!this.schema && this.connection.driver instanceof SqlServerDriver) {\n tablePath = this.database + \"..\" + tablePath;\n }\n else {\n tablePath = this.database + \".\" + tablePath;\n }\n }\n return tablePath;\n };\n /**\n * Builds table path using schema name and database name.\n */\n EntityMetadata.prototype.buildSchemaPath = function () {\n if (!this.schema)\n return undefined;\n return this.database && !(this.connection.driver instanceof PostgresDriver) ? this.database + \".\" + this.schema : this.schema;\n };\n return EntityMetadata;\n}());\nexport { EntityMetadata };\n\n//# sourceMappingURL=EntityMetadata.js.map\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","import { __extends } from \"tslib\";\n/**\n * Thrown if some required driver's option is not set.\n */\nvar DriverOptionNotSetError = /** @class */ (function (_super) {\n __extends(DriverOptionNotSetError, _super);\n function DriverOptionNotSetError(optionName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverOptionNotSetError\";\n Object.setPrototypeOf(_this, DriverOptionNotSetError.prototype);\n _this.message = \"Driver option (\" + optionName + \") is not set. Please set it to perform connection to the database.\";\n return _this;\n }\n return DriverOptionNotSetError;\n}(Error));\nexport { DriverOptionNotSetError };\n\n//# sourceMappingURL=DriverOptionNotSetError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table index stored in this class.\n */\nvar TableIndex = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableIndex(options) {\n /**\n * Columns included in this index.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.isUnique = !!options.isUnique;\n this.isSpatial = !!options.isSpatial;\n this.isFulltext = !!options.isFulltext;\n this.parser = options.parser;\n this.where = options.where ? options.where : \"\";\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this index with exactly same properties.\n */\n TableIndex.prototype.clone = function () {\n return new TableIndex({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n isUnique: this.isUnique,\n isSpatial: this.isSpatial,\n isFulltext: this.isFulltext,\n parser: this.parser,\n where: this.where\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates index from the index metadata object.\n */\n TableIndex.create = function (indexMetadata) {\n return new TableIndex({\n name: indexMetadata.name,\n columnNames: indexMetadata.columns.map(function (column) { return column.databaseName; }),\n isUnique: indexMetadata.isUnique,\n isSpatial: indexMetadata.isSpatial,\n isFulltext: indexMetadata.isFulltext,\n parser: indexMetadata.parser,\n where: indexMetadata.where\n });\n };\n return TableIndex;\n}());\nexport { TableIndex };\n\n//# sourceMappingURL=TableIndex.js.map\n","import { __assign, __extends } from \"tslib\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Thrown when query execution has failed.\n*/\nvar QueryFailedError = /** @class */ (function (_super) {\n __extends(QueryFailedError, _super);\n function QueryFailedError(query, parameters, driverError) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, QueryFailedError.prototype);\n _this.message = driverError.toString()\n .replace(/^error: /, \"\")\n .replace(/^Error: /, \"\")\n .replace(/^Request/, \"\");\n ObjectUtils.assign(_this, __assign(__assign({}, driverError), { name: \"QueryFailedError\", query: query, parameters: parameters || [] }));\n return _this;\n }\n return QueryFailedError;\n}(Error));\nexport { QueryFailedError };\n\n//# sourceMappingURL=QueryFailedError.js.map\n","import { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n */\nvar Alias = /** @class */ (function () {\n function Alias(alias) {\n ObjectUtils.assign(this, alias || {});\n }\n Object.defineProperty(Alias.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"hasMetadata\", {\n get: function () {\n return !!this._metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"metadata\", {\n get: function () {\n if (!this._metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.name + \"\\\"\");\n return this._metadata;\n },\n set: function (metadata) {\n this._metadata = metadata;\n },\n enumerable: false,\n configurable: true\n });\n return Alias;\n}());\nexport { Alias };\n\n//# sourceMappingURL=Alias.js.map\n","import { __assign, __read } from \"tslib\";\nimport { Alias } from \"./Alias\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nvar QueryExpressionMap = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryExpressionMap(connection) {\n this.connection = connection;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n this.queryEntity = false;\n /**\n * All aliases (including main alias) used in the query.\n */\n this.aliases = [];\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n this.queryType = \"select\";\n /**\n * Data needs to be SELECT-ed.\n */\n this.selects = [];\n /**\n * Whether SELECT is DISTINCT.\n */\n this.selectDistinct = false;\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n this.selectDistinctOn = [];\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n this.extraReturningColumns = [];\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n this.onConflict = \"\";\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n this.onIgnore = false;\n /**\n * JOIN queries.\n */\n this.joinAttributes = [];\n /**\n * RelationId queries.\n */\n this.relationIdAttributes = [];\n /**\n * Relation count queries.\n */\n this.relationCountAttributes = [];\n /**\n * WHERE queries.\n */\n this.wheres = [];\n /**\n * HAVING queries.\n */\n this.havings = [];\n /**\n * ORDER BY queries.\n */\n this.orderBys = {};\n /**\n * GROUP BY queries.\n */\n this.groupBys = [];\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n this.withDeleted = false;\n /**\n * Parameters used to be escaped in final query.\n */\n this.parameters = {};\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n this.disableEscaping = true;\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n this.enableRelationIdValues = false;\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n this.extraAppendedAndWhereCondition = \"\";\n /**\n * Indicates if query builder creates a subquery.\n */\n this.subQuery = false;\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n this.aliasNamePrefixingEnabled = true;\n /**\n * Indicates if query result cache is enabled or not.\n */\n this.cache = false;\n /**\n * Options that define QueryBuilder behaviour.\n */\n this.options = [];\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n this.insertColumns = [];\n /**\n * Used if user wants to update or delete a specific entities.\n */\n this.whereEntities = [];\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n this.updateEntity = true;\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n this.callListeners = true;\n /**\n * Indicates if query must be wrapped into transaction.\n */\n this.useTransaction = false;\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n this.nativeParameters = {};\n }\n Object.defineProperty(QueryExpressionMap.prototype, \"allOrderBys\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get: function () {\n var _this = this;\n if (!Object.keys(this.orderBys).length && this.mainAlias.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n var entityOrderBy_1 = this.mainAlias.metadata.orderBy || {};\n return Object.keys(entityOrderBy_1).reduce(function (orderBy, key) {\n orderBy[_this.mainAlias.name + \".\" + key] = entityOrderBy_1[key];\n return orderBy;\n }, {});\n }\n return this.orderBys;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.setMainAlias = function (alias) {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n // set new main alias\n this.mainAlias = alias;\n return alias;\n };\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.createAlias = function (options) {\n var aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n var alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n this.aliases.push(alias);\n return alias;\n };\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n QueryExpressionMap.prototype.findAliasByName = function (aliasName) {\n var alias = this.aliases.find(function (alias) { return alias.name === aliasName; });\n if (!alias)\n throw new Error(\"\\\"\" + aliasName + \"\\\" alias was not found. Maybe you forgot to join it?\");\n return alias;\n };\n QueryExpressionMap.prototype.findColumnByAliasExpression = function (aliasExpression) {\n var _a = __read(aliasExpression.split(\".\"), 2), aliasName = _a[0], propertyPath = _a[1];\n var alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n };\n Object.defineProperty(QueryExpressionMap.prototype, \"relationMetadata\", {\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get: function () {\n if (!this.mainAlias)\n throw new Error(\"Entity to work with is not specified!\"); // todo: better message\n var relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \" + this.relationPropertyPath + \" was not found in entity \" + this.mainAlias.name); // todo: better message\n return relationMetadata;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n QueryExpressionMap.prototype.clone = function () {\n var _this = this;\n var map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(function (select) { return select; });\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(function (alias) { return map.aliases.push(new Alias(alias)); });\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(function (join) { return new JoinAttribute(_this.connection, _this, join); });\n map.relationIdAttributes = this.relationIdAttributes.map(function (relationId) { return new RelationIdAttribute(_this, relationId); });\n map.relationCountAttributes = this.relationCountAttributes.map(function (relationCount) { return new RelationCountAttribute(_this, relationCount); });\n map.wheres = this.wheres.map(function (where) { return (__assign({}, where)); });\n map.havings = this.havings.map(function (having) { return (__assign({}, having)); });\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(function (groupBy) { return groupBy; });\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.lockTables = this.lockTables;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n map.comment = this.comment;\n return map;\n };\n return QueryExpressionMap;\n}());\nexport { QueryExpressionMap };\n\n//# sourceMappingURL=QueryExpressionMap.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { QueryExpressionMap } from \"./QueryExpressionMap\";\nimport { Brackets } from \"./Brackets\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { EntitySchema } from \"../\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { In } from \"../find-options/operator/In\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar QueryBuilder = /** @class */ (function () {\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n function QueryBuilder(connectionOrQueryBuilder, queryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n }\n else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n Object.defineProperty(QueryBuilder.prototype, \"alias\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the main alias string used in this query builder.\n */\n get: function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Main alias is not set\"); // todo: better exception\n return this.expressionMap.mainAlias.name;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n QueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n // loading it dynamically because of circular issue\n var SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this;\n return new SelectQueryBuilderCls(this);\n };\n /**\n * Creates INSERT query.\n */\n QueryBuilder.prototype.insert = function () {\n this.expressionMap.queryType = \"insert\";\n // loading it dynamically because of circular issue\n var InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this;\n return new InsertQueryBuilderCls(this);\n };\n /**\n * Creates UPDATE query and applies given update values.\n */\n QueryBuilder.prototype.update = function (entityOrTableNameUpdateSet, maybeUpdateSet) {\n var updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n var mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n // loading it dynamically because of circular issue\n var UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this;\n return new UpdateQueryBuilderCls(this);\n };\n /**\n * Creates DELETE query.\n */\n QueryBuilder.prototype.delete = function () {\n this.expressionMap.queryType = \"delete\";\n // loading it dynamically because of circular issue\n var DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this;\n return new DeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.softDelete = function () {\n this.expressionMap.queryType = \"soft-delete\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.restore = function () {\n this.expressionMap.queryType = \"restore\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n QueryBuilder.prototype.relation = function (entityTargetOrPropertyPath, maybePropertyPath) {\n var entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n var propertyPath = arguments.length === 2 ? maybePropertyPath : entityTargetOrPropertyPath;\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n if (entityTarget) {\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n // loading it dynamically because of circular issue\n var RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this;\n return new RelationQueryBuilderCls(this);\n };\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n QueryBuilder.prototype.hasRelation = function (target, relation) {\n var entityMetadata = this.connection.getMetadata(target);\n var relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(function (relation) {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n };\n /**\n * Sets parameter name and its value.\n */\n QueryBuilder.prototype.setParameter = function (key, value) {\n this.expressionMap.parameters[key] = value;\n return this;\n };\n /**\n * Adds all parameters from the given object.\n */\n QueryBuilder.prototype.setParameters = function (parameters) {\n var _this = this;\n // remove function parameters\n Object.keys(parameters).forEach(function (key) {\n if (parameters[key] instanceof Function) {\n throw new Error(\"Function parameter isn't supported in the parameters. Please check \\\"\" + key + \"\\\" parameter.\");\n }\n });\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n Object.keys(parameters).forEach(function (key) { return _this.setParameter(key, parameters[key]); });\n return this;\n };\n /**\n * Adds native parameters from the given object.\n */\n QueryBuilder.prototype.setNativeParameters = function (parameters) {\n var _this = this;\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n Object.keys(parameters).forEach(function (key) {\n _this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n };\n /**\n * Gets all parameters.\n */\n QueryBuilder.prototype.getParameters = function () {\n var parameters = Object.assign({}, this.expressionMap.parameters);\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var values = metadata.childEntityMetadatas\n .filter(function (childMetadata) { return childMetadata.discriminatorColumn; })\n .map(function (childMetadata) { return childMetadata.discriminatorValue; });\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n return parameters;\n };\n /**\n * Prints sql to stdout using console.log.\n */\n QueryBuilder.prototype.printSql = function () {\n var _a = __read(this.getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n this.connection.logger.logQuery(query, parameters);\n return this;\n };\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n QueryBuilder.prototype.getSql = function () {\n return this.getQueryAndParameters()[0];\n };\n /**\n * Gets query to be executed with all parameters used in it.\n */\n QueryBuilder.prototype.getQueryAndParameters = function () {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n var query = this.getQuery();\n var parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n QueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 3, 8]);\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 2: return [2 /*return*/, _b.sent()]; // await is needed here because we are using finally\n case 3:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n if (!(this.connection.driver instanceof SqljsDriver)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 6:\n _b.sent();\n _b.label = 7;\n case 7: return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n QueryBuilder.prototype.createQueryBuilder = function () {\n return new this.constructor(this.connection, this.queryRunner);\n };\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n QueryBuilder.prototype.clone = function () {\n return new this.constructor(this);\n };\n /**\n * Includes a Query comment in the query builder. This is helpful for debugging purposes,\n * such as finding a specific query in the database server's logs, or for categorization using\n * an APM product.\n */\n QueryBuilder.prototype.comment = function (comment) {\n this.expressionMap.comment = comment;\n return this;\n };\n /**\n * Disables escaping.\n */\n QueryBuilder.prototype.disableEscaping = function () {\n this.expressionMap.disableEscaping = false;\n return this;\n };\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n QueryBuilder.prototype.escape = function (name) {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n };\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n QueryBuilder.prototype.setQueryRunner = function (queryRunner) {\n this.queryRunner = queryRunner;\n return this;\n };\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n QueryBuilder.prototype.callListeners = function (enabled) {\n this.expressionMap.callListeners = enabled;\n return this;\n };\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n QueryBuilder.prototype.useTransaction = function (enabled) {\n this.expressionMap.useTransaction = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n QueryBuilder.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.escape(i);\n }).join(\".\");\n };\n /**\n * Gets name of the table where insert should be performed.\n */\n QueryBuilder.prototype.getMainTableName = function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Entity where values should be inserted is not specified. Call \\\"qb.into(entity)\\\" method to specify it.\");\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n return this.expressionMap.mainAlias.tablePath;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n QueryBuilder.prototype.createFromAlias = function (entityTarget, aliasName) {\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n var metadata = this.connection.getMetadata(entityTarget);\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n }\n else {\n if (typeof entityTarget === \"string\") {\n var isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n var subQueryBuilder = entityTarget(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n var subquery = subQueryBuilder.getQuery();\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n };\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n QueryBuilder.prototype.replacePropertyNames = function (statement) {\n var e_1, _a;\n var _this = this;\n // Escape special characters in regular expressions\n // Per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n var escapeRegExp = function (s) { return s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); };\n var _loop_1 = function (alias) {\n var e_2, _d, e_3, _e, e_4, _f, e_5, _g, e_6, _h, e_7, _j;\n if (!alias.hasMetadata)\n return \"continue\";\n var replaceAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? alias.name + \".\" : \"\";\n var replacementAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? this_1.escape(alias.name) + \".\" : \"\";\n var replacements = {};\n try {\n // Insert & overwrite the replacements from least to most relevant in our replacements object.\n // To do this we iterate and overwrite in the order of relevance.\n // Least to Most Relevant:\n // * Relation Property Path to first join column key\n // * Relation Property Path + Column Path\n // * Column Database Name\n // * Column Propety Name\n // * Column Property Path\n for (var _k = (e_2 = void 0, __values(alias.metadata.relations)), _l = _k.next(); !_l.done; _l = _k.next()) {\n var relation = _l.value;\n if (relation.joinColumns.length > 0)\n replacements[relation.propertyPath] = relation.joinColumns[0].databaseName;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_d = _k.return)) _d.call(_k);\n }\n finally { if (e_2) throw e_2.error; }\n }\n try {\n for (var _m = (e_3 = void 0, __values(alias.metadata.relations)), _o = _m.next(); !_o.done; _o = _m.next()) {\n var relation = _o.value;\n try {\n for (var _p = (e_4 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns)), __read(relation.inverseJoinColumns)))), _q = _p.next(); !_q.done; _q = _p.next()) {\n var joinColumn = _q.value;\n var propertyKey = relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n replacements[propertyKey] = joinColumn.databaseName;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_q && !_q.done && (_f = _p.return)) _f.call(_p);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_e = _m.return)) _e.call(_m);\n }\n finally { if (e_3) throw e_3.error; }\n }\n try {\n for (var _r = (e_5 = void 0, __values(alias.metadata.columns)), _s = _r.next(); !_s.done; _s = _r.next()) {\n var column = _s.value;\n replacements[column.databaseName] = column.databaseName;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_s && !_s.done && (_g = _r.return)) _g.call(_r);\n }\n finally { if (e_5) throw e_5.error; }\n }\n try {\n for (var _t = (e_6 = void 0, __values(alias.metadata.columns)), _u = _t.next(); !_u.done; _u = _t.next()) {\n var column = _u.value;\n replacements[column.propertyName] = column.databaseName;\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_u && !_u.done && (_h = _t.return)) _h.call(_t);\n }\n finally { if (e_6) throw e_6.error; }\n }\n try {\n for (var _v = (e_7 = void 0, __values(alias.metadata.columns)), _w = _v.next(); !_w.done; _w = _v.next()) {\n var column = _w.value;\n replacements[column.propertyPath] = column.databaseName;\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (_w && !_w.done && (_j = _v.return)) _j.call(_v);\n }\n finally { if (e_7) throw e_7.error; }\n }\n var replacementKeys = Object.keys(replacements);\n if (replacementKeys.length) {\n statement = statement.replace(new RegExp(\n // Avoid a lookbehind here since it's not well supported\n \"([ =(]|^.{0})\" +\n (escapeRegExp(replaceAliasNamePrefix) + \"(\" + replacementKeys.map(escapeRegExp).join(\"|\") + \")\") +\n \"(?=[ =),]|.{0}$)\", \"gm\"), function (_, pre, p) {\n return \"\" + pre + replacementAliasNamePrefix + _this.escape(replacements[p]);\n });\n }\n };\n var this_1 = this;\n try {\n for (var _b = __values(this.expressionMap.aliases), _c = _b.next(); !_c.done; _c = _b.next()) {\n var alias = _c.value;\n _loop_1(alias);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return statement;\n };\n QueryBuilder.prototype.createComment = function () {\n if (!this.expressionMap.comment) {\n return \"\";\n }\n // ANSI SQL 2003 support C style comments - comments that start with `/*` and end with `*/`\n // In some dialects query nesting is available - but not all. Because of this, we'll need\n // to scrub \"ending\" characters from the SQL but otherwise we can leave everything else\n // as-is and it should be valid.\n return \"/* \" + this.expressionMap.comment.replace(\"*/\", \"\") + \" */ \";\n };\n /**\n * Creates \"WHERE\" expression.\n */\n QueryBuilder.prototype.createWhereExpression = function () {\n var conditionsArray = [];\n var whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n var condition = this.replacePropertyNames(column) + \" IS NULL\";\n conditionsArray.push(condition);\n }\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n var condition = this.replacePropertyNames(column) + \" IN (:...discriminatorColumnValues)\";\n conditionsArray.push(condition);\n }\n }\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n var condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n if (!conditionsArray.length) {\n return \"\";\n }\n else if (conditionsArray.length === 1) {\n return \" WHERE \" + conditionsArray[0];\n }\n else {\n return \" WHERE ( \" + conditionsArray.join(\" ) AND ( \") + \" )\";\n }\n };\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n QueryBuilder.prototype.createReturningExpression = function () {\n var _this = this;\n var columns = this.getReturningColumns();\n var driver = this.connection.driver;\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push.apply(columns, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (column) {\n return columns.indexOf(column) === -1;\n }))));\n }\n if (columns.length) {\n var columnsExpression = columns.map(function (column) {\n var name = _this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (_this.expressionMap.queryType === \"insert\" || _this.expressionMap.queryType === \"update\" || _this.expressionMap.queryType === \"soft-delete\" || _this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n }\n else {\n return _this.escape(_this.getMainTableName()) + \".\" + name;\n }\n }\n else {\n return name;\n }\n }).join(\", \");\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(function (column) {\n var parameterName = \"output_\" + column.databaseName;\n _this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return _this.connection.driver.createParameter(parameterName, Object.keys(_this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n return columnsExpression;\n }\n else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n return \"\";\n };\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n QueryBuilder.prototype.getReturningColumns = function () {\n var _this = this;\n var columns = [];\n if (Array.isArray(this.expressionMap.returning)) {\n this.expressionMap.returning.forEach(function (columnName) {\n if (_this.expressionMap.mainAlias.hasMetadata) {\n columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName))));\n }\n });\n }\n return columns;\n };\n /**\n * Concatenates all added where expressions into one string.\n */\n QueryBuilder.prototype.createWhereExpressionString = function () {\n var _this = this;\n return this.expressionMap.wheres.map(function (where, index) {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(where.condition);\n default:\n return _this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n };\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n QueryBuilder.prototype.createWhereIdsExpression = function (ids) {\n var _a;\n var _this = this;\n var metadata = this.expressionMap.mainAlias.metadata;\n var normalized = (Array.isArray(ids) ? ids : [ids]).map(function (id) { return metadata.ensureEntityIdMap(id); });\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0) {\n var primaryColumn_1 = metadata.primaryColumns[0];\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn_1.transformer) {\n return this.computeWhereParameter((_a = {},\n _a[primaryColumn_1.propertyName] = In(normalized.map(function (id) { return primaryColumn_1.getEntityValue(id, false); })),\n _a));\n }\n }\n // create shortcuts for better readability\n var alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias.name) + \".\" : \"\";\n var parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n var whereStrings = normalized.map(function (id, index) {\n var whereSubStrings = [];\n metadata.primaryColumns.forEach(function (primaryColumn, secondIndex) {\n var parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + _this.escape(primaryColumn.databaseName) + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex));\n _this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(function (whereString) { return \"(\" + whereString + \")\"; }).join(\" OR \") + \")\"\n : whereStrings[0];\n };\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n QueryBuilder.prototype.computeWhereParameter = function (where) {\n var _this = this;\n if (typeof where === \"string\")\n return where;\n if (where instanceof Brackets) {\n var whereQueryBuilder = this.createQueryBuilder();\n whereQueryBuilder.expressionMap.mainAlias = this.expressionMap.mainAlias;\n whereQueryBuilder.expressionMap.aliasNamePrefixingEnabled = this.expressionMap.aliasNamePrefixingEnabled;\n whereQueryBuilder.expressionMap.nativeParameters = this.expressionMap.nativeParameters;\n where.whereFactory(whereQueryBuilder);\n var whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n }\n else if (where instanceof Function) {\n return where(this);\n }\n else if (where instanceof Object) {\n var wheres = Array.isArray(where) ? where : [where];\n var andConditions = void 0;\n var parameterIndex_1 = Object.keys(this.expressionMap.nativeParameters).length;\n if (this.expressionMap.mainAlias.hasMetadata) {\n andConditions = wheres.map(function (where, whereIndex) {\n var propertyPaths = EntityMetadata.createPropertyPath(_this.expressionMap.mainAlias.metadata, where);\n return propertyPaths.map(function (propertyPath, propertyIndex) {\n var columns = _this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(propertyPath);\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n return columns.map(function (column, columnIndex) {\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + propertyPath : column.propertyPath;\n var parameterValue = column.getEntityValue(where, true);\n var parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n var parameterBaseCount = Object.keys(_this.expressionMap.nativeParameters).filter(function (x) { return x.startsWith(parameterName); }).length;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else if (parameterValue instanceof FindOperator) {\n var parameters_1 = [];\n if (parameterValue.useParameter) {\n if (parameterValue.objectLiteralParameters) {\n _this.setParameters(parameterValue.objectLiteralParameters);\n }\n else {\n var realParameterValues = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach(function (realParameterValue, realParameterValueIndex) {\n _this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex_1++;\n parameters_1.push(_this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex_1 - 1));\n });\n }\n }\n return _this.computeFindOperatorExpression(parameterValue, aliasPath, parameters_1);\n }\n else {\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex_1++;\n var parameter = _this.connection.driver.createParameter(parameterName, parameterIndex_1 - 1);\n return aliasPath + \" = \" + parameter;\n }\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n });\n }\n else {\n andConditions = wheres.map(function (where, whereIndex) {\n return Object.keys(where).map(function (key, parameterIndex) {\n var parameterValue = where[key];\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + key : key;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else {\n var parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return aliasPath + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n }\n }).join(\" AND \");\n });\n }\n if (andConditions.length > 1)\n return andConditions.map(function (where) { return \"(\" + where + \")\"; }).join(\" OR \");\n return andConditions.join(\"\");\n }\n return \"\";\n };\n /**\n * Gets SQL needs to be inserted into final query.\n */\n QueryBuilder.prototype.computeFindOperatorExpression = function (operator, aliasPath, parameters) {\n var driver = this.connection.driver;\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return \"NOT(\" + this.computeFindOperatorExpression(operator.child, aliasPath, parameters) + \")\";\n }\n else {\n return aliasPath + \" != \" + parameters[0];\n }\n case \"lessThan\":\n return aliasPath + \" < \" + parameters[0];\n case \"lessThanOrEqual\":\n return aliasPath + \" <= \" + parameters[0];\n case \"moreThan\":\n return aliasPath + \" > \" + parameters[0];\n case \"moreThanOrEqual\":\n return aliasPath + \" >= \" + parameters[0];\n case \"equal\":\n return aliasPath + \" = \" + parameters[0];\n case \"ilike\":\n if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n return aliasPath + \" ILIKE \" + parameters[0];\n }\n return \"UPPER(\" + aliasPath + \") LIKE UPPER(\" + parameters[0] + \")\";\n case \"like\":\n return aliasPath + \" LIKE \" + parameters[0];\n case \"between\":\n return aliasPath + \" BETWEEN \" + parameters[0] + \" AND \" + parameters[1];\n case \"in\":\n if (parameters.length === 0) {\n return \"0=1\";\n }\n return aliasPath + \" IN (\" + parameters.join(\", \") + \")\";\n case \"any\":\n return aliasPath + \" = ANY(\" + parameters[0] + \")\";\n case \"isNull\":\n return aliasPath + \" IS NULL\";\n case \"raw\":\n if (operator.getSql) {\n return operator.getSql(aliasPath);\n }\n else {\n return aliasPath + \" = \" + operator.value;\n }\n }\n throw new TypeError(\"Unsupported FindOperator \" + FindOperator.constructor.name);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n QueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner();\n };\n return QueryBuilder;\n}());\nexport { QueryBuilder };\n\n//# sourceMappingURL=QueryBuilder.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsQueryRunner } from \"./SqljsQueryRunner\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nvar SqljsDriver = /** @class */ (function (_super) {\n __extends(SqljsDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (_this.options.autoSave && !_this.options.location && !_this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(\"location or autoSaveCallback\");\n }\n // load sql.js package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n SqljsDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Closes connection with database.\n */\n SqljsDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection.close();\n ok();\n }\n catch (e) {\n fail(e);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n SqljsDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n return this.queryRunner;\n };\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n SqljsDriver.prototype.load = function (fileNameOrLocalStorageOrData, checkIfFileOrLocalStorageExists) {\n if (checkIfFileOrLocalStorageExists === void 0) { checkIfFileOrLocalStorageExists = true; }\n return __awaiter(this, void 0, void 0, function () {\n var database, localStorageContent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(typeof fileNameOrLocalStorageOrData === \"string\")) return [3 /*break*/, 8];\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 1];\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return [2 /*return*/, this.createDatabaseConnectionWithImport(database)];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n return [3 /*break*/, 7];\n case 1:\n localStorageContent = null;\n if (!this.options.useLocalForage) return [3 /*break*/, 5];\n if (!window.localforage) return [3 /*break*/, 3];\n return [4 /*yield*/, window.localforage.getItem(fileNameOrLocalStorageOrData)];\n case 2:\n localStorageContent = _a.sent();\n return [3 /*break*/, 4];\n case 3: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 4: return [3 /*break*/, 6];\n case 5:\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n _a.label = 6;\n case 6:\n if (localStorageContent != null) {\n // localStorage value exists.\n return [2 /*return*/, this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent))];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n _a.label = 7;\n case 7: return [3 /*break*/, 9];\n case 8: return [2 /*return*/, this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData)];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n SqljsDriver.prototype.save = function (location) {\n return __awaiter(this, void 0, void 0, function () {\n var path, content, e_1, database, databaseArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!location && !this.options.location) {\n throw new Error(\"No location is set, specify a location parameter or add the location option to your configuration\");\n }\n path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n content = Buffer.from(this.databaseConnection.export());\n return [4 /*yield*/, PlatformTools.writeFile(path, content)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n throw new Error(\"Could not save database, error: \" + e_1);\n case 4: return [3 /*break*/, 10];\n case 5:\n database = this.databaseConnection.export();\n databaseArray = [].slice.call(database);\n if (!this.options.useLocalForage) return [3 /*break*/, 9];\n if (!window.localforage) return [3 /*break*/, 7];\n return [4 /*yield*/, window.localforage.setItem(path, JSON.stringify(databaseArray))];\n case 6:\n _a.sent();\n return [3 /*break*/, 8];\n case 7: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 8: return [3 /*break*/, 10];\n case 9:\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n SqljsDriver.prototype.autoSave = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.options.autoSave) return [3 /*break*/, 4];\n if (!this.options.autoSaveCallback) return [3 /*break*/, 2];\n return [4 /*yield*/, this.options.autoSaveCallback(this.export())];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.save()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database as Uint8Array.\n */\n SqljsDriver.prototype.export = function () {\n return this.databaseConnection.export();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n SqljsDriver.prototype.createGeneratedMap = function (metadata, insertResult) {\n var _this = this;\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n var query = \"SELECT last_insert_rowid()\";\n try {\n var result = _this.databaseConnection.exec(query);\n _this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n _this.connection.logger.logQueryError(e, query, []);\n }\n }\n return map;\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n SqljsDriver.prototype.createDatabaseConnection = function () {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n return this.createDatabaseConnectionWithImport(this.options.database);\n };\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n SqljsDriver.prototype.createDatabaseConnectionWithImport = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n var isLegacyVersion, sqlite, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isLegacyVersion = typeof this.sqlite.Database === \"function\";\n if (!isLegacyVersion) return [3 /*break*/, 1];\n _a = this.sqlite;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.sqlite(this.options.sqlJsConfig)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n sqlite = _a;\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n // Enable foreign keys for database\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.databaseConnection.exec(\"PRAGMA foreign_keys = ON;\");\n ok(_this.databaseConnection);\n }\n catch (e) {\n fail(e);\n }\n })];\n }\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n SqljsDriver.prototype.loadDependencies = function () {\n if (PlatformTools.type === \"browser\") {\n this.sqlite = window.SQL;\n }\n else {\n try {\n this.sqlite = PlatformTools.load(\"sql.js\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n };\n return SqljsDriver;\n}(AbstractSqliteDriver));\nexport { SqljsDriver };\n\n//# sourceMappingURL=SqljsDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeStoragePromise = void 0;\n/**\n * Promise-Wrapper-Klasse für Native-Storage\n */\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst JsonHelper_1 = require(\"js-helper/dist/shared/JsonHelper\");\nclass NativeStoragePromise {\n static _isElectron() {\n return (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0);\n }\n /**\n * Setzt ein Item für NativeStorage\n *\n * @param key\n * @param value\n * @returns {Promise<*>}\n */\n static setItem(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.set(this.prefix + key, value, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.setItem(this.prefix + key, value, res, rej));\n }\n }\n else {\n this._cache[this.prefix + key] = value;\n }\n });\n }\n /**\n * Bekomme ein Item von NativeStorage\n *\n * @param key\n * @param defaultValue?\n * @returns {Promise<*>}\n */\n static getItem(key, defaultValue) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res, rej) => {\n if (this._isElectron()) {\n this.electronStorage.get(this.prefix + key, (e, data) => {\n if (e) {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }\n else {\n res(JsonHelper_1.JsonHelper.deepEqual(data, {}) ? defaultValue : data);\n }\n });\n }\n else {\n NativeStorage.getItem(this.prefix + key, data => res(Helper_1.Helper.nonNull(data, defaultValue)), (e => {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }));\n }\n });\n });\n }\n /**\n * Bekomme die Keys vom NativeStorage\n *\n * @returns {Promise<*>}\n */\n static keys() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = [];\n if (this.persistent) {\n if (this._isElectron()) {\n keys = yield new Promise((res, rej) => this.electronStorage.keys((err, keys) => {\n if (err) {\n rej(err);\n }\n else {\n res(keys);\n }\n }));\n }\n else {\n keys = yield new Promise((res, rej) => NativeStorage.keys(res, rej));\n }\n }\n else {\n keys = Object.keys(this._cache);\n }\n return keys.filter(key => key.startsWith(this.prefix));\n });\n }\n /**\n * Entfernt ein Object aus dem NativeStorage\n *\n * @param key\n * @returns {Promise<*>}\n */\n static remove(key) {\n return __awaiter(this, void 0, void 0, function* () {\n delete this._cache[this.prefix + key];\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.remove(this.prefix + key, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.remove(this.prefix + key, res, rej));\n }\n });\n }\n /**\n * Entfernt alle Objects aus dem NativeStorage\n *\n * @returns {Promise<*>}\n */\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = yield this.keys();\n yield Helper_1.Helper.asyncForEach((keys), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.remove(key);\n }), true);\n });\n }\n static makePersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistent) {\n this.persistent = true;\n yield Helper_1.Helper.asyncForEach(Object.keys(this._cache), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.setItem(key, this._cache[key]);\n }), true);\n }\n });\n }\n static makeUnpersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n let keys = yield this.keys();\n let values = {};\n yield Helper_1.Helper.asyncForEach(keys, (key) => __awaiter(this, void 0, void 0, function* () {\n values[key] = yield this.getItem(key);\n }));\n this.clear();\n this.persistent = false;\n this._cache = values;\n }\n });\n }\n}\nexports.NativeStoragePromise = NativeStoragePromise;\nNativeStoragePromise._cache = {};\nNativeStoragePromise.prefix = \"\";\nNativeStoragePromise.persistent = true;\nNativeStoragePromise.electronStorage = null;\n//# sourceMappingURL=NativeStoragePromise.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table check constraint stored in this class.\n */\nvar TableCheck = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableCheck(options) {\n /**\n * Column that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableCheck.prototype.clone = function () {\n return new TableCheck({\n name: this.name,\n columnNames: this.columnNames ? __spreadArray([], __read(this.columnNames)) : [],\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates checks from the check metadata object.\n */\n TableCheck.create = function (checkMetadata) {\n return new TableCheck({\n name: checkMetadata.name,\n expression: checkMetadata.expression\n });\n };\n return TableCheck;\n}());\nexport { TableCheck };\n\n//# sourceMappingURL=TableCheck.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is not started yet and user tries to run commit or rollback.\n */\nvar TransactionNotStartedError = /** @class */ (function (_super) {\n __extends(TransactionNotStartedError, _super);\n function TransactionNotStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionNotStartedError\";\n Object.setPrototypeOf(_this, TransactionNotStartedError.prototype);\n _this.message = \"Transaction is not started yet, start transaction before committing or rolling it back.\";\n return _this;\n }\n return TransactionNotStartedError;\n}(Error));\nexport { TransactionNotStartedError };\n\n//# sourceMappingURL=TransactionNotStartedError.js.map\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","import { __read, __spreadArray } from \"tslib\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { camelCase, snakeCase, titleCase } from \"../util/StringUtils\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Naming strategy that is used by default.\n */\nvar DefaultNamingStrategy = /** @class */ (function () {\n function DefaultNamingStrategy() {\n this.nestedSetColumnNames = { left: \"nsleft\", right: \"nsright\" };\n this.materializedPathColumnName = \"mpath\";\n }\n /**\n * Normalizes table name.\n *\n * @param targetName Name of the target entity that can be used to generate a table name.\n * @param userSpecifiedName For example if user specified a table name in a decorator, e.g. @Entity(\"name\")\n */\n DefaultNamingStrategy.prototype.tableName = function (targetName, userSpecifiedName) {\n return userSpecifiedName ? userSpecifiedName : snakeCase(targetName);\n };\n /**\n * Creates a table name for a junction table of a closure table.\n *\n * @param originalClosureTableName Name of the closure table which owns this junction table.\n */\n DefaultNamingStrategy.prototype.closureJunctionTableName = function (originalClosureTableName) {\n return originalClosureTableName + \"_closure\";\n };\n DefaultNamingStrategy.prototype.columnName = function (propertyName, customName, embeddedPrefixes) {\n var name = customName || propertyName;\n if (embeddedPrefixes.length)\n return camelCase(embeddedPrefixes.join(\"_\")) + titleCase(name);\n return name;\n };\n DefaultNamingStrategy.prototype.relationName = function (propertyName) {\n return propertyName;\n };\n DefaultNamingStrategy.prototype.primaryKeyName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"PK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.uniqueConstraintName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"UQ_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.relationConstraintName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"REL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.defaultConstraintName = function (tableOrName, columnName) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + columnName;\n return \"DF_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.foreignKeyName = function (tableOrName, columnNames, _referencedTablePath, _referencedColumnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"FK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.indexName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"IDX_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.checkConstraintName = function (tableOrName, expression, isEnum) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n var name = \"CHK_\" + RandomGenerator.sha1(key).substr(0, 26);\n return isEnum ? name + \"_ENUM\" : name;\n };\n DefaultNamingStrategy.prototype.exclusionConstraintName = function (tableOrName, expression) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n return \"XCL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.joinColumnName = function (relationName, referencedColumnName) {\n return camelCase(relationName + \"_\" + referencedColumnName);\n };\n DefaultNamingStrategy.prototype.joinTableName = function (firstTableName, secondTableName, firstPropertyName, secondPropertyName) {\n return snakeCase(firstTableName + \"_\" + firstPropertyName.replace(/\\./gi, \"_\") + \"_\" + secondTableName);\n };\n DefaultNamingStrategy.prototype.joinTableColumnDuplicationPrefix = function (columnName, index) {\n return columnName + \"_\" + index;\n };\n DefaultNamingStrategy.prototype.joinTableColumnName = function (tableName, propertyName, columnName) {\n return camelCase(tableName + \"_\" + (columnName ? columnName : propertyName));\n };\n DefaultNamingStrategy.prototype.joinTableInverseColumnName = function (tableName, propertyName, columnName) {\n return this.joinTableColumnName(tableName, propertyName, columnName);\n };\n /**\n * Adds globally set prefix to the table name.\n * This method is executed no matter if prefix was set or not.\n * Table name is either user's given table name, either name generated from entity target.\n * Note that table name comes here already normalized by #tableName method.\n */\n DefaultNamingStrategy.prototype.prefixTableName = function (prefix, tableName) {\n return prefix + tableName;\n };\n DefaultNamingStrategy.prototype.eagerJoinRelationAlias = function (alias, propertyPath) {\n return alias + \"_\" + propertyPath.replace(\".\", \"_\");\n };\n return DefaultNamingStrategy;\n}());\nexport { DefaultNamingStrategy };\n\n//# sourceMappingURL=DefaultNamingStrategy.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to execute operation allowed only if connection is opened.\n */\nvar CannotExecuteNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotExecuteNotConnectedError, _super);\n function CannotExecuteNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotExecuteNotConnectedError\";\n Object.setPrototypeOf(_this, CannotExecuteNotConnectedError.prototype);\n _this.message = \"Cannot execute operation on \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotExecuteNotConnectedError;\n}(Error));\nexport { CannotExecuteNotConnectedError };\n\n//# sourceMappingURL=CannotExecuteNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to connect when he already connected.\n */\nvar CannotConnectAlreadyConnectedError = /** @class */ (function (_super) {\n __extends(CannotConnectAlreadyConnectedError, _super);\n function CannotConnectAlreadyConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotConnectAlreadyConnectedError\";\n Object.setPrototypeOf(_this, CannotConnectAlreadyConnectedError.prototype);\n _this.message = \"Cannot create a \\\"\" + connectionName + \"\\\" connection because connection to the database already established.\";\n return _this;\n }\n return CannotConnectAlreadyConnectedError;\n}(Error));\nexport { CannotConnectAlreadyConnectedError };\n\n//# sourceMappingURL=CannotConnectAlreadyConnectedError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n */\nvar EntityMetadataNotFoundError = /** @class */ (function (_super) {\n __extends(EntityMetadataNotFoundError, _super);\n function EntityMetadataNotFoundError(target) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityMetadataNotFound\";\n Object.setPrototypeOf(_this, EntityMetadataNotFoundError.prototype);\n var targetName;\n if (target instanceof EntitySchema) {\n targetName = target.options.name;\n }\n else if (typeof target === \"function\") {\n targetName = target.name;\n }\n else if (typeof target === \"object\" && \"name\" in target) {\n targetName = target.name;\n }\n else {\n targetName = target;\n }\n _this.message = \"No metadata for \\\"\" + targetName + \"\\\" was found.\";\n return _this;\n }\n return EntityMetadataNotFoundError;\n}(Error));\nexport { EntityMetadataNotFoundError };\n\n//# sourceMappingURL=EntityMetadataNotFoundError.js.map\n","/**\n * Represents entity of the migration in the database.\n */\nvar Migration = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Migration(id, timestamp, name, instance) {\n this.id = id;\n this.timestamp = timestamp;\n this.name = name;\n this.instance = instance;\n }\n return Migration;\n}());\nexport { Migration };\n\n//# sourceMappingURL=Migration.js.map\n","/**\n * Sql server driver requires parameter types to be specified fo input parameters used in the query.\n *\n * @see https://github.com/patriksimek/node-mssql#data-types\n */\nvar MssqlParameter = /** @class */ (function () {\n function MssqlParameter(value, type) {\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n this.value = value;\n this.type = type;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n this.params = [];\n this.params = params || [];\n }\n return MssqlParameter;\n}());\nexport { MssqlParameter };\n\n//# sourceMappingURL=MssqlParameter.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { Table } from \"../schema-builder/table/Table\";\nimport { Migration } from \"./Migration\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nvar MigrationExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MigrationExecutor(connection, queryRunner) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n this.transaction = \"all\";\n var options = this.connection.driver.options;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Tries to execute a single migration given.\n */\n MigrationExecutor.prototype.executeMigration = function (migration) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, migration.instance.up(queryRunner)];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 3:\n _a.sent();\n return [2 /*return*/, migration];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all migrations.\n */\n MigrationExecutor.prototype.getAllMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(this.getMigrations())];\n });\n });\n };\n /**\n * Returns an array of all executed migrations.\n */\n MigrationExecutor.prototype.getExecutedMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all pending migrations.\n */\n MigrationExecutor.prototype.getPendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var allMigrations, executedMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAllMigrations()];\n case 1:\n allMigrations = _a.sent();\n return [4 /*yield*/, this.getExecutedMigrations()];\n case 2:\n executedMigrations = _a.sent();\n return [2 /*return*/, allMigrations.filter(function (migration) {\n return !executedMigrations.find(function (executedMigration) {\n return executedMigration.name === migration.name;\n });\n })];\n }\n });\n });\n };\n /**\n * Inserts an executed migration.\n */\n MigrationExecutor.prototype.insertMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.insertExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Deletes an executed migration.\n */\n MigrationExecutor.prototype.deleteMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.deleteExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n MigrationExecutor.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var hasUnappliedMigrations, queryRunner, executedMigrations, allMigrations, _loop_1, this_1, allMigrations_1, allMigrations_1_1, migration;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n hasUnappliedMigrations = false;\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n allMigrations = this.getMigrations();\n _loop_1 = function (migration) {\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration) {\n this_1.connection.logger.logSchemaBuild(\" [X] \" + migration.name);\n }\n else {\n hasUnappliedMigrations = true;\n this_1.connection.logger.logSchemaBuild(\" [ ] \" + migration.name);\n }\n };\n this_1 = this;\n try {\n for (allMigrations_1 = __values(allMigrations), allMigrations_1_1 = allMigrations_1.next(); !allMigrations_1_1.done; allMigrations_1_1 = allMigrations_1.next()) {\n migration = allMigrations_1_1.value;\n _loop_1(migration);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allMigrations_1_1 && !allMigrations_1_1.done && (_a = allMigrations_1.return)) _a.call(allMigrations_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, hasUnappliedMigrations];\n }\n });\n });\n };\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n MigrationExecutor.prototype.executePendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;\n var e_2, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n allMigrations = this.getMigrations();\n successMigrations = [];\n pendingMigrations = allMigrations.filter(function (migration) {\n // check if we already have executed migration\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration)\n return false;\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new Error(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n if (!!pendingMigrations.length) return [3 /*break*/, 5];\n this.connection.logger.logSchemaBuild(\"No migrations are pending\");\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, []];\n case 5:\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(allMigrations.length + \" migrations were found in the source code.\");\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(pendingMigrations.length + \" migrations are new migrations that needs to be executed.\");\n transactionStartedByUs = false;\n if (!(this.transaction === \"all\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 6:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 7;\n case 7:\n _b.trys.push([7, 18, 23, 26]);\n _loop_2 = function (migration) {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!(this_2.transaction === \"each\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 2];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 1:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 2;\n case 2: return [4 /*yield*/, migration.instance.up(queryRunner)\n .then(function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: // now when migration is executed we need to insert record about it into the database\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 1:\n _a.sent();\n if (!(this.transaction === \"each\" && transactionStartedByUs)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); })\n .then(function () {\n successMigrations.push(migration);\n _this.connection.logger.logSchemaBuild(\"Migration \" + migration.name + \" has been executed successfully.\");\n })];\n case 3:\n _c.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _b.label = 8;\n case 8:\n _b.trys.push([8, 13, 14, 15]);\n pendingMigrations_1 = __values(pendingMigrations), pendingMigrations_1_1 = pendingMigrations_1.next();\n _b.label = 9;\n case 9:\n if (!!pendingMigrations_1_1.done) return [3 /*break*/, 12];\n migration = pendingMigrations_1_1.value;\n return [5 /*yield**/, _loop_2(migration)];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11:\n pendingMigrations_1_1 = pendingMigrations_1.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (pendingMigrations_1_1 && !pendingMigrations_1_1.done && (_a = pendingMigrations_1.return)) _a.call(pendingMigrations_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!(this.transaction === \"all\" && transactionStartedByUs)) return [3 /*break*/, 17];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 16:\n _b.sent();\n _b.label = 17;\n case 17: return [3 /*break*/, 26];\n case 18:\n err_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 22];\n _b.label = 19;\n case 19:\n _b.trys.push([19, 21, , 22]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 20:\n _b.sent();\n return [3 /*break*/, 22];\n case 21:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 22];\n case 22: throw err_1;\n case 23:\n if (!!this.queryRunner) return [3 /*break*/, 25];\n return [4 /*yield*/, queryRunner.release()];\n case 24:\n _b.sent();\n _b.label = 25;\n case 25: return [7 /*endfinally*/];\n case 26: return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last migration that were run.\n */\n MigrationExecutor.prototype.undoLastMigration = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, migrationToRevert, transactionStartedByUs, err_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _a.sent();\n lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\"No migrations was found in the database. Nothing to revert!\");\n return [2 /*return*/];\n }\n allMigrations = this.getMigrations();\n migrationToRevert = allMigrations.find(function (migration) { return migration.name === lastTimeExecutedMigration.name; });\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new Error(\"No migration \" + lastTimeExecutedMigration.name + \" was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.\");\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(\"Now reverting it...\");\n transactionStartedByUs = false;\n if (!((this.transaction !== \"none\") && !queryRunner.isTransactionActive)) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 3:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 4;\n case 4:\n _a.trys.push([4, 9, 14, 17]);\n return [4 /*yield*/, migrationToRevert.instance.down(queryRunner)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.deleteExecutedMigration(queryRunner, migrationToRevert)];\n case 6:\n _a.sent();\n this.connection.logger.logSchemaBuild(\"Migration \" + migrationToRevert.name + \" has been reverted successfully.\");\n if (!transactionStartedByUs) return [3 /*break*/, 8];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [3 /*break*/, 17];\n case 9:\n err_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 13];\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw err_2;\n case 14:\n if (!!this.queryRunner) return [3 /*break*/, 16];\n return [4 /*yield*/, queryRunner.release()];\n case 15:\n _a.sent();\n _a.label = 16;\n case 16: return [7 /*endfinally*/];\n case 17: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n MigrationExecutor.prototype.createMigrationsTableIfNotExist = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, queryRunner.hasTable(this.migrationsTable)];\n case 1:\n tableExist = _a.sent();\n if (!!tableExist) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationId }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n MigrationExecutor.prototype.loadExecutedMigrations = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var mongoRunner, migrationsRaw;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection\n .db(this.connection.driver.database)\n .collection(this.migrationsTableName)\n .find()\n .sort({ \"_id\": -1 })\n .toArray()];\n case 1: return [2 /*return*/, _a.sent()];\n case 2: return [4 /*yield*/, this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()];\n case 3:\n migrationsRaw = _a.sent();\n return [2 /*return*/, migrationsRaw.map(function (migrationRaw) {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n })];\n }\n });\n });\n };\n /**\n * Gets all migrations that setup for this connection.\n */\n MigrationExecutor.prototype.getMigrations = function () {\n var migrations = this.connection.migrations.map(function (migration) {\n var migrationClassName = migration.name || migration.constructor.name;\n var migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new Error(migrationClassName + \" migration name is wrong. Migration class name should have a JavaScript timestamp appended.\");\n }\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n this.checkForDuplicateMigrations(migrations);\n // sort them by timestamp\n return migrations.sort(function (a, b) { return a.timestamp - b.timestamp; });\n };\n MigrationExecutor.prototype.checkForDuplicateMigrations = function (migrations) {\n var migrationNames = migrations.map(function (migration) { return migration.name; });\n var duplicates = Array.from(new Set(migrationNames.filter(function (migrationName, index) { return migrationNames.indexOf(migrationName) < index; })));\n if (duplicates.length > 0) {\n throw Error(\"Duplicate migrations: \" + duplicates.join(\", \"));\n }\n };\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n MigrationExecutor.prototype.getLatestTimestampMigration = function (migrations) {\n var sortedMigrations = migrations.map(function (migration) { return migration; }).sort(function (a, b) { return (a.timestamp - b.timestamp) * -1; });\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n MigrationExecutor.prototype.getLatestExecutedMigration = function (sortedMigrations) {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Inserts new executed migration's data into migrations table.\n */\n MigrationExecutor.prototype.insertExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var values, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n values = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).insert(values)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n MigrationExecutor.prototype.deleteExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var conditions, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n conditions = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).deleteOne(conditions)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.delete()\n .from(this.migrationsTable)\n .where(qb.escape(\"timestamp\") + \" = :timestamp\")\n .andWhere(qb.escape(\"name\") + \" = :name\")\n .setParameters(conditions)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MigrationExecutor.prototype.withQueryRunner = function (callback) {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 2, 5]);\n return [2 /*return*/, callback(queryRunner)];\n case 2:\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n return MigrationExecutor;\n}());\nexport { MigrationExecutor };\n\n//# sourceMappingURL=MigrationExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingPrimaryColumnError = /** @class */ (function (_super) {\n __extends(MissingPrimaryColumnError, _super);\n function MissingPrimaryColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingPrimaryColumnError\";\n Object.setPrototypeOf(_this, MissingPrimaryColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have a primary column. Primary column is required to \" +\n \"have in all your entities. Use @PrimaryColumn decorator to add a primary column to your entity.\";\n return _this;\n }\n return MissingPrimaryColumnError;\n}(Error));\nexport { MissingPrimaryColumnError };\n\n//# sourceMappingURL=MissingPrimaryColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when circular relations detected with nullable set to false.\n */\nvar CircularRelationsError = /** @class */ (function (_super) {\n __extends(CircularRelationsError, _super);\n function CircularRelationsError(path) {\n var _this = _super.call(this) || this;\n _this.name = \"CircularRelationsError\";\n Object.setPrototypeOf(_this, CircularRelationsError.prototype);\n _this.message = \"Circular relations detected: \" + path + \". To resolve this issue you need to set nullable: true somewhere in this dependency structure.\";\n return _this;\n }\n return CircularRelationsError;\n}(Error));\nexport { CircularRelationsError };\n\n//# sourceMappingURL=CircularRelationsError.js.map\n","/**\n * This source code is from https://github.com/jriecken/dependency-graph\n * Just added \"any\" types here, wrapper everything into exported class.\n * We cant use a package itself because we want to package \"everything-in-it\" for the frontend users of TypeORM.\n */\n/**\n * A simple dependency graph\n */\n/**\n * Helper for creating a Depth-First-Search on\n * a set of edges.\n *\n * Detects cycles and throws an Error if one is detected.\n *\n * @param edges The set of edges to DFS through\n * @param leavesOnly Whether to only return \"leaf\" nodes (ones who have no edges)\n * @param result An array in which the results will be populated\n */\nfunction createDFS(edges, leavesOnly, result) {\n var currentPath = [];\n var visited = {};\n return function DFS(currentNode) {\n visited[currentNode] = true;\n currentPath.push(currentNode);\n edges[currentNode].forEach(function (node) {\n if (!visited[node]) {\n DFS(node);\n }\n else if (currentPath.indexOf(node) >= 0) {\n currentPath.push(node);\n throw new Error(\"Dependency Cycle Found: \" + currentPath.join(\" -> \"));\n }\n });\n currentPath.pop();\n if ((!leavesOnly || edges[currentNode].length === 0) && result.indexOf(currentNode) === -1) {\n result.push(currentNode);\n }\n };\n}\nvar DepGraph = /** @class */ (function () {\n function DepGraph() {\n this.nodes = {};\n this.outgoingEdges = {}; // Node -> [Dependency Node]\n this.incomingEdges = {}; // Node -> [Dependant Node]\n }\n /**\n * Add a node to the dependency graph. If a node already exists, this method will do nothing.\n */\n DepGraph.prototype.addNode = function (node, data) {\n if (!this.hasNode(node)) {\n // Checking the arguments length allows the user to add a node with undefined data\n if (arguments.length === 2) {\n this.nodes[node] = data;\n }\n else {\n this.nodes[node] = node;\n }\n this.outgoingEdges[node] = [];\n this.incomingEdges[node] = [];\n }\n };\n /**\n * Remove a node from the dependency graph. If a node does not exist, this method will do nothing.\n */\n DepGraph.prototype.removeNode = function (node) {\n if (this.hasNode(node)) {\n delete this.nodes[node];\n delete this.outgoingEdges[node];\n delete this.incomingEdges[node];\n [this.incomingEdges, this.outgoingEdges].forEach(function (edgeList) {\n Object.keys(edgeList).forEach(function (key) {\n var idx = edgeList[key].indexOf(node);\n if (idx >= 0) {\n edgeList[key].splice(idx, 1);\n }\n }, this);\n });\n }\n };\n /**\n * Check if a node exists in the graph\n */\n DepGraph.prototype.hasNode = function (node) {\n return this.nodes.hasOwnProperty(node);\n };\n /**\n * Get the data associated with a node name\n */\n DepGraph.prototype.getNodeData = function (node) {\n if (this.hasNode(node)) {\n return this.nodes[node];\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Set the associated data for a given node name. If the node does not exist, this method will throw an error\n */\n DepGraph.prototype.setNodeData = function (node, data) {\n if (this.hasNode(node)) {\n this.nodes[node] = data;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Add a dependency between two nodes. If either of the nodes does not exist,\n * an Error will be thrown.\n */\n DepGraph.prototype.addDependency = function (from, to) {\n if (!this.hasNode(from)) {\n throw new Error(\"Node does not exist: \" + from);\n }\n if (!this.hasNode(to)) {\n throw new Error(\"Node does not exist: \" + to);\n }\n if (this.outgoingEdges[from].indexOf(to) === -1) {\n this.outgoingEdges[from].push(to);\n }\n if (this.incomingEdges[to].indexOf(from) === -1) {\n this.incomingEdges[to].push(from);\n }\n return true;\n };\n /**\n * Remove a dependency between two nodes.\n */\n DepGraph.prototype.removeDependency = function (from, to) {\n var idx;\n if (this.hasNode(from)) {\n idx = this.outgoingEdges[from].indexOf(to);\n if (idx >= 0) {\n this.outgoingEdges[from].splice(idx, 1);\n }\n }\n if (this.hasNode(to)) {\n idx = this.incomingEdges[to].indexOf(from);\n if (idx >= 0) {\n this.incomingEdges[to].splice(idx, 1);\n }\n }\n };\n /**\n * Get an array containing the nodes that the specified node depends on (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned\n * in the array.\n */\n DepGraph.prototype.dependenciesOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.outgoingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * get an array containing the nodes that depend on the specified node (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not have any dependants will be returned in the array.\n */\n DepGraph.prototype.dependantsOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.incomingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Construct the overall processing order for the dependency graph.\n *\n * Throws an Error if the graph has a cycle.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned.\n */\n DepGraph.prototype.overallOrder = function (leavesOnly) {\n var self = this;\n var result = [];\n var keys = Object.keys(this.nodes);\n if (keys.length === 0) {\n return result; // Empty graph\n }\n else {\n // Look for cycles - we run the DFS starting at all the nodes in case there\n // are several disconnected subgraphs inside this dependency graph.\n var CycleDFS_1 = createDFS(this.outgoingEdges, false, []);\n keys.forEach(function (n) {\n CycleDFS_1(n);\n });\n var DFS_1 = createDFS(this.outgoingEdges, leavesOnly, result);\n // Find all potential starting points (nodes with nothing depending on them) an\n // run a DFS starting at these points to get the order\n keys.filter(function (node) {\n return self.incomingEdges[node].length === 0;\n }).forEach(function (n) {\n DFS_1(n);\n });\n return result;\n }\n };\n return DepGraph;\n}());\nexport { DepGraph };\n\n//# sourceMappingURL=DepGraph.js.map\n","import { __extends } from \"tslib\";\nvar DataTypeNotSupportedError = /** @class */ (function (_super) {\n __extends(DataTypeNotSupportedError, _super);\n function DataTypeNotSupportedError(column, dataType, database) {\n var _this = _super.call(this) || this;\n _this.name = \"DataTypeNotSupportedError\";\n Object.setPrototypeOf(_this, DataTypeNotSupportedError.prototype);\n var type = typeof dataType === \"string\" ? dataType : dataType.name;\n _this.message = \"Data type \\\"\" + type + \"\\\" in \\\"\" + column.entityMetadata.targetName + \".\" + column.propertyName + \"\\\" is not supported by \\\"\" + database + \"\\\" database.\";\n return _this;\n }\n return DataTypeNotSupportedError;\n}(Error));\nexport { DataTypeNotSupportedError };\n\n//# sourceMappingURL=DataTypeNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when some option is not set in the connection options.\n */\nvar NoConnectionOptionError = /** @class */ (function (_super) {\n __extends(NoConnectionOptionError, _super);\n function NoConnectionOptionError(optionName) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, NoConnectionOptionError.prototype);\n _this.message = \"Option \\\"\" + optionName + \"\\\" is not set in your connection options, please define \\\"\" + optionName + \"\\\" option in your connection options or ormconfig.json\";\n return _this;\n }\n return NoConnectionOptionError;\n}(Error));\nexport { NoConnectionOptionError };\n\n//# sourceMappingURL=NoConnectionOptionError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relation has array initialized which is forbidden my ORM.\n *\n * @see https://github.com/typeorm/typeorm/issues/1319\n * @see http://typeorm.io/#/relations-faq/avoid-relation-property-initializers\n */\nvar InitializedRelationError = /** @class */ (function (_super) {\n __extends(InitializedRelationError, _super);\n function InitializedRelationError(relation) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, InitializedRelationError.prototype);\n _this.message = \"Array initializations are not allowed in entity relations. \" +\n (\"Please remove array initialization (= []) from \\\"\" + relation.entityMetadata.targetName + \"#\" + relation.propertyPath + \"\\\". \") +\n \"This is ORM requirement to make relations to work properly. Refer docs for more information.\";\n return _this;\n }\n return InitializedRelationError;\n}(Error));\nexport { InitializedRelationError };\n\n//# sourceMappingURL=InitializedRelationError.js.map\n","import { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\";\nimport { CircularRelationsError } from \"../error/CircularRelationsError\";\nimport { DepGraph } from \"../util/DepGraph\";\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\";\nimport { InitializedRelationError } from \"../error/InitializedRelationError\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n/**\n * Validates built entity metadatas.\n */\nvar EntityMetadataValidator = /** @class */ (function () {\n function EntityMetadataValidator() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given entity metadatas.\n */\n EntityMetadataValidator.prototype.validateMany = function (entityMetadatas, driver) {\n var _this = this;\n entityMetadatas.forEach(function (entityMetadata) { return _this.validate(entityMetadata, entityMetadatas, driver); });\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n };\n /**\n * Validates given entity metadata.\n */\n EntityMetadataValidator.prototype.validate = function (entityMetadata, allEntityMetadatas, driver) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new Error(\"Entity \" + entityMetadata.name + \" using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?\");\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new Error(\"Entity \" + entityMetadata.name + \" has an undefined discriminator value. Discriminator value should be defined.\");\n var sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(function (metadata) {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(function (parent) { return entityMetadata.inheritanceTree.indexOf(parent) !== -1; });\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new Error(\"Entities \" + entityMetadata.name + \" and \" + sameDiscriminatorValueEntityMetadata.name + \" have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.\");\n }\n entityMetadata.relationCounts.forEach(function (relationCount) {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new Error(\"Relation count can not be implemented on ManyToOne or OneToOne relations.\");\n });\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(function (column) {\n var normalizedColumn = driver.normalizeType(column);\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new Error(\"Column \" + column.propertyName + \" of Entity \" + entityMetadata.name + \" does not support length property.\");\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new Error(\"Column \\\"\" + column.propertyName + \"\\\" of Entity \\\"\" + entityMetadata.name + \"\\\" is defined as enum, but missing \\\"enum\\\" or \\\"enumName\\\" properties.\");\n });\n }\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n var generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated && column.generationStrategy !== \"uuid\"; });\n if (generatedColumns.length > 1)\n throw new Error(\"Error in \" + entityMetadata.name + \" entity. There can be only one auto-increment column in MySql table.\");\n }\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n var metadatasWithDatabase = allEntityMetadatas.filter(function (metadata) { return metadata.database; });\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n if (driver instanceof SqlServerDriver) {\n var charsetColumns = entityMetadata.columns.filter(function (column) { return column.charset; });\n if (charsetColumns.length > 1)\n throw new Error(\"Character set specifying is not supported in Sql Server\");\n }\n // check if relations are all without initialized properties\n var entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(function (relation) {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n // get entity relation value and check if its an array\n var relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n // validate relations\n entityMetadata.relations.forEach(function (relation) {\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new Error(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new Error(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n });\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(function (relation) {\n var isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new Error(\"Relation \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseRelation.entityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" both has cascade remove set. \" +\n \"This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.\");\n }); // todo: maybe better just deny removal from one to one relation without join column?\n entityMetadata.eagerRelations.forEach(function (relation) {\n });\n };\n /**\n * Validates dependencies of the entity metadatas.\n */\n EntityMetadataValidator.prototype.validateDependencies = function (entityMetadatas) {\n var graph = new DepGraph();\n entityMetadatas.forEach(function (entityMetadata) {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns\n .filter(function (relation) { return !relation.isNullable; })\n .forEach(function (relation) {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n }\n catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n };\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n EntityMetadataValidator.prototype.validateEagerRelations = function (entityMetadatas) {\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.eagerRelations.forEach(function (relation) {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new Error(\"Circular eager relations are disallowed. \" +\n (entityMetadata.targetName + \"#\" + relation.propertyPath + \" contains \\\"eager: true\\\", and its inverse side \") +\n (relation.inverseEntityMetadata.targetName + \"#\" + relation.inverseRelation.propertyPath + \" contains \\\"eager: true\\\" as well.\") +\n \" Remove \\\"eager: true\\\" from one side of the relation.\");\n });\n });\n };\n return EntityMetadataValidator;\n}());\nexport { EntityMetadataValidator };\n\n//# sourceMappingURL=EntityMetadataValidator.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use query runner from query runner provider after it was released.\n */\nvar QueryRunnerProviderAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerProviderAlreadyReleasedError, _super);\n function QueryRunnerProviderAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerProviderAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerProviderAlreadyReleasedError.prototype);\n _this.message = \"Database connection provided by a query runner was already released, cannot continue to use its querying methods anymore.\";\n return _this;\n }\n return QueryRunnerProviderAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerProviderAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerProviderAlreadyReleasedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to release entity manager that does not use single database connection.\n */\nvar NoNeedToReleaseEntityManagerError = /** @class */ (function (_super) {\n __extends(NoNeedToReleaseEntityManagerError, _super);\n function NoNeedToReleaseEntityManagerError() {\n var _this = _super.call(this) || this;\n _this.name = \"NoNeedToReleaseEntityManagerError\";\n Object.setPrototypeOf(_this, NoNeedToReleaseEntityManagerError.prototype);\n _this.message = \"Entity manager is not using single database connection and cannot be released. \" +\n \"Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection \" +\n \"methods have a single database connection and they should be released.\";\n return _this;\n }\n return NoNeedToReleaseEntityManagerError;\n}(Error));\nexport { NoNeedToReleaseEntityManagerError };\n\n//# sourceMappingURL=NoNeedToReleaseEntityManagerError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nvar Repository = /** @class */ (function () {\n function Repository() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Repository.prototype.createQueryBuilder = function (alias, queryRunner) {\n return this.manager.createQueryBuilder(this.metadata.target, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n };\n Object.defineProperty(Repository.prototype, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n Repository.prototype.hasId = function (entity) {\n return this.manager.hasId(this.metadata.target, entity);\n };\n /**\n * Gets entity mixed id.\n */\n Repository.prototype.getId = function (entity) {\n return this.manager.getId(this.metadata.target, entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n Repository.prototype.create = function (plainEntityLikeOrPlainEntityLikes) {\n return this.manager.create(this.metadata.target, plainEntityLikeOrPlainEntityLikes);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n Repository.prototype.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.manager).merge.apply(_a, __spreadArray([this.metadata.target, mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n Repository.prototype.preload = function (entityLike) {\n return this.manager.preload(this.metadata.target, entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n Repository.prototype.save = function (entityOrEntities, options) {\n return this.manager.save(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n Repository.prototype.remove = function (entityOrEntities, options) {\n return this.manager.remove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n Repository.prototype.softRemove = function (entityOrEntities, options) {\n return this.manager.softRemove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Recovers one or many given entities.\n */\n Repository.prototype.recover = function (entityOrEntities, options) {\n return this.manager.recover(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n Repository.prototype.insert = function (entity) {\n return this.manager.insert(this.metadata.target, entity);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.update = function (criteria, partialEntity) {\n return this.manager.update(this.metadata.target, criteria, partialEntity);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.delete = function (criteria) {\n return this.manager.delete(this.metadata.target, criteria);\n };\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.softDelete = function (criteria) {\n return this.manager.softDelete(this.metadata.target, criteria);\n };\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.restore = function (criteria) {\n return this.manager.restore(this.metadata.target, criteria);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n Repository.prototype.count = function (optionsOrConditions) {\n return this.manager.count(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n Repository.prototype.find = function (optionsOrConditions) {\n return this.manager.find(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n Repository.prototype.findAndCount = function (optionsOrConditions) {\n return this.manager.findAndCount(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n Repository.prototype.findByIds = function (ids, optionsOrConditions) {\n return this.manager.findByIds(this.metadata.target, ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOne = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOne(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOneOrFail(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n Repository.prototype.query = function (query, parameters) {\n return this.manager.query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n Repository.prototype.clear = function () {\n return this.manager.clear(this.metadata.target);\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.increment = function (conditions, propertyPath, value) {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.decrement = function (conditions, propertyPath, value) {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n };\n return Repository;\n}());\nexport { Repository };\n\n//# sourceMappingURL=Repository.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { Repository } from \"./Repository\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nvar TreeRepository = /** @class */ (function (_super) {\n __extends(TreeRepository, _super);\n function TreeRepository() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // todo: implement moving\n // todo: implement removing\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Gets complete trees for all roots in the table.\n */\n TreeRepository.prototype.findTrees = function () {\n return __awaiter(this, void 0, void 0, function () {\n var roots;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.findRoots()];\n case 1:\n roots = _a.sent();\n return [4 /*yield*/, Promise.all(roots.map(function (root) { return _this.findDescendantsTree(root); }))];\n case 2:\n _a.sent();\n return [2 /*return*/, roots];\n }\n });\n });\n };\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n TreeRepository.prototype.findRoots = function () {\n var _this = this;\n var escapeAlias = function (alias) { return _this.manager.connection.driver.escape(alias); };\n var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };\n var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);\n return this.createQueryBuilder(\"treeEntity\")\n .where(escapeAlias(\"treeEntity\") + \".\" + escapeColumn(parentPropertyName) + \" IS NULL\")\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findDescendantsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildChildrenEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of descendants of the entity.\n */\n TreeRepository.prototype.countDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n TreeRepository.prototype.createDescendantsQueryBuilder = function (alias, closureTableAlias, entity) {\n var _this = this;\n // create shortcuts for better readability\n var escape = function (alias) { return _this.manager.connection.driver.escape(alias); };\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn.propertyPath);\n }).join(\" AND \");\n var parameters_1 = {};\n var whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n parameters_1[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_1);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_2 = {};\n var joinCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_2[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters_2);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE \" + subQuery.getQuery() + \" || '%'\";\n }\n else {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE CONCAT(\" + subQuery.getQuery() + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findAncestorsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of ancestors of the entity.\n */\n TreeRepository.prototype.countAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n TreeRepository.prototype.createAncestorsQueryBuilder = function (alias, closureTableAlias, entity) {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n var _this = this;\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn.propertyPath;\n }).join(\" AND \");\n var parameters_3 = {};\n var whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n parameters_3[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_3);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_4 = {};\n var whereCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_4[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters_4);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return subQuery.getQuery() + \" LIKE \" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" || '%'\";\n }\n else {\n return subQuery.getQuery() + \" LIKE CONCAT(\" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise {\n return Promise.resolve();\n } */\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n TreeRepository.prototype.createRelationMaps = function (alias, rawResults) {\n var _this = this;\n return rawResults.map(function (rawResult) {\n var joinColumn = _this.metadata.treeParentRelation.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n var joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n var id = rawResult[alias + \"_\" + _this.metadata.primaryColumns[0].databaseName];\n var parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: _this.manager.connection.driver.prepareHydratedValue(id, _this.metadata.primaryColumns[0]),\n parentId: _this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n };\n TreeRepository.prototype.buildChildrenEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var childProperty = this.metadata.treeChildrenRelation.propertyName;\n var parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var childRelationMaps = relationMaps.filter(function (relationMap) { return relationMap.parentId === parentEntityId; });\n var childIds = new Set(childRelationMaps.map(function (relationMap) { return relationMap.id; }));\n entity[childProperty] = entities.filter(function (entity) { return childIds.has(_this.metadata.primaryColumns[0].getEntityValue(entity)); });\n entity[childProperty].forEach(function (childEntity) {\n _this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n };\n TreeRepository.prototype.buildParentEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var parentProperty = this.metadata.treeParentRelation.propertyName;\n var entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var parentRelationMap = relationMaps.find(function (relationMap) { return relationMap.id === entityId; });\n var parentEntity = entities.find(function (entity) {\n if (!parentRelationMap)\n return false;\n return _this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n };\n return TreeRepository;\n}(Repository));\nexport { TreeRepository };\n\n//# sourceMappingURL=TreeRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relations specified in the find options were not found in the entities.\n*/\nvar FindRelationsNotFoundError = /** @class */ (function (_super) {\n __extends(FindRelationsNotFoundError, _super);\n function FindRelationsNotFoundError(notFoundRelations) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, FindRelationsNotFoundError.prototype);\n if (notFoundRelations.length === 1) {\n _this.message = \"Relation \\\"\" + notFoundRelations[0] + \"\\\" was not found; please check if it is correct and really exists in your entity.\";\n }\n else {\n _this.message = \"Relations \" + notFoundRelations.map(function (relation) { return \"\\\"\" + relation + \"\\\"\"; }).join(\", \") + \" were not found; please check if relations are correct and they exist in your entities.\";\n }\n return _this;\n }\n return FindRelationsNotFoundError;\n}(Error));\nexport { FindRelationsNotFoundError };\n\n//# sourceMappingURL=FindRelationsNotFoundError.js.map\n","import { FindRelationsNotFoundError } from \"../error/FindRelationsNotFoundError\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Utilities to work with FindOptions.\n */\nvar FindOptionsUtils = /** @class */ (function () {\n function FindOptionsUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n FindOptionsUtils.isFindOneOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions &&\n (Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\");\n };\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n FindOptionsUtils.isFindManyOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions && (this.isFindOneOptions(possibleOptions) ||\n typeof possibleOptions.skip === \"number\" ||\n typeof possibleOptions.take === \"number\" ||\n typeof possibleOptions.skip === \"string\" ||\n typeof possibleOptions.take === \"string\");\n };\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n FindOptionsUtils.extractFindManyOptionsAlias = function (object) {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n return undefined;\n };\n /**\n * Applies give find many options to the given query builder.\n */\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder = function (qb, options) {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n if (options)\n return qb.where(options);\n return qb;\n };\n /**\n * Applies give find options to the given query builder.\n */\n FindOptionsUtils.applyOptionsToQueryBuilder = function (qb, options) {\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n var metadata = qb.expressionMap.mainAlias.metadata;\n // apply all options from FindOptions\n if (options.select) {\n qb.select([]);\n options.select.forEach(function (select) {\n if (!metadata.findColumnWithPropertyPath(String(select)))\n throw new Error(select + \" column was not found in the \" + metadata.name + \" entity.\");\n qb.addSelect(qb.alias + \".\" + select);\n });\n }\n if (options.where)\n qb.where(options.where);\n if (options.skip)\n qb.skip(options.skip);\n if (options.take)\n qb.take(options.take);\n if (options.order)\n Object.keys(options.order).forEach(function (key) {\n var order = options.order[key];\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(key + \" column was not found in the \" + metadata.name + \" entity.\");\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n if (options.relations) {\n var allRelations = options.relations.map(function (relation) { return relation; });\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(function (key) {\n qb.leftJoin(options.join.leftJoin[key], key);\n });\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(function (key) {\n qb.innerJoin(options.join.innerJoin[key], key);\n });\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(function (key) {\n qb.leftJoinAndSelect(options.join.leftJoinAndSelect[key], key);\n });\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(function (key) {\n qb.innerJoinAndSelect(options.join.innerJoinAndSelect[key], key);\n });\n }\n if (options.cache) {\n if (options.cache instanceof Object) {\n var cache = options.cache;\n qb.cache(cache.id, cache.milliseconds);\n }\n else {\n qb.cache(options.cache);\n }\n }\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n }\n else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n var tableNames = options.lock.tables ? options.lock.tables.map(function (table) {\n var tableAlias = qb.expressionMap.aliases.find(function (alias) {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new Error(\"\\\"\" + table + \"\\\" is not part of this query\");\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n if (options.withDeleted) {\n qb.withDeleted();\n }\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n }\n else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds);\n }\n return qb;\n };\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n FindOptionsUtils.applyRelationsRecursively = function (qb, allRelations, alias, metadata, prefix) {\n var _this = this;\n // find all relations that match given prefix\n var matchedBaseRelations = [];\n if (prefix) {\n var regexp_1 = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(function (relation) { return relation.match(regexp_1); })\n .map(function (relation) { return relation.replace(regexp_1, \"\"); })\n .filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n else {\n matchedBaseRelations = allRelations.filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(function (relation) {\n // generate a relation alias\n var relationAlias = alias + \"__\" + relation;\n // shorten it if needed by the driver\n if (qb.connection.driver.maxAliasLength && relationAlias.length > qb.connection.driver.maxAliasLength) {\n relationAlias = shorten(relationAlias);\n }\n // add a join for the found relation\n var selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n // join the eager relations of the found relation\n var relMetadata = metadata.relations.find(function (metadata) { return metadata.propertyName === relation; });\n if (relMetadata) {\n _this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n // try to find sub-relations\n var join = qb.expressionMap.joinAttributes.find(function (join) { return join.entityOrProperty === selection; });\n _this.applyRelationsRecursively(qb, allRelations, join.alias.name, join.metadata, prefix ? prefix + \".\" + relation : relation);\n });\n };\n FindOptionsUtils.joinEagerRelations = function (qb, alias, metadata) {\n var _this = this;\n metadata.eagerRelations.forEach(function (relation) {\n var relationAlias = qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath);\n qb.leftJoinAndSelect(alias + \".\" + relation.propertyPath, relationAlias);\n _this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n };\n return FindOptionsUtils;\n}());\nexport { FindOptionsUtils };\n\n//# sourceMappingURL=FindOptionsUtils.js.map\n","/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToNewEntityTransformer = /** @class */ (function () {\n function PlainObjectToNewEntityTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToNewEntityTransformer.prototype.transform = function (newEntity, object, metadata, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // console.log(\"groupAndTransform entity:\", newEntity);\n // console.log(\"groupAndTransform object:\", object);\n this.groupAndTransform(newEntity, object, metadata, getLazyRelationsPromiseValue);\n // console.log(\"result:\", newEntity);\n return newEntity;\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n PlainObjectToNewEntityTransformer.prototype.groupAndTransform = function (entity, object, metadata, getLazyRelationsPromiseValue) {\n // console.log(\"groupAndTransform entity:\", entity);\n // console.log(\"groupAndTransform object:\", object);\n var _this = this;\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // copy regular column properties from the given object\n metadata.nonVirtualColumns.forEach(function (column) {\n var objectColumnValue = column.getEntityValue(object);\n if (objectColumnValue !== undefined)\n column.setEntityValue(entity, objectColumnValue);\n });\n // // copy relation properties from the given object\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n var entityRelatedValue = relation.getEntityValue(entity);\n var objectRelatedValue = relation.getEntityValue(object, getLazyRelationsPromiseValue);\n if (objectRelatedValue === undefined)\n return;\n if (relation.isOneToMany || relation.isManyToMany) {\n if (!Array.isArray(objectRelatedValue))\n return;\n if (!entityRelatedValue) {\n entityRelatedValue = [];\n relation.setEntityValue(entity, entityRelatedValue);\n }\n objectRelatedValue.forEach(function (objectRelatedValueItem) {\n // check if we have this item from the merging object in the original entity we merge into\n var objectRelatedValueEntity = entityRelatedValue.find(function (entityRelatedValueItem) {\n return relation.inverseEntityMetadata.compareEntities(objectRelatedValueItem, entityRelatedValueItem);\n });\n // if such item already exist then merge new data into it, if its not we create a new entity and merge it into the array\n if (!objectRelatedValueEntity) {\n objectRelatedValueEntity = relation.inverseEntityMetadata.create();\n entityRelatedValue.push(objectRelatedValueEntity);\n }\n _this.groupAndTransform(objectRelatedValueEntity, objectRelatedValueItem, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n });\n }\n else {\n // if related object isn't an object (direct relation id for example)\n // we just set it to the entity relation, we don't need anything more from it\n // however we do it only if original entity does not have this relation set to object\n // to prevent full overriding of objects\n if (!(objectRelatedValue instanceof Object)) {\n if (!(entityRelatedValue instanceof Object))\n relation.setEntityValue(entity, objectRelatedValue);\n return;\n }\n if (!entityRelatedValue) {\n entityRelatedValue = relation.inverseEntityMetadata.create();\n relation.setEntityValue(entity, entityRelatedValue);\n }\n _this.groupAndTransform(entityRelatedValue, objectRelatedValue, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n }\n });\n }\n };\n return PlainObjectToNewEntityTransformer;\n}());\nexport { PlainObjectToNewEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToNewEntityTransformer.js.map\n","import { __awaiter, __generator, __read } from \"tslib\";\n/**\n */\nvar LoadMapItem = /** @class */ (function () {\n function LoadMapItem(plainEntity, metadata, parentLoadMapItem, relation) {\n this.plainEntity = plainEntity;\n this.metadata = metadata;\n this.parentLoadMapItem = parentLoadMapItem;\n this.relation = relation;\n }\n Object.defineProperty(LoadMapItem.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LoadMapItem.prototype, \"id\", {\n get: function () {\n return this.metadata.getEntityIdMixedMap(this.plainEntity);\n },\n enumerable: false,\n configurable: true\n });\n return LoadMapItem;\n}());\nvar LoadMap = /** @class */ (function () {\n function LoadMap() {\n this.loadMapItems = [];\n }\n Object.defineProperty(LoadMap.prototype, \"mainLoadMapItem\", {\n get: function () {\n return this.loadMapItems.find(function (item) { return !item.relation && !item.parentLoadMapItem; });\n },\n enumerable: false,\n configurable: true\n });\n LoadMap.prototype.addLoadMap = function (newLoadMap) {\n var item = this.loadMapItems.find(function (item) { return item.target === newLoadMap.target && item.id === newLoadMap.id; });\n if (!item)\n this.loadMapItems.push(newLoadMap);\n };\n LoadMap.prototype.fillEntities = function (target, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n var item = _this.loadMapItems.find(function (loadMapItem) {\n return loadMapItem.target === target && loadMapItem.metadata.compareEntities(entity, loadMapItem.plainEntity);\n });\n if (item)\n item.entity = entity;\n });\n };\n LoadMap.prototype.groupByTargetIds = function () {\n var groups = [];\n this.loadMapItems.forEach(function (loadMapItem) {\n var group = groups.find(function (group) { return group.target === loadMapItem.target; });\n if (!group) {\n group = { target: loadMapItem.target, ids: [] };\n groups.push(group);\n }\n group.ids.push(loadMapItem.id);\n });\n return groups;\n };\n return LoadMap;\n}());\n/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToDatabaseEntityTransformer = /** @class */ (function () {\n function PlainObjectToDatabaseEntityTransformer(manager) {\n this.manager = manager;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToDatabaseEntityTransformer.prototype.transform = function (plainObject, metadata) {\n return __awaiter(this, void 0, void 0, function () {\n var loadMap, fillLoadMap;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if plain object does not have id then nothing to load really\n if (!metadata.hasAllPrimaryKeys(plainObject))\n return [2 /*return*/, Promise.reject(\"Given object does not have a primary column, cannot transform it to database entity.\")];\n loadMap = new LoadMap();\n fillLoadMap = function (entity, entityMetadata, parentLoadMapItem, relation) {\n var item = new LoadMapItem(entity, entityMetadata, parentLoadMapItem, relation);\n loadMap.addLoadMap(item);\n entityMetadata\n .extractRelationValuesFromEntity(entity, metadata.relations)\n .filter(function (value) { return value !== null && value !== undefined; })\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], value = _b[1], inverseEntityMetadata = _b[2];\n return fillLoadMap(value, inverseEntityMetadata, item, relation);\n });\n };\n fillLoadMap(plainObject, metadata);\n // load all entities and store them in the load map\n return [4 /*yield*/, Promise.all(loadMap.groupByTargetIds().map(function (targetWithIds) {\n return _this.manager\n .findByIds(targetWithIds.target, targetWithIds.ids)\n .then(function (entities) { return loadMap.fillEntities(targetWithIds.target, entities); });\n }))];\n case 1:\n // load all entities and store them in the load map\n _a.sent();\n // go through each item in the load map and set their entity relationship using metadata stored in load map\n loadMap.loadMapItems.forEach(function (loadMapItem) {\n if (!loadMapItem.relation ||\n !loadMapItem.entity ||\n !loadMapItem.parentLoadMapItem ||\n !loadMapItem.parentLoadMapItem.entity)\n return;\n if (loadMapItem.relation.isManyToMany || loadMapItem.relation.isOneToMany) {\n if (!loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName])\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = [];\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName].push(loadMapItem.entity);\n }\n else {\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = loadMapItem.entity;\n }\n });\n return [2 /*return*/, loadMap.mainLoadMapItem ? loadMap.mainLoadMapItem.entity : undefined];\n }\n });\n });\n };\n return PlainObjectToDatabaseEntityTransformer;\n}());\nexport { PlainObjectToDatabaseEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToDatabaseEntityTransformer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository was not found.\n */\nvar CustomRepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(CustomRepositoryNotFoundError, _super);\n function CustomRepositoryNotFoundError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryNotFoundError\";\n Object.setPrototypeOf(_this, CustomRepositoryNotFoundError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" was not found. \" +\n \"Did you forgot to put @EntityRepository decorator on it?\";\n return _this;\n }\n return CustomRepositoryNotFoundError;\n}(Error));\nexport { CustomRepositoryNotFoundError };\n\n//# sourceMappingURL=CustomRepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repositories that extend AbstractRepository classes does not have managed entity.\n */\nvar CustomRepositoryDoesNotHaveEntityError = /** @class */ (function (_super) {\n __extends(CustomRepositoryDoesNotHaveEntityError, _super);\n function CustomRepositoryDoesNotHaveEntityError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryDoesNotHaveEntityError\";\n Object.setPrototypeOf(_this, CustomRepositoryDoesNotHaveEntityError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" does not have managed entity. \" +\n \"Did you forget to specify entity for it @EntityRepository(MyEntity)? \";\n return _this;\n }\n return CustomRepositoryDoesNotHaveEntityError;\n}(Error));\nexport { CustomRepositoryDoesNotHaveEntityError };\n\n//# sourceMappingURL=CustomRepositoryDoesNotHaveEntityError.js.map\n","import { CustomRepositoryDoesNotHaveEntityError } from \"../error/CustomRepositoryDoesNotHaveEntityError\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\n/**\n * Provides abstract class for custom repositories that do not inherit from original orm Repository.\n * Contains all most-necessary methods to simplify code in the custom repository.\n * All methods are protected thus not exposed and it allows to create encapsulated custom repository.\n *\n * @experimental\n */\nvar AbstractRepository = /** @class */ (function () {\n function AbstractRepository() {\n }\n Object.defineProperty(AbstractRepository.prototype, \"repository\", {\n // -------------------------------------------------------------------------\n // Protected Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the original ORM repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AbstractRepository.prototype, \"treeRepository\", {\n /**\n * Gets the original ORM tree repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getTreeRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder for the repository's entity that can be used to build a sql query.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n AbstractRepository.prototype.createQueryBuilder = function (alias) {\n var target = this.getCustomRepositoryTarget(this.constructor);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target).createQueryBuilder(alias);\n };\n /**\n * Creates a new query builder for the given entity that can be used to build a sql query.\n */\n AbstractRepository.prototype.createQueryBuilderFor = function (entity, alias) {\n return this.getRepositoryFor(entity).createQueryBuilder(alias);\n };\n /**\n * Gets the original ORM repository for the given entity class.\n */\n AbstractRepository.prototype.getRepositoryFor = function (entity) {\n return this.manager.getRepository(entity);\n };\n /**\n * Gets the original ORM tree repository for the given entity class.\n */\n AbstractRepository.prototype.getTreeRepositoryFor = function (entity) {\n return this.manager.getTreeRepository(entity);\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Gets custom repository's managed entity.\n * If given custom repository does not manage any entity then undefined will be returned.\n */\n AbstractRepository.prototype.getCustomRepositoryTarget = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n return entityRepositoryMetadataArgs.entity;\n };\n return AbstractRepository;\n}());\nexport { AbstractRepository };\n\n//# sourceMappingURL=AbstractRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository inherits Repository class however entity is not set in @EntityRepository decorator.\n */\nvar CustomRepositoryCannotInheritRepositoryError = /** @class */ (function (_super) {\n __extends(CustomRepositoryCannotInheritRepositoryError, _super);\n function CustomRepositoryCannotInheritRepositoryError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryCannotInheritRepositoryError\";\n Object.setPrototypeOf(_this, CustomRepositoryCannotInheritRepositoryError.prototype);\n _this.message = \"Custom entity repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" \" +\n \" cannot inherit Repository class without entity being set in the @EntityRepository decorator.\";\n return _this;\n }\n return CustomRepositoryCannotInheritRepositoryError;\n}(Error));\nexport { CustomRepositoryCannotInheritRepositoryError };\n\n//# sourceMappingURL=CustomRepositoryCannotInheritRepositoryError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(RepositoryNotFoundError, _super);\n function RepositoryNotFoundError(connectionName, entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotFoundError\";\n Object.setPrototypeOf(_this, RepositoryNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"No repository for \\\"\" + targetName + \"\\\" was found. Looks like this entity is not registered in \" +\n (\"current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return RepositoryNotFoundError;\n}(Error));\nexport { RepositoryNotFoundError };\n\n//# sourceMappingURL=RepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotTreeError = /** @class */ (function (_super) {\n __extends(RepositoryNotTreeError, _super);\n function RepositoryNotTreeError(entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotTreeError\";\n Object.setPrototypeOf(_this, RepositoryNotTreeError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"Repository of the \\\"\" + targetName + \"\\\" class is not a TreeRepository. Try to apply @Tree decorator on your entity.\";\n return _this;\n }\n return RepositoryNotTreeError;\n}(Error));\nexport { RepositoryNotTreeError };\n\n//# sourceMappingURL=RepositoryNotTreeError.js.map\n","import { TreeRepository } from \"./TreeRepository\";\nimport { Repository } from \"./Repository\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoRepository } from \"./MongoRepository\";\n/**\n * Factory used to create different types of repositories.\n */\nvar RepositoryFactory = /** @class */ (function () {\n function RepositoryFactory() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a repository.\n */\n RepositoryFactory.prototype.create = function (manager, metadata, queryRunner) {\n if (metadata.treeType) {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = new TreeRepository();\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n else {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = void 0;\n if (manager.connection.driver instanceof MongoDriver) {\n repository = new MongoRepository();\n }\n else {\n repository = new Repository();\n }\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n };\n return RepositoryFactory;\n}());\nexport { RepositoryFactory };\n\n//# sourceMappingURL=RepositoryFactory.js.map\n","import { __extends } from \"tslib\";\nvar TreeRepositoryNotSupportedError = /** @class */ (function (_super) {\n __extends(TreeRepositoryNotSupportedError, _super);\n function TreeRepositoryNotSupportedError(driver) {\n var _this = _super.call(this) || this;\n _this.name = \"TreeRepositoryNotSupportedError\";\n Object.setPrototypeOf(_this, TreeRepositoryNotSupportedError.prototype);\n _this.message = \"Tree repositories are not supported in \" + driver.options.type + \" driver.\";\n return _this;\n }\n return TreeRepositoryNotSupportedError;\n}(Error));\nexport { TreeRepositoryNotSupportedError };\n\n//# sourceMappingURL=TreeRepositoryNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when method expects entity but instead something else is given.\n */\nvar MustBeEntityError = /** @class */ (function (_super) {\n __extends(MustBeEntityError, _super);\n function MustBeEntityError(operation, wrongValue) {\n var _this = _super.call(this) || this;\n _this.name = \"MustBeEntityError\";\n Object.setPrototypeOf(_this, MustBeEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be an entity, instead \\\"\" + wrongValue + \"\\\" is given.\";\n return _this;\n }\n return MustBeEntityError;\n}(Error));\nexport { MustBeEntityError };\n\n//# sourceMappingURL=MustBeEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nvar SubjectTopoligicalSorter = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectTopoligicalSorter(subjects) {\n this.subjects = __spreadArray([], __read(subjects)); // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sorts (orders) subjects in their topological order.\n */\n SubjectTopoligicalSorter.prototype.sort = function (direction) {\n var _this = this;\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n var sortedSubjects = [];\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n var junctionSubjects = this.subjects.filter(function (subject) { return !subject.entity && !subject.databaseEntity; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects)));\n this.removeAlreadySorted(junctionSubjects);\n }\n // next we always insert entities with non-nullable relations, sort them first\n var nonNullableDependencies = this.getNonNullableDependencies();\n var sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // next sort all other entities\n // same process as in above but with other entities\n var otherDependencies = this.getDependencies();\n var sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n sortedOtherEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // if we have something left in the subjects add them as well\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects)));\n return sortedSubjects;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n SubjectTopoligicalSorter.prototype.removeAlreadySorted = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.subjects.splice(_this.subjects.indexOf(subject), 1);\n });\n };\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n SubjectTopoligicalSorter.prototype.getUniqueMetadatas = function (subjects) {\n var metadatas = [];\n subjects.forEach(function (subject) {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getNonNullableDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n if (relation.isNullable)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n SubjectTopoligicalSorter.prototype.toposort = function (edges) {\n function uniqueNodes(arr) {\n var res = [];\n for (var i_1 = 0, len = arr.length; i_1 < len; i_1++) {\n var edge = arr[i_1];\n if (res.indexOf(edge[0]) < 0)\n res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0)\n res.push(edge[1]);\n }\n return res;\n }\n var nodes = uniqueNodes(edges);\n var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor;\n while (i--) {\n if (!visited[i])\n visit(nodes[i], i, []);\n }\n function visit(node, i, predecessors) {\n if (predecessors.indexOf(node) >= 0) {\n throw new Error(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n if (!~nodes.indexOf(node)) {\n throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n if (visited[i])\n return;\n visited[i] = true;\n // outgoing edges\n var outgoing = edges.filter(function (edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n var preds = predecessors.concat(node);\n do {\n var child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n sorted[--cursor] = node;\n }\n return sorted;\n };\n return SubjectTopoligicalSorter;\n}());\nexport { SubjectTopoligicalSorter };\n\n//# sourceMappingURL=SubjectTopoligicalSorter.js.map\n","import { DateUtils } from \"../util/DateUtils\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * Finds what columns are changed in the subject entities.\n */\nvar SubjectChangedColumnsComputer = /** @class */ (function () {\n function SubjectChangedColumnsComputer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Finds what columns are changed in the subject entities.\n */\n SubjectChangedColumnsComputer.prototype.compute = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.computeDiffColumns(subject);\n _this.computeDiffRelationalColumns(subjects, subject);\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffColumns = function (subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.columns.forEach(function (column) {\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return;\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.column === column; });\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n // get user provided value - column value from the user provided persisted entity\n var entityValue = column.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n var shouldTransformDatabaseEntity = column.type !== \"json\" && column.type !== \"jsonb\";\n // get database value of the column\n var databaseValue = column.getEntityValue(subject.databaseEntity, shouldTransformDatabaseEntity);\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n var value = column.relationMetadata.getEntityValue(subject.entity);\n if (value !== null && value !== undefined)\n return;\n }\n var normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue))\n return;\n break;\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(column.transformer, entityValue);\n }\n }\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n };\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffRelationalColumns = function (allSubjects, subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.relationsWithJoinColumns.forEach(function (relation) {\n // get the related entity from the persisted entity\n var relatedEntity = relation.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n var relatedEntityRelationIdMap = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap);\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n var databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n // if relation ids are equal then we don't need to update anything\n var areRelatedIdsEqual = OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n }\n else {\n subject.diffRelations.push(relation);\n }\n }\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n var valueSubject = allSubjects.find(function (subject) { return subject.mustBeInserted && subject.entity === relatedEntity; });\n if (valueSubject)\n relatedEntity = valueSubject;\n // find if there is already a relation to be changed\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.relation === relation; });\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n }\n else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n };\n return SubjectChangedColumnsComputer;\n}());\nexport { SubjectChangedColumnsComputer };\n\n//# sourceMappingURL=SubjectChangedColumnsComputer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when operation is going to be executed on a subject without identifier.\n * This error should never be thrown, however it still presents to prevent user from updation or removing the whole table.\n * If this error occurs still, it most probably is an ORM internal problem which must be reported and fixed.\n */\nvar SubjectWithoutIdentifierError = /** @class */ (function (_super) {\n __extends(SubjectWithoutIdentifierError, _super);\n function SubjectWithoutIdentifierError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectWithoutIdentifierError\";\n Object.setPrototypeOf(_this, SubjectWithoutIdentifierError.prototype);\n _this.message = \"Internal error. Subject \" + subject.metadata.targetName + \" must have an identifier to perform operation. \" +\n \"Please report a github issue if you face this error.\";\n return _this;\n }\n return SubjectWithoutIdentifierError;\n}(Error));\nexport { SubjectWithoutIdentifierError };\n\n//# sourceMappingURL=SubjectWithoutIdentifierError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when same object is scheduled for remove and updation at the same time.\n */\nvar SubjectRemovedAndUpdatedError = /** @class */ (function (_super) {\n __extends(SubjectRemovedAndUpdatedError, _super);\n function SubjectRemovedAndUpdatedError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectRemovedAndUpdatedError\";\n Object.setPrototypeOf(_this, SubjectRemovedAndUpdatedError.prototype);\n _this.message = \"Removed entity \\\"\" + subject.metadata.name + \"\\\" is also scheduled for update operation. \" +\n \"Make sure you are not updating and removing same object (note that update or remove may be executed by cascade operations).\";\n return _this;\n }\n return SubjectRemovedAndUpdatedError;\n}(Error));\nexport { SubjectRemovedAndUpdatedError };\n\n//# sourceMappingURL=SubjectRemovedAndUpdatedError.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Executes subject operations for nested set tree entities.\n */\nvar NestedSetSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NestedSetSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n NestedSetSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var escape, tableName, leftColumnName, rightColumnName, parent, parentId, parentNsRight;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n escape = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.tablePath);\n leftColumnName = escape(subject.metadata.nestedSetLeftColumn.databaseName);\n rightColumnName = escape(subject.metadata.nestedSetRightColumn.databaseName);\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentNsRight = undefined;\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.nestedSetRightColumn.propertyPath, \"right\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) {\n var value = result ? result[\"right\"] : undefined;\n // CockroachDB returns numeric types as string\n return typeof value === \"string\" ? parseInt(value) : value;\n })];\n case 1:\n parentNsRight = _a.sent();\n _a.label = 2;\n case 2:\n if (!(parentNsRight !== undefined)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.queryRunner.query(\"UPDATE \" + tableName + \" SET \" +\n (leftColumnName + \" = CASE WHEN \" + leftColumnName + \" > \" + parentNsRight + \" THEN \" + leftColumnName + \" + 2 ELSE \" + leftColumnName + \" END,\") +\n (rightColumnName + \" = \" + rightColumnName + \" + 2 \") +\n (\"WHERE \" + rightColumnName + \" >= \" + parentNsRight))];\n case 3:\n _a.sent();\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(parentNsRight), subject.metadata.nestedSetRightColumn.createValueMap(parentNsRight + 1));\n return [3 /*break*/, 5];\n case 4:\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(1), subject.metadata.nestedSetRightColumn.createValueMap(2));\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n NestedSetSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return NestedSetSubjectExecutor;\n}());\nexport { NestedSetSubjectExecutor };\n\n//# sourceMappingURL=NestedSetSubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user saves tree children entity but its parent is not saved yet.\n*/\nvar CannotAttachTreeChildrenEntityError = /** @class */ (function (_super) {\n __extends(CannotAttachTreeChildrenEntityError, _super);\n function CannotAttachTreeChildrenEntityError(entityName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotAttachTreeChildrenEntityError\";\n Object.setPrototypeOf(_this, CannotAttachTreeChildrenEntityError.prototype);\n _this.message = \"Cannot attach entity \\\"\" + entityName + \"\\\" to its parent. Please make sure parent is saved in the database before saving children nodes.\";\n return _this;\n }\n return CannotAttachTreeChildrenEntityError;\n}(Error));\nexport { CannotAttachTreeChildrenEntityError };\n\n//# sourceMappingURL=CannotAttachTreeChildrenEntityError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { CannotAttachTreeChildrenEntityError } from \"../../error/CannotAttachTreeChildrenEntityError\";\n/**\n * Executes subject operations for closure entities.\n */\nvar ClosureSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Removes all children of the given subject's entity.\n\n async deleteChildrenOf(subject: Subject) {\n // const relationValue = subject.metadata.treeParentRelation.getEntityValue(subject.databaseEntity);\n // console.log(\"relationValue: \", relationValue);\n // this.queryRunner.manager\n // .createQueryBuilder()\n // .from(subject.metadata.closureJunctionTable.target, \"tree\")\n // .where(\"tree.\");\n }*/\n /**\n * Executes operations when subject is being inserted.\n */\n ClosureSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var closureJunctionInsertMap, parent, escape_1, tableName, ancestorColumnNames, descendantColumnNames, firstQueryParameters_1, childEntityIdValues_1, childEntityIds1, whereCondition;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n closureJunctionInsertMap = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n // insert values into the closure junction table\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute()];\n case 1:\n // insert values into the closure junction table\n _a.sent();\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n if (!parent) return [3 /*break*/, 3];\n escape_1 = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n firstQueryParameters_1 = [];\n childEntityIdValues_1 = subject.metadata.primaryColumns.map(function (column) { return column.getEntityValue(subject.insertedValueSet); });\n childEntityIds1 = subject.metadata.primaryColumns.map(function (column, index) {\n firstQueryParameters_1.push(childEntityIdValues_1[index]);\n return _this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, firstQueryParameters_1.length - 1);\n });\n whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n var columnName = escape_1(column.databaseName);\n var parentId = column.referencedColumn.getEntityValue(parent);\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n firstQueryParameters_1.push(parentId);\n var parameterName = _this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn.databaseName, firstQueryParameters_1.length - 1);\n return columnName + \" = \" + parameterName;\n }).join(\", \");\n return [4 /*yield*/, this.queryRunner.query(\"INSERT INTO \" + tableName + \" (\" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(\", \") + \") \" +\n (\"SELECT \" + ancestorColumnNames.join(\", \") + \", \" + childEntityIds1.join(\", \") + \" FROM \" + tableName + \" WHERE \" + whereCondition), firstQueryParameters_1)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n ClosureSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return ClosureSubjectExecutor;\n}());\nexport { ClosureSubjectExecutor };\n\n//# sourceMappingURL=ClosureSubjectExecutor.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Executes subject operations for materialized-path tree entities.\n */\nvar MaterializedPathSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MaterializedPathSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n MaterializedPathSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var parent, parentId, parentPath, insertedEntityId;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentPath = \"\";\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) { return result ? result[\"path\"] : undefined; })];\n case 1:\n parentPath = _b.sent();\n _b.label = 2;\n case 2:\n insertedEntityId = subject.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n return joinColumn.referencedColumn.getEntityValue(subject.insertedValueSet);\n }).join(\"_\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set((_a = {},\n _a[subject.metadata.materializedPathColumn.propertyPath] = parentPath + insertedEntityId + \".\",\n _a))\n .where(subject.identifier)\n .execute()];\n case 3:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return MaterializedPathSubjectExecutor;\n}());\nexport { MaterializedPathSubjectExecutor };\n\n//# sourceMappingURL=MaterializedPathSubjectExecutor.js.map\n","import { __awaiter, __generator, __read, __values } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SubjectTopoligicalSorter } from \"./SubjectTopoligicalSorter\";\nimport { SubjectChangedColumnsComputer } from \"./SubjectChangedColumnsComputer\";\nimport { SubjectWithoutIdentifierError } from \"../error/SubjectWithoutIdentifierError\";\nimport { SubjectRemovedAndUpdatedError } from \"../error/SubjectRemovedAndUpdatedError\";\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { NestedSetSubjectExecutor } from \"./tree/NestedSetSubjectExecutor\";\nimport { ClosureSubjectExecutor } from \"./tree/ClosureSubjectExecutor\";\nimport { MaterializedPathSubjectExecutor } from \"./tree/MaterializedPathSubjectExecutor\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nvar SubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectExecutor(queryRunner, subjects, options) {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n this.hasExecutableOperations = false;\n /**\n * Subjects that must be inserted.\n */\n this.insertSubjects = [];\n /**\n * Subjects that must be updated.\n */\n this.updateSubjects = [];\n /**\n * Subjects that must be removed.\n */\n this.removeSubjects = [];\n /**\n * Subjects that must be soft-removed.\n */\n this.softRemoveSubjects = [];\n /**\n * Subjects that must be recovered.\n */\n this.recoverSubjects = [];\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n SubjectExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var broadcasterResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n broadcasterResult = undefined;\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 2];\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(function (subject) { return subject.recompute(); });\n this.updateSubjects.forEach(function (subject) { return subject.recompute(); });\n this.removeSubjects.forEach(function (subject) { return subject.recompute(); });\n this.softRemoveSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recoverSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n // console.timeEnd(\"prepare\");\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n return [4 /*yield*/, this.executeInsertOperations()];\n case 3:\n _a.sent();\n // console.timeEnd(\".insertion\");\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n // execute update operations\n // console.time(\".updation\");\n return [4 /*yield*/, this.executeUpdateOperations()];\n case 4:\n // execute update operations\n // console.time(\".updation\");\n _a.sent();\n // console.timeEnd(\".updation\");\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n return [4 /*yield*/, this.executeRemoveOperations()];\n case 5:\n _a.sent();\n // console.timeEnd(\".removal\");\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n // execute soft-remove operations\n return [4 /*yield*/, this.executeSoftRemoveOperations()];\n case 6:\n // execute soft-remove operations\n _a.sent();\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n // execute recover operations\n return [4 /*yield*/, this.executeRecoverOperations()];\n case 7:\n // execute recover operations\n _a.sent();\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n return [4 /*yield*/, this.updateSpecialColumnsInPersistedEntities()];\n case 8:\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n _a.sent();\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 10];\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given subjects.\n */\n SubjectExecutor.prototype.validate = function () {\n this.allSubjects.forEach(function (subject) {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n };\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n SubjectExecutor.prototype.recompute = function () {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeInserted; });\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n this.removeSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRemoved; });\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n };\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n SubjectExecutor.prototype.broadcastBeforeEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n SubjectExecutor.prototype.broadcastAfterEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Executes insert operations.\n */\n SubjectExecutor.prototype.executeInsertOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedInsertSubjects, groupedInsertSubjectKeys, _loop_1, this_1, groupedInsertSubjectKeys_1, groupedInsertSubjectKeys_1_1, groupName, e_1_1;\n var e_1, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.insertSubjects, \"insert\"), 2), groupedInsertSubjects = _a[0], groupedInsertSubjectKeys = _a[1];\n _loop_1 = function (groupName) {\n var subjects, bulkInsertMaps, bulkInsertSubjects, singleInsertSubjects, manager, insertResult_1, insertResult_2, _loop_2, singleInsertSubjects_1, singleInsertSubjects_1_1, subject, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n subjects = groupedInsertSubjects[groupName];\n bulkInsertMaps = [];\n bulkInsertSubjects = [];\n singleInsertSubjects = [];\n if (this_1.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(function (subject) {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n subject.createValueSetAndPopChangeMap();\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity);\n });\n }\n else if (this_1.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(function (subject) {\n singleInsertSubjects.push(subject);\n });\n }\n else {\n subjects.forEach(function (subject) {\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n _this.queryRunner.connection.driver instanceof OracleDriver ||\n _this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n }\n else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n if (!(this_1.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n manager = this_1.queryRunner.manager;\n return [4 /*yield*/, manager.insert(subjects[0].metadata.target, bulkInsertMaps)];\n case 1:\n insertResult_1 = _e.sent();\n subjects.forEach(function (subject, index) {\n subject.identifier = insertResult_1.identifiers[index];\n subject.generatedMap = insertResult_1.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n return [3 /*break*/, 12];\n case 2:\n if (!(bulkInsertMaps.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()];\n case 3:\n insertResult_2 = _e.sent();\n bulkInsertSubjects.forEach(function (subject, index) {\n subject.identifier = insertResult_2.identifiers[index];\n subject.generatedMap = insertResult_2.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n _e.label = 4;\n case 4:\n if (!(singleInsertSubjects.length > 0)) return [3 /*break*/, 12];\n _loop_2 = function (subject) {\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n if (!(subject.metadata.treeType === \"nested-set\")) return [3 /*break*/, 2];\n return [4 /*yield*/, new NestedSetSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 1:\n _f.sent();\n _f.label = 2;\n case 2: return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(function (insertResult) {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n })];\n case 3:\n _f.sent();\n if (!(subject.metadata.treeType === \"closure-table\")) return [3 /*break*/, 5];\n return [4 /*yield*/, new ClosureSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 4:\n _f.sent();\n return [3 /*break*/, 7];\n case 5:\n if (!(subject.metadata.treeType === \"materialized-path\")) return [3 /*break*/, 7];\n return [4 /*yield*/, new MaterializedPathSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 6:\n _f.sent();\n _f.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n };\n _e.label = 5;\n case 5:\n _e.trys.push([5, 10, 11, 12]);\n singleInsertSubjects_1 = (e_2 = void 0, __values(singleInsertSubjects)), singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n _e.label = 6;\n case 6:\n if (!!singleInsertSubjects_1_1.done) return [3 /*break*/, 9];\n subject = singleInsertSubjects_1_1.value;\n return [5 /*yield**/, _loop_2(subject)];\n case 7:\n _e.sent();\n _e.label = 8;\n case 8:\n singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n return [3 /*break*/, 6];\n case 9: return [3 /*break*/, 12];\n case 10:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 12];\n case 11:\n try {\n if (singleInsertSubjects_1_1 && !singleInsertSubjects_1_1.done && (_d = singleInsertSubjects_1.return)) _d.call(singleInsertSubjects_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 12:\n subjects.forEach(function (subject) {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n });\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 8]);\n groupedInsertSubjectKeys_1 = __values(groupedInsertSubjectKeys), groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedInsertSubjectKeys_1_1.done) return [3 /*break*/, 5];\n groupName = groupedInsertSubjectKeys_1_1.value;\n return [5 /*yield**/, _loop_1(groupName)];\n case 3:\n _c.sent();\n _c.label = 4;\n case 4:\n groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (groupedInsertSubjectKeys_1_1 && !groupedInsertSubjectKeys_1_1.done && (_b = groupedInsertSubjectKeys_1.return)) _b.call(groupedInsertSubjectKeys_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all given subjects in the database.\n */\n SubjectExecutor.prototype.executeUpdateOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.updateSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, updateMap, updateQueryBuilder, updateResult, updateGeneratedMap_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n updateMap = subject.createValueSetAndPopChangeMap();\n updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, updateQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n updateGeneratedMap_1 = updateResult.generatedMaps[0];\n if (updateGeneratedMap_1) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(updateGeneratedMap_1);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap_1, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap_1);\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n SubjectExecutor.prototype.executeRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedRemoveSubjects, groupedRemoveSubjectKeys, groupedRemoveSubjectKeys_1, groupedRemoveSubjectKeys_1_1, groupName, subjects, deleteMaps, manager, e_3_1;\n var e_3, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.removeSubjects, \"delete\"), 2), groupedRemoveSubjects = _a[0], groupedRemoveSubjectKeys = _a[1];\n _c.label = 1;\n case 1:\n _c.trys.push([1, 8, 9, 10]);\n groupedRemoveSubjectKeys_1 = __values(groupedRemoveSubjectKeys), groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedRemoveSubjectKeys_1_1.done) return [3 /*break*/, 7];\n groupName = groupedRemoveSubjectKeys_1_1.value;\n subjects = groupedRemoveSubjects[groupName];\n deleteMaps = subjects.map(function (subject) {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n return subject.identifier;\n });\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 4];\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.delete(subjects[0].metadata.target, deleteMaps)];\n case 3:\n _c.sent();\n return [3 /*break*/, 6];\n case 4: \n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute()];\n case 5:\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n _c.sent();\n _c.label = 6;\n case 6:\n groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_3_1 = _c.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (groupedRemoveSubjectKeys_1_1 && !groupedRemoveSubjectKeys_1_1.done && (_b = groupedRemoveSubjectKeys_1.return)) _b.call(groupedRemoveSubjectKeys_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Soft-removes all given subjects in the database.\n */\n SubjectExecutor.prototype.executeSoftRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.softRemoveSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Recovers all given subjects in the database.\n */\n SubjectExecutor.prototype.executeRecoverOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.recoverSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInPersistedEntities = function () {\n var _this = this;\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.primaryColumns.forEach(function (primaryColumn) {\n primaryColumn.setEntityValue(subject.entity, undefined);\n });\n });\n }\n // other post-persist updations\n this.allSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.relationIds.forEach(function (relationId) {\n relationId.setValue(subject.entity);\n });\n // mongo _id remove\n if (_this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInInsertedAndUpdatedEntities = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n // update nullable columns\n if (column.isNullable) {\n var columnValue = column.getEntityValue(subject.entity);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity, null);\n }\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(function (updatedRelationMap) {\n updatedRelationMap.relation.joinColumns.forEach(function (column) {\n if (column.isVirtual === true)\n return;\n column.setEntityValue(subject.entity, updatedRelationMap.value instanceof Object ? column.referencedColumn.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n _this.queryRunner.manager.merge(subject.metadata.target, subject.entity, subject.generatedMap);\n });\n };\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n SubjectExecutor.prototype.groupBulkSubjects = function (subjects, type) {\n var group = {};\n var keys = [];\n var groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n subjects.forEach(function (subject, index) {\n var key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n }\n else {\n group[key].push(subject);\n }\n });\n return [group, keys];\n };\n return SubjectExecutor;\n}());\nexport { SubjectExecutor };\n\n//# sourceMappingURL=SubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to save/remove/etc. constructor-less object (object literal) instead of entity.\n */\nvar CannotDetermineEntityError = /** @class */ (function (_super) {\n __extends(CannotDetermineEntityError, _super);\n function CannotDetermineEntityError(operation) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotDetermineEntityError\";\n Object.setPrototypeOf(_this, CannotDetermineEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be instance of entity class, instead object literal is given. Or you must specify an entity target to method call.\";\n return _this;\n }\n return CannotDetermineEntityError;\n}(Error));\nexport { CannotDetermineEntityError };\n\n//# sourceMappingURL=CannotDetermineEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nvar Subject = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Subject(options) {\n var _a;\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n this.identifier = undefined;\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n this.entityWithFulfilledIds = undefined;\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n this.databaseEntityLoaded = false;\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n this.changeMaps = [];\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n this.canBeInserted = false;\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n this.canBeUpdated = false;\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n this.mustBeRemoved = false;\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n this.canBeSoftRemoved = false;\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n this.canBeRecovered = false;\n /**\n * Relations updated by the change maps.\n */\n this.updatedRelationMaps = [];\n /**\n * List of updated columns\n */\n this.diffColumns = [];\n /**\n * List of updated relations\n */\n this.diffRelations = [];\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n (_a = this.changeMaps).push.apply(_a, __spreadArray([], __read(options.changeMaps)));\n this.recompute();\n }\n Object.defineProperty(Subject.prototype, \"mustBeInserted\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get: function () {\n return this.canBeInserted && !this.databaseEntity;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeUpdated\", {\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeSoftRemoved\", {\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeRecovered\", {\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n Subject.prototype.createValueSetAndPopChangeMap = function () {\n var _this = this;\n var changeMapsWithoutValues = [];\n var changeSet = this.changeMaps.reduce(function (updateMap, changeMap) {\n var value = changeMap.value;\n if (value instanceof Subject) {\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n var valueMap;\n if (_this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn.getEntityValue(value));\n }\n else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n }\n else if (changeMap.relation) {\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object) {\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n var relationId = changeMap.relation.getRelationIdMap(value);\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n _this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation.createValueMap(relationId);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n }\n else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation.createValueMap(value);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {});\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n };\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n Subject.prototype.recompute = function () {\n var _this = this;\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(function (primaryColumn) {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === _this.parentSubject.metadata) {\n var value = primaryColumn.referencedColumn.getEntityValue(_this.parentSubject.entity);\n primaryColumn.setEntityValue(_this.entityWithFulfilledIds, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n }\n else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n };\n return Subject;\n}());\nexport { Subject };\n\n//# sourceMappingURL=Subject.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\";\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n OneToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // prepare objects (relation id maps) for the database entity\n // note: subject.databaseEntity contains relations with loaded relation ids only\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n var relatedEntityDatabaseRelationIds = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationIds = relation.getEntityValue(subject.databaseEntity);\n }\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n // extract only relation ids from the related entities, since we only need them for comparision\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n var relatedPersistedEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n return;\n }\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n var relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(function (relatedDatabaseEntityRelationId) {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n _this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(function (removedRelatedEntityRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation,\n value: null\n }];\n }\n else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n _this.subjects.push(removedRelatedEntitySubject);\n });\n };\n return OneToManySubjectBuilder;\n}());\nexport { OneToManySubjectBuilder };\n\n//# sourceMappingURL=OneToManySubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for one-to-one non-owner relations of the given subjects.\n *\n * by example: post contains one-to-one non-owner relation with category in the property called \"category\", e.g.\n * @OneToOne(type => Category, category => category.post) category: Category\n * If user sets a category into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToManyUpdateBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToOneInverseSideSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToOneInverseSideSubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToOneInverseSideSubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToOneRelations.forEach(function (relation) {\n // we don't need owning relations, this operation is only for inverse side of one-to-one relations\n // skip relations for which persistence is disabled\n if (relation.isOwning || relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"category\" inside it here.\n */\n OneToOneInverseSideSubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n // prepare objects (relation id map) for the database entity\n // note: subject.databaseEntity contains relation with loaded relation id only (id map)\n // by example: since subject is a post, we are expecting to get post's category saved in the database here,\n // particularly its relation id, e.g. category id stored in the database\n var relatedEntityDatabaseRelationId = undefined;\n if (subject.databaseEntity) // related entity in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationId = relation.getEntityValue(subject.databaseEntity);\n // get related entities of persisted entity\n // by example: get category from the passed to persist post entity\n var relatedEntity = relation.getEntityValue(subject.entity); // by example: relatedEntity is a category here\n if (relatedEntity === undefined) // if relation is undefined then nothing to update\n return;\n // if related entity is null then we need to check if there a bind in the database and unset it\n // if there is no bind in the entity then we don't need to do anything\n // by example: if post.category = null and category has this post in the database then we unset it\n if (relatedEntity === null) {\n // it makes sense to update database only there is a previously set value in the database\n if (relatedEntityDatabaseRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relatedEntityDatabaseRelationId,\n changeMaps: [{\n relation: relation.inverseRelation,\n value: null\n }]\n });\n this.subjects.push(removedRelatedEntitySubject);\n }\n return;\n } // else means entity is bind in the database\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = this.subjects.find(function (operateSubject) {\n return !!operateSubject.entity && operateSubject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains category which does not have id(s) yet (because its a new category)\n // it means its always newly inserted and relation update operation always must be created for it\n // it does not make sense to perform difference operation for it for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-one inverse relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entity which does not exist in the database yet, thus cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entity before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is OneToOne owner relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // check if this binding really exist in the database\n // by example: find our post if its already bind to category in the database and its not equal to what user tries to set\n var areRelatedIdEqualWithDatabase = relatedEntityDatabaseRelationId && OrmUtils.compareIds(relationIdMap, relatedEntityDatabaseRelationId);\n // if they aren't equal it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!areRelatedIdEqualWithDatabase) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n };\n return OneToOneInverseSideSubjectBuilder;\n}());\nexport { OneToOneInverseSideSubjectBuilder };\n\n//# sourceMappingURL=OneToOneInverseSideSubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * by example: post contains owner many-to-many relation with categories in the property called \"categories\", e.g.\n * @ManyToMany(type => Category, category => category.posts) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of junction table.\n */\nvar ManyToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ManyToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n ManyToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n */\n ManyToManySubjectBuilder.prototype.buildForAllRemoval = function (subject) {\n var _this = this;\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n var relatedEntityRelationIdsInDatabase = relation.getEntityValue(subject.databaseEntity);\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach(function (relationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, relationId)\n });\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n _this.subjects.push(junctionSubject);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n ManyToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n var databaseRelatedEntityIds = [];\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity)\n databaseRelatedEntityIds = relation.getEntityValue(subject.databaseEntity);\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities = [];\n if (!(Array.isArray(relatedEntities)))\n return;\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach(function (relatedEntity) {\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n }\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n var relatedEntityExistInDatabase = databaseRelatedEntityIds.find(function (databaseRelatedEntityRelationId) {\n return OrmUtils.compareIds(databaseRelatedEntityRelationId, relatedEntityRelationIdMap);\n });\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase)\n return;\n var ownerValue = relation.isOwning ? subject : (relatedEntitySubject || relatedEntity); // by example: ownerEntityMap is post from subject here\n var inverseValue = relation.isOwning ? (relatedEntitySubject || relatedEntity) : subject; // by example: inverseEntityMap is category from categories array here\n // create a new subject for insert operation of junction rows\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n canBeInserted: true,\n });\n _this.subjects.push(junctionSubject);\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n });\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n });\n });\n });\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n var changedInverseEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n if (relatedEntityRelationIdMap !== undefined && relatedEntityRelationIdMap !== null)\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap);\n });\n // now from all entities in the persisted entity find only those which aren't found in the db\n var removedJunctionEntityIds = databaseRelatedEntityIds.filter(function (existRelationId) {\n return !changedInverseEntityRelationIds.find(function (changedRelationId) {\n return OrmUtils.compareIds(changedRelationId, existRelationId);\n });\n });\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach(function (removedEntityRelationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, removedEntityRelationId)\n });\n _this.subjects.push(junctionSubject);\n });\n };\n /**\n * Creates identifiers for junction table.\n * Example: { postId: 1, categoryId: 2 }\n */\n ManyToManySubjectBuilder.prototype.buildJunctionIdentifier = function (subject, relation, relationId) {\n var ownerEntityMap = relation.isOwning ? subject.entity : relationId;\n var inverseEntityMap = relation.isOwning ? relationId : subject.entity;\n var identifier = {};\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(ownerEntityMap)));\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(inverseEntityMap)));\n });\n return identifier;\n };\n return ManyToManySubjectBuilder;\n}());\nexport { ManyToManySubjectBuilder };\n\n//# sourceMappingURL=ManyToManySubjectBuilder.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nvar SubjectDatabaseEntityLoader = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function SubjectDatabaseEntityLoader(queryRunner, subjects) {\n this.queryRunner = queryRunner;\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n SubjectDatabaseEntityLoader.prototype.load = function (operationType) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = this.groupByEntityTargets().map(function (subjectGroup) { return __awaiter(_this, void 0, void 0, function () {\n var allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n allIds = [];\n allSubjects = [];\n subjectGroup.subjects.forEach(function (subject) {\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return [2 /*return*/];\n loadRelationPropertyPaths = [];\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(function (subject) {\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(function (relation) {\n var value = relation.getEntityValue(subject.entityWithFulfilledIds);\n if (value === undefined)\n return;\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n }\n else { // remove\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push.apply(// remove\n loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; }))));\n }\n findOptions = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n return [4 /*yield*/, this.queryRunner.manager\n .getRepository(subjectGroup.target)\n .findByIds(allIds, findOptions)];\n case 1:\n entities = _b.sent();\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(function (entity) {\n var subjects = _this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(function (subject) {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n try {\n // this way we tell what subjects we tried to load database entities of\n for (allSubjects_1 = __values(allSubjects), allSubjects_1_1 = allSubjects_1.next(); !allSubjects_1_1.done; allSubjects_1_1 = allSubjects_1.next()) {\n subject = allSubjects_1_1.value;\n subject.databaseEntityLoaded = true;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allSubjects_1_1 && !allSubjects_1_1.done && (_a = allSubjects_1.return)) _a.call(allSubjects_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n SubjectDatabaseEntityLoader.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.subjects.filter(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n SubjectDatabaseEntityLoader.prototype.groupByEntityTargets = function () {\n return this.subjects.reduce(function (groups, operatedEntity) {\n var group = groups.find(function (group) { return group.target === operatedEntity.metadata.target; });\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, []);\n };\n return SubjectDatabaseEntityLoader;\n}());\nexport { SubjectDatabaseEntityLoader };\n\n//# sourceMappingURL=SubjectDatabaseEntityLoader.js.map\n","import { __read } from \"tslib\";\nimport { Subject } from \"../Subject\";\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nvar CascadesSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CascadesSubjectBuilder(allSubjects) {\n this.allSubjects = allSubjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n */\n CascadesSubjectBuilder.prototype.build = function (subject, operationType) {\n var _this = this;\n subject.metadata\n .extractRelationValuesFromEntity(subject.entity, subject.metadata.relations) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], relationEntity = _b[1], relationEntityMetadata = _b[2];\n // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set\n if (relationEntity === undefined ||\n relationEntity === null ||\n (!relation.isCascadeInsert && !relation.isCascadeUpdate && !relation.isCascadeSoftRemove && !relation.isCascadeRecover))\n return;\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!(relationEntity instanceof Object))\n return;\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n var alreadyExistRelationEntitySubject = _this.findByPersistEntityLike(relationEntityMetadata.target, relationEntity);\n if (alreadyExistRelationEntitySubject) {\n if (alreadyExistRelationEntitySubject.canBeInserted === false) // if its not marked for insertion yet\n alreadyExistRelationEntitySubject.canBeInserted = relation.isCascadeInsert === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeUpdated === false) // if its not marked for update yet\n alreadyExistRelationEntitySubject.canBeUpdated = relation.isCascadeUpdate === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeSoftRemoved === false) // if its not marked for removal yet\n alreadyExistRelationEntitySubject.canBeSoftRemoved = relation.isCascadeSoftRemove === true && operationType === \"soft-remove\";\n if (alreadyExistRelationEntitySubject.canBeRecovered === false) // if its not marked for recovery yet\n alreadyExistRelationEntitySubject.canBeRecovered = relation.isCascadeRecover === true && operationType === \"recover\";\n return;\n }\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n var relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted: relation.isCascadeInsert === true && operationType === \"save\",\n canBeUpdated: relation.isCascadeUpdate === true && operationType === \"save\",\n canBeSoftRemoved: relation.isCascadeSoftRemove === true && operationType === \"soft-remove\",\n canBeRecovered: relation.isCascadeRecover === true && operationType === \"recover\"\n });\n _this.allSubjects.push(relationEntitySubject);\n // go recursively and find other entities we need to insert/update\n _this.build(relationEntitySubject, operationType);\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subject where entity like given subject's entity.\n * Comparision made by entity id.\n */\n CascadesSubjectBuilder.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.allSubjects.find(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n return CascadesSubjectBuilder;\n}());\nexport { CascadesSubjectBuilder };\n\n//# sourceMappingURL=CascadesSubjectBuilder.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { MustBeEntityError } from \"../error/MustBeEntityError\";\nimport { SubjectExecutor } from \"./SubjectExecutor\";\nimport { CannotDetermineEntityError } from \"../error/CannotDetermineEntityError\";\nimport { Subject } from \"./Subject\";\nimport { OneToManySubjectBuilder } from \"./subject-builder/OneToManySubjectBuilder\";\nimport { OneToOneInverseSideSubjectBuilder } from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport { ManyToManySubjectBuilder } from \"./subject-builder/ManyToManySubjectBuilder\";\nimport { SubjectDatabaseEntityLoader } from \"./SubjectDatabaseEntityLoader\";\nimport { CascadesSubjectBuilder } from \"./subject-builder/CascadesSubjectBuilder\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nvar EntityPersistExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityPersistExecutor(connection, queryRunner, mode, target, entity, options) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.mode = mode;\n this.target = target;\n this.entity = entity;\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes persistence operation ob given entity or entities.\n */\n EntityPersistExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, executorsWithExecutableOperations_1, executorsWithExecutableOperations_1_1, executor, e_1_1, error_1, rollbackError_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // check if entity we are going to save is valid and is an object\n if (!this.entity || typeof this.entity !== \"object\")\n return [2 /*return*/, Promise.reject(new MustBeEntityError(this.mode, this.entity))];\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return [4 /*yield*/, Promise.resolve()];\n case 1:\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n _b.sent();\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 22, 25]);\n entities = Array.isArray(this.entity) ? this.entity : [this.entity];\n entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n return [4 /*yield*/, Promise.all(entitiesInChunks.map(function (entities) { return __awaiter(_this, void 0, void 0, function () {\n var subjects, cascadesSubjectBuilder;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n subjects = [];\n // create subjects for all entities we received for the persistence\n entities.forEach(function (entity) {\n var entityTarget = _this.target ? _this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(_this.mode);\n subjects.push(new Subject({\n metadata: _this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: _this.mode === \"save\",\n canBeUpdated: _this.mode === \"save\",\n mustBeRemoved: _this.mode === \"remove\",\n canBeSoftRemoved: _this.mode === \"soft-remove\",\n canBeRecovered: _this.mode === \"recover\"\n }));\n });\n cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(function (subject) {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, _this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n return [4 /*yield*/, new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode)];\n case 1:\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n _a.sent();\n // console.timeEnd(\"loading...\");\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n }\n else {\n subjects.forEach(function (subject) {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n // create a subject executor\n return [2 /*return*/, new SubjectExecutor(queryRunner, subjects, this.options)];\n }\n });\n }); }))];\n case 3:\n executors = _b.sent();\n executorsWithExecutableOperations = executors.filter(function (executor) { return executor.hasExecutableOperations; });\n if (executorsWithExecutableOperations.length === 0)\n return [2 /*return*/];\n isTransactionStartedByUs = false;\n _b.label = 4;\n case 4:\n _b.trys.push([4, 16, , 21]);\n if (!!queryRunner.isTransactionActive) return [3 /*break*/, 6];\n if (!(!this.options || this.options.transaction !== false)) return [3 /*break*/, 6];\n isTransactionStartedByUs = true;\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n _b.trys.push([6, 11, 12, 13]);\n executorsWithExecutableOperations_1 = __values(executorsWithExecutableOperations), executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n _b.label = 7;\n case 7:\n if (!!executorsWithExecutableOperations_1_1.done) return [3 /*break*/, 10];\n executor = executorsWithExecutableOperations_1_1.value;\n return [4 /*yield*/, executor.execute()];\n case 8:\n _b.sent();\n _b.label = 9;\n case 9:\n executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n return [3 /*break*/, 7];\n case 10: return [3 /*break*/, 13];\n case 11:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 13];\n case 12:\n try {\n if (executorsWithExecutableOperations_1_1 && !executorsWithExecutableOperations_1_1.done && (_a = executorsWithExecutableOperations_1.return)) _a.call(executorsWithExecutableOperations_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 13:\n if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 14:\n _b.sent();\n _b.label = 15;\n case 15: return [3 /*break*/, 21];\n case 16:\n error_1 = _b.sent();\n if (!isTransactionStartedByUs) return [3 /*break*/, 20];\n _b.label = 17;\n case 17:\n _b.trys.push([17, 19, , 20]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 18:\n _b.sent();\n return [3 /*break*/, 20];\n case 19:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 20];\n case 20: throw error_1;\n case 21: return [3 /*break*/, 25];\n case 22:\n if (!!this.queryRunner) return [3 /*break*/, 24];\n return [4 /*yield*/, queryRunner.release()];\n case 23:\n _b.sent();\n _b.label = 24;\n case 24: return [7 /*endfinally*/];\n case 25: return [2 /*return*/];\n }\n });\n });\n };\n return EntityPersistExecutor;\n}());\nexport { EntityPersistExecutor };\n\n//# sourceMappingURL=EntityPersistExecutor.js.map\n","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\";\nimport { TreeRepository } from \"../repository/TreeRepository\";\nimport { Repository } from \"../repository/Repository\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\nimport { EntitySchema, getMetadataArgsStorage } from \"../index\";\nimport { AbstractRepository } from \"../repository/AbstractRepository\";\nimport { CustomRepositoryCannotInheritRepositoryError } from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { RepositoryNotFoundError } from \"../error/RepositoryNotFoundError\";\nimport { RepositoryNotTreeError } from \"../error/RepositoryNotTreeError\";\nimport { RepositoryFactory } from \"../repository/RepositoryFactory\";\nimport { TreeRepositoryNotSupportedError } from \"../error/TreeRepositoryNotSupportedError\";\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nvar EntityManager = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityManager(connection, queryRunner) {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * Once created and then reused by en repositories.\n */\n this.repositories = [];\n /**\n * Plain to object transformer used in create and merge operations.\n */\n this.plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n EntityManager.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n var isolation, runInTransaction, queryRunner, result, err_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n if (!runInTransaction) {\n throw new Error(\"Transaction method requires callback in second paramter if isolation level is supplied.\");\n }\n if (this.connection.driver instanceof MongoDriver)\n throw new Error(\"Transactions aren't supported by MongoDB.\");\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n if (this.queryRunner && this.queryRunner.isTransactionActive)\n throw new Error(\"Cannot start transaction because its already started\");\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!isolation) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction(isolation)];\n case 2:\n _a.sent();\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, queryRunner.startTransaction()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, runInTransaction(queryRunner.manager)];\n case 6:\n result = _a.sent();\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n return [2 /*return*/, result];\n case 8:\n err_1 = _a.sent();\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw err_1;\n case 13:\n if (!!this.queryRunner) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n EntityManager.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.connection.query(query, parameters, this.queryRunner)];\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n EntityManager.prototype.createQueryBuilder = function (entityClass, alias, queryRunner) {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass, alias, queryRunner || this.queryRunner);\n }\n else {\n return this.connection.createQueryBuilder(entityClass || queryRunner || this.queryRunner);\n }\n };\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n EntityManager.prototype.hasId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n EntityManager.prototype.getId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n EntityManager.prototype.create = function (entityClass, plainObjectOrObjects) {\n var _this = this;\n var metadata = this.connection.getMetadata(entityClass);\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n if (Array.isArray(plainObjectOrObjects))\n return plainObjectOrObjects.map(function (plainEntityLike) { return _this.create(entityClass, plainEntityLike); });\n var mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n };\n /**\n * Merges two entities into one new entity.\n */\n EntityManager.prototype.merge = function (entityClass, mergeIntoEntity) {\n var _this = this;\n var entityLikes = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n entityLikes[_i - 2] = arguments[_i];\n }\n var metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(function (object) { return _this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata); });\n return mergeIntoEntity;\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n EntityManager.prototype.preload = function (entityClass, entityLike) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, plainObjectToDatabaseEntityTransformer, transformedEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n return [4 /*yield*/, plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata)];\n case 1:\n transformedEntity = _a.sent();\n if (transformedEntity)\n return [2 /*return*/, this.merge(entityClass, transformedEntity, entityLike)];\n return [2 /*return*/, undefined];\n }\n });\n });\n };\n /**\n * Saves a given entity in the database.\n */\n EntityManager.prototype.save = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Removes a given entity from the database.\n */\n EntityManager.prototype.remove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Records the delete date of one or many given entities.\n */\n EntityManager.prototype.softRemove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Recovers one or many given entities.\n */\n EntityManager.prototype.recover = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n EntityManager.prototype.insert = function (target, entity) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()];\n });\n });\n };\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.update = function (target, criteria, partialEntity) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the update method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.delete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.softDelete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.restore = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n EntityManager.prototype.count = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount()];\n });\n });\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n EntityManager.prototype.find = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getMany()];\n });\n });\n };\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n EntityManager.prototype.findAndCount = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getManyAndCount()];\n });\n });\n };\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n EntityManager.prototype.findByIds = function (entityClass, ids, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return [2 /*return*/, Promise.resolve([])];\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, qb.andWhereInIds(ids).getMany()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions.\n */\n EntityManager.prototype.findOne = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n var findOptions, options, metadata, alias, qb, passedId;\n return __generator(this, function (_a) {\n findOptions = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n options = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions;\n metadata = this.connection.getMetadata(entityClass);\n alias = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n qb = this.createQueryBuilder(entityClass, alias);\n if (!findOptions || findOptions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias.metadata);\n passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || idOrOptionsOrConditions instanceof Date;\n if (!passedId) {\n findOptions = __assign(__assign({}, (findOptions || {})), { take: 1 });\n }\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n if (options) {\n qb.where(options);\n }\n else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n return [2 /*return*/, qb.getOne()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n EntityManager.prototype.findOneOrFail = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.findOne(entityClass, idOrOptionsOrConditions, maybeOptions).then(function (value) {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n })];\n });\n });\n };\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n EntityManager.prototype.clear = function (entityClass) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, queryRunner.clearTable(metadata.tablePath)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!this.queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.increment = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" + \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.decrement = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" - \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getRepository = function (target) {\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n // find already created repository instance and return it if found\n var metadata = this.connection.getMetadata(target);\n var repository = this.repositories.find(function (repository) { return repository.metadata === metadata; });\n if (repository)\n return repository;\n // if repository was not found then create it, store its instance and return it\n var newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n };\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getTreeRepository = function (target) {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n // check if repository is real tree repository\n var repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n return repository;\n };\n /**\n * Gets mongodb repository for the given entity class.\n */\n EntityManager.prototype.getMongoRepository = function (target) {\n return this.connection.getMongoRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n EntityManager.prototype.getCustomRepository = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n var entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n var entityRepositoryInstance = new entityRepositoryMetadataArgs.target(this, entityMetadata);\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!entityRepositoryInstance[\"manager\"])\n entityRepositoryInstance[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n entityRepositoryInstance[\"manager\"] = this;\n entityRepositoryInstance[\"metadata\"] = entityMetadata;\n }\n return entityRepositoryInstance;\n };\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n EntityManager.prototype.release = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n return [2 /*return*/, this.queryRunner.release()];\n });\n });\n };\n return EntityManager;\n}());\nexport { EntityManager };\n\n//# sourceMappingURL=EntityManager.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { EntityManager } from \"./EntityManager\";\n/**\n * A special EntityManager that includes import/export and load/save function\n * that are unique to Sql.js.\n */\nvar SqljsEntityManager = /** @class */ (function (_super) {\n __extends(SqljsEntityManager, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsEntityManager(connection, queryRunner) {\n var _this = _super.call(this, connection, queryRunner) || this;\n _this.driver = connection.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads either the definition from a file (Node.js) or localstorage (browser)\n * or uses the given definition to open a new database.\n */\n SqljsEntityManager.prototype.loadDatabase = function (fileNameOrLocalStorageOrData) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.load(fileNameOrLocalStorageOrData)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saves the current database to a file (Node.js) or localstorage (browser)\n * if fileNameOrLocalStorage is not set options.location is used.\n */\n SqljsEntityManager.prototype.saveDatabase = function (fileNameOrLocalStorage) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.save(fileNameOrLocalStorage)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database definition.\n */\n SqljsEntityManager.prototype.exportDatabase = function () {\n return this.driver.export();\n };\n return SqljsEntityManager;\n}(EntityManager));\nexport { SqljsEntityManager };\n\n//# sourceMappingURL=SqljsEntityManager.js.map\n","import { EntityManager } from \"./EntityManager\";\nimport { MongoEntityManager } from \"./MongoEntityManager\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqljsEntityManager } from \"./SqljsEntityManager\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\n/**\n * Helps to create entity managers.\n */\nvar EntityManagerFactory = /** @class */ (function () {\n function EntityManagerFactory() {\n }\n /**\n * Creates a new entity manager depend on a given connection's driver.\n */\n EntityManagerFactory.prototype.create = function (connection, queryRunner) {\n if (connection.driver instanceof MongoDriver)\n return new MongoEntityManager(connection);\n if (connection.driver instanceof SqljsDriver)\n return new SqljsEntityManager(connection, queryRunner);\n return new EntityManager(connection, queryRunner);\n };\n return EntityManagerFactory;\n}());\nexport { EntityManagerFactory };\n\n//# sourceMappingURL=EntityManagerFactory.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer specifies driver type that does not exist or supported.\n */\nvar MissingDriverError = /** @class */ (function (_super) {\n __extends(MissingDriverError, _super);\n function MissingDriverError(driverType) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDriverError\";\n Object.setPrototypeOf(_this, MissingDriverError.prototype);\n _this.message = \"Wrong driver: \\\"\" + driverType + \"\\\" given. Supported drivers are: \\\"cordova\\\", \\\"expo\\\", \\\"mariadb\\\", \\\"mongodb\\\", \\\"mssql\\\", \\\"mysql\\\", \\\"oracle\\\", \\\"postgres\\\", \\\"sqlite\\\", \\\"better-sqlite3\\\", \\\"sqljs\\\", \\\"react-native\\\", \\\"aurora-data-api\\\", \\\"aurora-data-api-pg\\\".\";\n return _this;\n }\n return MissingDriverError;\n}(Error));\nexport { MissingDriverError };\n\n//# sourceMappingURL=MissingDriverError.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar CordovaQueryRunner = /** @class */ (function (_super) {\n __extends(CordovaQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n CordovaQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n CordovaQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return CordovaQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { CordovaQueryRunner };\n\n//# sourceMappingURL=CordovaQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar CordovaDriver = /** @class */ (function (_super) {\n __extends(CordovaDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n CordovaDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n CordovaDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new CordovaQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n CordovaDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n CordovaDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = window.sqlitePlugin;\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"Cordova-SQLite\", \"cordova-sqlite-storage\");\n }\n };\n return CordovaDriver;\n}(AbstractSqliteDriver));\nexport { CordovaDriver };\n\n//# sourceMappingURL=CordovaDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ReactNativeQueryRunner = /** @class */ (function (_super) {\n __extends(ReactNativeQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n ReactNativeQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n ReactNativeQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return ReactNativeQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ReactNativeQueryRunner };\n\n//# sourceMappingURL=ReactNativeQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ReactNativeQueryRunner } from \"./ReactNativeQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar ReactNativeDriver = /** @class */ (function (_super) {\n __extends(ReactNativeDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ReactNativeDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ReactNativeDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ReactNativeQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ReactNativeDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n ReactNativeDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = require(\"react-native-sqlite-storage\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"React-Native\", \"react-native-sqlite-storage\");\n }\n };\n return ReactNativeDriver;\n}(AbstractSqliteDriver));\nexport { ReactNativeDriver };\n\n//# sourceMappingURL=ReactNativeDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ExpoQueryRunner = /** @class */ (function (_super) {\n __extends(ExpoQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n ExpoQueryRunner.prototype.startTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n ExpoQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n ExpoQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n ExpoQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(function (transaction) {\n if (typeof _this.transaction === \"undefined\") {\n _this.startTransaction();\n _this.transaction = transaction;\n }\n _this.transaction.executeSql(query, parameters, function (t, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n }\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (t, err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, function (err) {\n _this.rollbackTransaction();\n }, function () {\n _this.isTransactionActive = false;\n _this.transaction = undefined;\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n return ExpoQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ExpoQueryRunner };\n\n//# sourceMappingURL=ExpoQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ExpoQueryRunner } from \"./ExpoQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nvar ExpoDriver = /** @class */ (function (_super) {\n __extends(ExpoDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.driver)\n throw new DriverOptionNotSetError(\"driver\");\n // load sqlite package\n _this.sqlite = _this.options.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ExpoDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection._db.close();\n _this.databaseConnection = undefined;\n ok();\n }\n catch (error) {\n fail(error);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ExpoDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ExpoQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ExpoDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n try {\n var databaseConnection_1 = _this.sqlite.openDatabase(_this.options.database);\n /*\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n */\n databaseConnection_1.transaction(function (tsx) {\n tsx.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (t, result) {\n ok(databaseConnection_1);\n }, function (t, err) {\n fail({ transaction: t, error: err });\n });\n }, function (err) {\n fail(err);\n });\n }\n catch (error) {\n fail(error);\n }\n });\n };\n return ExpoDriver;\n}(AbstractSqliteDriver));\nexport { ExpoDriver };\n\n//# sourceMappingURL=ExpoDriver.js.map\n","import { __awaiter, __extends, __generator, __read, __values } from \"tslib\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { TableExclusion } from \"../../schema-builder/table/TableExclusion\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { Query } from \"../Query\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single postgres database connection.\n */\nvar PostgresQueryRunner = /** @class */ (function (_super) {\n __extends(PostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function PostgresQueryRunner(driver, mode) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.mode = mode;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n PostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n PostgresQueryRunner.prototype.release = function () {\n if (this.isReleased) {\n return Promise.resolve();\n }\n this.isReleased = true;\n if (this.releaseCallback)\n this.releaseCallback();\n var index = this.driver.connectedQueryRunners.indexOf(this);\n if (index !== -1)\n this.driver.connectedQueryRunners.splice(index);\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n PostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"START TRANSACTION\")];\n case 3:\n _a.sent();\n if (!isolationLevel) return [3 /*break*/, 5];\n return [4 /*yield*/, this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5:\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 7];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n PostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, result, maxQueryExecutionTime, queryEndTime, queryExecutionTime, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n queryStartTime = +new Date();\n return [4 /*yield*/, databaseConnection.query(query, parameters)];\n case 3:\n result = _a.sent();\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n switch (result.command) {\n case \"DELETE\":\n case \"UPDATE\":\n // for UPDATE and DELETE query additionally return number of affected rows\n return [2 /*return*/, [result.rows, result.rowCount]];\n break;\n default:\n return [2 /*return*/, result.rows];\n }\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n this.driver.connection.logger.logQueryError(err_1, query, parameters, this);\n throw new QueryFailedError(query, parameters, err_1);\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n PostgresQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n var _this = this;\n var QueryStream = this.driver.loadStreamDependency();\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, stream, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n stream = databaseConnection.query(new QueryStream(query, parameters));\n if (onEnd)\n stream.on(\"end\", onEnd);\n if (onError)\n stream.on(\"error\", onError);\n ok(stream);\n return [3 /*break*/, 3];\n case 2:\n err_2 = _a.sent();\n fail(err_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Returns all available database names including system databases.\n */\n PostgresQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n PostgresQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n PostgresQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n PostgresQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM \\\"information_schema\\\".\\\"schemata\\\" WHERE \\\"schema_name\\\" = '\" + schema + \"'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName;\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n PostgresQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName + \" AND \\\"column_name\\\" = '\" + columnName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Creates a new database.\n * Postgres does not supports database creation inside a transaction block.\n */\n PostgresQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops database.\n * Postgres does not supports database drop inside a transaction block.\n */\n PostgresQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n PostgresQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n var up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n up = ifNotExist ? \"CREATE SCHEMA IF NOT EXISTS \\\"\" + schema + \"\\\"\" : \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n down = \"DROP SCHEMA \\\"\" + schema + \"\\\" CASCADE\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops table schema.\n */\n PostgresQueryRunner.prototype.dropSchema = function (schemaPath, ifExist, isCascade) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = schemaPath.indexOf(\".\") === -1 ? schemaPath : schemaPath.split(\".\")[0];\n up = ifExist ? \"DROP SCHEMA IF EXISTS \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\") : \"DROP SCHEMA \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\");\n down = \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new table.\n */\n PostgresQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _b.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n upQueries = [];\n downQueries = [];\n enumColumns = table.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n createdEnumTypes = [];\n _b.label = 3;\n case 3:\n _b.trys.push([3, 8, 9, 10]);\n enumColumns_1 = __values(enumColumns), enumColumns_1_1 = enumColumns_1.next();\n _b.label = 4;\n case 4:\n if (!!enumColumns_1_1.done) return [3 /*break*/, 7];\n column = enumColumns_1_1.value;\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 5:\n hasEnum = _b.sent();\n enumName = this.buildEnumName(table, column);\n // if enum with the same \"enumName\" is defined more then once, me must prevent double creation\n if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {\n createdEnumTypes.push(enumName);\n upQueries.push(this.createEnumTypeSql(table, column, enumName));\n downQueries.push(this.dropEnumTypeSql(table, column, enumName));\n }\n _b.label = 6;\n case 6:\n enumColumns_1_1 = enumColumns_1.next();\n return [3 /*break*/, 4];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (enumColumns_1_1 && !enumColumns_1_1.done && (_a = enumColumns_1.return)) _a.call(enumColumns_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return downQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(table, index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n PostgresQueryRunner.prototype.dropTable = function (target, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, tableName, table, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(target)];\n case 1:\n isTableExist = _a.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n tableName = target instanceof Table ? target.name : target;\n return [4 /*yield*/, this.getCachedTable(tableName)];\n case 3:\n table = _a.sent();\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(table, index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n if (dropForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return upQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n upQueries.push(this.dropTableSql(table));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n PostgresQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 1:\n _b.apply(_a, [_e.sent()]);\n downQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _d.apply(_c, [_e.sent()]);\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n PostgresQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _e.sent();\n upQueries = [];\n downQueries = [];\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _b.apply(_a, [_e.sent()]);\n upQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 3:\n _d.apply(_c, [_e.sent()]);\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, oldTable, _a, newTable, oldTableName, schemaName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;\n var e_2, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _c.sent();\n _c.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n oldTableName = oldTable.name.indexOf(\".\") === -1 ? oldTable.name : oldTable.name.split(\".\")[1];\n schemaName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n newTable.name = schemaName ? schemaName + \".\" + newTableName : newTableName;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(oldTable) + \" RENAME TO \\\"\" + newTableName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME TO \\\"\" + oldTableName + \"\\\"\"));\n // rename column primary key constraint\n if (newTable.primaryColumns.length > 0) {\n columnNames = newTable.primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename sequences\n newTable.columns.map(function (col) {\n if (col.isGenerated && col.generationStrategy === \"increment\") {\n var seqName = _this.buildSequenceName(oldTable, col.name, undefined, true, true);\n var newSeqName = _this.buildSequenceName(newTable, col.name, undefined, true, true);\n var up = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n var down = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n });\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n // build new constraint name\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n newTable.indices.forEach(function (index) {\n // build new constraint name\n var schema = _this.extractSchema(newTable);\n var newIndexName = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n // build new constraint name\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n enumColumns = newTable.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n _c.label = 4;\n case 4:\n _c.trys.push([4, 9, 10, 11]);\n enumColumns_2 = __values(enumColumns), enumColumns_2_1 = enumColumns_2.next();\n _c.label = 5;\n case 5:\n if (!!enumColumns_2_1.done) return [3 /*break*/, 8];\n column = enumColumns_2_1.value;\n return [4 /*yield*/, this.getEnumTypeName(oldTable, column)];\n case 6:\n oldEnumType = _c.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(newTable, column, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(newTable, column) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _c.label = 7;\n case 7:\n enumColumns_2_1 = enumColumns_2.next();\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 11];\n case 9:\n e_2_1 = _c.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 11];\n case 10:\n try {\n if (enumColumns_2_1 && !enumColumns_2_1.done && (_b = enumColumns_2.return)) _b.call(enumColumns_2);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 12:\n _c.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 5];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) {\n upQueries.push(this.createEnumTypeSql(table, column));\n downQueries.push(this.dropEnumTypeSql(table, column));\n }\n _b.label = 5;\n case 5:\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n // create or update primary key constraint\n if (column.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if table already have primary key, me must drop it and recreate again\n if (primaryColumns.length > 0) {\n pkName_1 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_1 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_1 + \"\\\" PRIMARY KEY (\" + columnNames_1 + \")\"));\n }\n primaryColumns.push(column);\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex));\n downQueries.push(this.dropIndexSql(table, columnIndex));\n }\n // create unique constraint\n if (column.isUnique) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + column.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n // create column's comment\n if (column.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n clonedTable.addColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_1, columns_1_1, column, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_1 = __values(columns), columns_1_1 = columns_1.next();\n _b.label = 1;\n case 1:\n if (!!columns_1_1.done) return [3 /*break*/, 4];\n column = columns_1_1.value;\n return [4 /*yield*/, this.addColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_1_1 = columns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n PostgresQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, schema, seqName, newSeqName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n defaultValueChanged = false;\n oldColumn = oldTableColumnOrName instanceof TableColumn\n ? oldTableColumnOrName\n : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];\n // To avoid data conversion, we just recreate column\n return [4 /*yield*/, this.dropColumn(table, oldColumn)];\n case 4:\n // To avoid data conversion, we just recreate column\n _b.sent();\n return [4 /*yield*/, this.addColumn(table, newColumn)];\n case 5:\n _b.sent();\n // update cloned table\n clonedTable = table.clone();\n return [3 /*break*/, 10];\n case 6:\n if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];\n // rename column\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + oldColumn.name + \"\\\" TO \\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + newColumn.name + \"\\\" TO \\\"\" + oldColumn.name + \"\\\"\"));\n if (!(oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")) return [3 /*break*/, 8];\n return [4 /*yield*/, this.getEnumTypeName(table, oldColumn)];\n case 7:\n oldEnumType = _b.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(table, newColumn, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(table, newColumn) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _b.label = 8;\n case 8:\n // rename column primary key constraint\n if (oldColumn.isPrimary === true) {\n primaryColumns = clonedTable.primaryColumns;\n columnNames = primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n // replace old column name with new column name\n columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n columnNames.push(newColumn.name);\n newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename column sequence\n if (oldColumn.isGenerated === true && newColumn.generationStrategy === \"increment\") {\n schema = this.extractSchema(table);\n seqName = this.buildSequenceName(table, oldColumn.name, undefined, true, true);\n newSeqName = this.buildSequenceName(table, newColumn.name, undefined, true, true);\n up = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n down = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n // rename unique constraints\n clonedTable.findColumnUniques(oldColumn).forEach(function (unique) {\n // build new constraint name\n unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n unique.columnNames.push(newColumn.name);\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach(function (index) {\n // build new constraint name\n index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n index.columnNames.push(newColumn.name);\n var schema = _this.extractSchema(table);\n var newIndexName = _this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n clonedTable.findColumnForeignKeys(oldColumn).forEach(function (foreignKey) {\n // build new constraint name\n foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n foreignKey.columnNames.push(newColumn.name);\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n oldTableColumn = clonedTable.columns.find(function (column) { return column.name === oldColumn.name; });\n clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn)].name = newColumn.name;\n oldColumn.name = newColumn.name;\n _b.label = 9;\n case 9:\n if (newColumn.precision !== oldColumn.precision || newColumn.scale !== oldColumn.scale) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n if ((newColumn.type === \"enum\" || newColumn.type === \"simple-enum\")\n && (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")\n && (!OrmUtils.isArraysEqual(newColumn.enum, oldColumn.enum) || newColumn.enumName !== oldColumn.enumName)) {\n arraySuffix = newColumn.isArray ? \"[]\" : \"\";\n newEnumName = this.buildEnumName(table, newColumn);\n oldEnumName = this.buildEnumName(table, oldColumn);\n oldEnumNameWithoutSchema = this.buildEnumName(table, oldColumn, false);\n oldEnumNameWithSchema_old = this.buildEnumName(table, oldColumn, true, false, true);\n oldEnumNameWithoutSchema_old = this.buildEnumName(table, oldColumn, false, false, true);\n // rename old ENUM\n upQueries.push(new Query(\"ALTER TYPE \" + oldEnumName + \" RENAME TO \" + oldEnumNameWithoutSchema_old));\n downQueries.push(new Query(\"ALTER TYPE \" + oldEnumNameWithSchema_old + \" RENAME TO \" + oldEnumNameWithoutSchema));\n // create new ENUM\n upQueries.push(this.createEnumTypeSql(table, newColumn, newEnumName));\n downQueries.push(this.dropEnumTypeSql(table, newColumn, newEnumName));\n // if column have default value, we must drop it to avoid issues with type casting\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n // mark default as changed to prevent double update\n defaultValueChanged = true;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n upType = \"\" + newEnumName + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + newEnumName + arraySuffix;\n downType = \"\" + oldEnumNameWithSchema_old + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + oldEnumNameWithSchema_old + arraySuffix;\n // update column to use new type\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + upType));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + downType));\n // restore column default or create new one\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n // remove old ENUM\n upQueries.push(this.dropEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n }\n if (oldColumn.isNullable !== newColumn.isNullable) {\n if (newColumn.isNullable) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n }\n }\n if (oldColumn.comment !== newColumn.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + oldColumn.name + \"\\\" IS \" + this.escapeComment(newColumn.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\" IS \" + this.escapeComment(oldColumn.comment)));\n }\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n }\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = true;\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n else {\n primaryColumn = primaryColumns.find(function (c) { return c.name === newColumn.name; });\n primaryColumns.splice(primaryColumns.indexOf(primaryColumn), 1);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = false;\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n }\n }\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n columnNames: [newColumn.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n else {\n uniqueConstraint = clonedTable.uniques.find(function (unique) {\n return unique.columnNames.length === 1 && !!unique.columnNames.find(function (columnName) { return columnName === newColumn.name; });\n });\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint), 1);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n }\n }\n if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") {\n if (newColumn.isGenerated === true) {\n upQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n upQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n downQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n }\n }\n // the default might have changed when the enum changed\n if (newColumn.default !== oldColumn.default && !defaultValueChanged) {\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n else {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n }\n else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n }\n if ((newColumn.spatialFeatureType || \"\").toLowerCase() !== (oldColumn.spatialFeatureType || \"\").toLowerCase() || newColumn.srid !== oldColumn.srid) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n _b.label = 10;\n case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;\n var e_4, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5, 6, 7]);\n changedColumns_1 = __values(changedColumns), changedColumns_1_1 = changedColumns_1.next();\n _c.label = 1;\n case 1:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 4];\n _a = changedColumns_1_1.value, oldColumn = _a.oldColumn, newColumn = _a.newColumn;\n return [4 /*yield*/, this.changeColumn(tableOrName, oldColumn, newColumn)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_4_1 = _c.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n // drop primary key constraint\n if (column.isPrimary) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n tableColumn = clonedTable.findColumnByName(column.name);\n tableColumn.isPrimary = false;\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n pkName_2 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames_2 = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName_2 + \"\\\" PRIMARY KEY (\" + columnNames_2 + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName_2 + \"\\\"\"));\n }\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n upQueries.push(this.dropIndexSql(table, columnIndex));\n downQueries.push(this.createIndexSql(table, columnIndex));\n }\n columnCheck = clonedTable.checks.find(function (check) { return !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name; });\n if (columnCheck) {\n clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n }\n columnUnique = clonedTable.uniques.find(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (columnUnique) {\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n }\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 6];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) return [3 /*break*/, 6];\n return [4 /*yield*/, this.getEnumTypeName(table, column)];\n case 5:\n enumType = _b.sent();\n escapedEnumName = \"\\\"\" + enumType.enumTypeSchema + \"\\\".\\\"\" + enumType.enumTypeName + \"\\\"\";\n upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));\n downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));\n _b.label = 6;\n case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 7:\n _b.sent();\n clonedTable.removeColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_2, columns_2_1, column, e_5_1;\n var e_5, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_2 = __values(columns), columns_2_1 = columns_2.next();\n _b.label = 1;\n case 1:\n if (!!columns_2_1.done) return [3 /*break*/, 4];\n column = columns_2_1.value;\n return [4 /*yield*/, this.dropColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_2_1 = columns_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_5_1 = _b.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n PostgresQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n up = this.createPrimaryKeySql(table, columnNames);\n // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n clonedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n down = this.dropPrimaryKeySql(clonedTable);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n PostgresQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, columnNames, upQueries, downQueries, primaryColumns, pkName_3, columnNamesString_1, pkName, columnNamesString;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n columnNames = columns.map(function (column) { return column.name; });\n upQueries = [];\n downQueries = [];\n primaryColumns = clonedTable.primaryColumns;\n if (primaryColumns.length > 0) {\n pkName_3 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNamesString_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_3 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_3 + \"\\\" PRIMARY KEY (\" + columnNamesString_1 + \")\"));\n }\n // update columns in table.\n clonedTable.columns\n .filter(function (column) { return columnNames.indexOf(column.name) !== -1; })\n .forEach(function (column) { return column.isPrimary = true; });\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n PostgresQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n up = this.dropPrimaryKeySql(table);\n down = this.createPrimaryKeySql(table, table.primaryColumns.map(function (column) { return column.name; }));\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraint.\n */\n PostgresQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!uniqueConstraint.name)\n uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n up = this.createUniqueConstraintSql(table, uniqueConstraint);\n down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraints.\n */\n PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;\n var e_6, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_1 = __values(uniqueConstraints), uniqueConstraints_1_1 = uniqueConstraints_1.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_1_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_1_1.value;\n return [4 /*yield*/, this.createUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_1_1 = uniqueConstraints_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_6_1 = _b.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraint.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n down = this.createUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraints.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;\n var e_7, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_2 = __values(uniqueConstraints), uniqueConstraints_2_1 = uniqueConstraints_2.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_2_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_2_1.value;\n return [4 /*yield*/, this.dropUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_2_1 = uniqueConstraints_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_7_1 = _b.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n PostgresQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!checkConstraint.name)\n checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression);\n up = this.createCheckConstraintSql(table, checkConstraint);\n down = this.dropCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n PostgresQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.createCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n PostgresQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n up = this.dropCheckConstraintSql(table, checkConstraint);\n down = this.createCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n PostgresQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.dropCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraint.\n */\n PostgresQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!exclusionConstraint.name)\n exclusionConstraint.name = this.connection.namingStrategy.exclusionConstraintName(table.name, exclusionConstraint.expression);\n up = this.createExclusionConstraintSql(table, exclusionConstraint);\n down = this.dropExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraints.\n */\n PostgresQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.createExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, exclusionConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n exclusionConstraint = exclusionOrName instanceof TableExclusion ? exclusionOrName : table.exclusions.find(function (c) { return c.name === exclusionOrName; });\n if (!exclusionConstraint)\n throw new Error(\"Supplied exclusion constraint was not found in table \" + table.name);\n up = this.dropExclusionConstraintSql(table, exclusionConstraint);\n down = this.createExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.dropExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n PostgresQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new FK may be passed without name. In this case we generate FK name manually.\n if (!foreignKey.name)\n foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n up = this.createForeignKeySql(table, foreignKey);\n down = this.dropForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;\n var e_8, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_1 = __values(foreignKeys), foreignKeys_1_1 = foreignKeys_1.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_1_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_1_1.value;\n return [4 /*yield*/, this.createForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_1_1 = foreignKeys_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_8_1 = _b.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n up = this.dropForeignKeySql(table, foreignKey);\n down = this.createForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;\n var e_9, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_2 = __values(foreignKeys), foreignKeys_2_1 = foreignKeys_2.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_2_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_2_1.value;\n return [4 /*yield*/, this.dropForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_2_1 = foreignKeys_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_9_1 = _b.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n PostgresQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_1, indices_1_1, index, e_10_1;\n var e_10, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_1 = __values(indices), indices_1_1 = indices_1.next();\n _b.label = 1;\n case 1:\n if (!!indices_1_1.done) return [3 /*break*/, 4];\n index = indices_1_1.value;\n return [4 /*yield*/, this.createIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_1_1 = indices_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_10_1 = _b.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n PostgresQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(table, index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_2, indices_2_1, index, e_11_1;\n var e_11, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_2 = __values(indices), indices_2_1 = indices_2.next();\n _b.label = 1;\n case 1:\n if (!!indices_2_1.done) return [3 /*break*/, 4];\n index = indices_2_1.value;\n return [4 /*yield*/, this.dropIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_2_1 = indices_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_11_1 = _b.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n PostgresQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"TRUNCATE TABLE \" + this.escapePath(tableName))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n PostgresQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var schemas, schemaNamesString, selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schemas = [];\n this.connection.entityMetadatas\n .filter(function (metadata) { return metadata.schema; })\n .forEach(function (metadata) {\n var isSchemaExist = !!schemas.find(function (schema) { return schema === metadata.schema; });\n if (!isSchemaExist)\n schemas.push(metadata.schema);\n });\n schemas.push(this.driver.options.schema || \"current_schema()\");\n schemaNamesString = schemas.map(function (name) {\n return name === \"current_schema()\" ? name : \"'\" + name + \"'\";\n }).join(\", \");\n return [4 /*yield*/, this.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 9, , 14]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW IF EXISTS \\\"' || schemaname || '\\\".\\\"' || viewname || '\\\" CASCADE;' as \\\"query\\\" \" +\n (\"FROM \\\"pg_views\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"viewname\\\" NOT IN ('geography_columns', 'geometry_columns', 'raster_columns', 'raster_overviews')\");\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 3:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 4:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE IF EXISTS \\\"' || schemaname || '\\\".\\\"' || tablename || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_tables\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"tablename\\\" NOT IN ('spatial_ref_sys')\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 5:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.dropEnumTypes(schemaNamesString)];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 14];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n PostgresQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, currentSchemaQuery, currentSchema, viewsCondition, query, dbViews;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 2:\n currentSchemaQuery = _a.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewsCondition = viewNames.map(function (viewName) {\n var _a = __read(viewName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"t\\\".\\\"schema\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n query = \"SELECT \\\"t\\\".*, \\\"v\\\".\\\"check_option\\\" FROM \" + this.escapePath(this.getTypeormMetadataTableName()) + \" \\\"t\\\" \" +\n (\"INNER JOIN \\\"information_schema\\\".\\\"views\\\" \\\"v\\\" ON \\\"v\\\".\\\"table_schema\\\" = \\\"t\\\".\\\"schema\\\" AND \\\"v\\\".\\\"table_name\\\" = \\\"t\\\".\\\"name\\\" WHERE \\\"t\\\".\\\"type\\\" = 'VIEW' \" + (viewsCondition ? \"AND (\" + viewsCondition + \")\" : \"\"));\n return [4 /*yield*/, this.query(query)];\n case 3:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n var schema = dbView[\"schema\"] === currentSchema && !_this.driver.options.schema ? undefined : dbView[\"schema\"];\n view.name = _this.driver.buildTableName(dbView[\"name\"], schema);\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n PostgresQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, hasRelispartitionColumn, isPartitionCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n tablesCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n tablesSql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \" + tablesCondition;\n columnsSql = \"\\n SELECT columns.*,\\n pg_catalog.col_description(('\\\"' || table_catalog || '\\\".\\\"' || table_schema || '\\\".\\\"' || table_name || '\\\"')::regclass::oid, ordinal_position) AS description,\\n ('\\\"' || \\\"udt_schema\\\" || '\\\".\\\"' || \\\"udt_name\\\" || '\\\"')::\\\"regtype\\\" AS \\\"regtype\\\",\\n pg_catalog.format_type(\\\"col_attr\\\".\\\"atttypid\\\", \\\"col_attr\\\".\\\"atttypmod\\\") AS \\\"format_type\\\"\\n FROM \\\"information_schema\\\".\\\"columns\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_attribute\\\" AS \\\"col_attr\\\"\\n ON \\\"col_attr\\\".\\\"attname\\\" = \\\"columns\\\".\\\"column_name\\\"\\n AND \\\"col_attr\\\".\\\"attrelid\\\" = (\\n SELECT\\n \\\"cls\\\".\\\"oid\\\" FROM \\\"pg_catalog\\\".\\\"pg_class\\\" AS \\\"cls\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_namespace\\\" AS \\\"ns\\\"\\n ON \\\"ns\\\".\\\"oid\\\" = \\\"cls\\\".\\\"relnamespace\\\"\\n WHERE \\\"cls\\\".\\\"relname\\\" = \\\"columns\\\".\\\"table_name\\\"\\n AND \\\"ns\\\".\\\"nspname\\\" = \\\"columns\\\".\\\"table_schema\\\"\\n )\\n WHERE\\n \" + tablesCondition;\n constraintsCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n constraintsSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"cnst\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \" +\n \"pg_get_constraintdef(\\\"cnst\\\".\\\"oid\\\") AS \\\"expression\\\", \" +\n \"CASE \\\"cnst\\\".\\\"contype\\\" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS \\\"constraint_type\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\" \" +\n \"FROM \\\"pg_constraint\\\" \\\"cnst\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"conrelid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"connamespace\\\" \" +\n \"LEFT JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"cnst\\\".\\\"conrelid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"cnst\\\".\\\"conkey\\\") \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND (\" + constraintsCondition + \")\");\n indicesSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"i\\\".\\\"relname\\\" AS \\\"constraint_name\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"CASE \\\"ix\\\".\\\"indisunique\\\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \\\"is_unique\\\", pg_get_expr(\\\"ix\\\".\\\"indpred\\\", \\\"ix\\\".\\\"indrelid\\\") AS \\\"condition\\\", \" +\n \"\\\"types\\\".\\\"typname\\\" AS \\\"type_name\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_index\\\" \\\"ix\\\" ON \\\"ix\\\".\\\"indrelid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"t\\\".\\\"oid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"ix\\\".\\\"indkey\\\") \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"t\\\".\\\"relnamespace\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"i\\\" ON \\\"i\\\".\\\"oid\\\" = \\\"ix\\\".\\\"indexrelid\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"types\\\" ON \\\"types\\\".\\\"oid\\\" = \\\"a\\\".\\\"atttypid\\\" \" +\n \"LEFT JOIN \\\"pg_constraint\\\" \\\"cnst\\\" ON \\\"cnst\\\".\\\"conname\\\" = \\\"i\\\".\\\"relname\\\" \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND \\\"cnst\\\".\\\"contype\\\" IS NULL AND (\" + constraintsCondition + \")\");\n foreignKeysCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"cl\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n return [4 /*yield*/, this.hasSupportForPartitionedTables()];\n case 2:\n hasRelispartitionColumn = _b.sent();\n isPartitionCondition = hasRelispartitionColumn ? \" AND \\\"cl\\\".\\\"relispartition\\\" = 'f'\" : \"\";\n foreignKeysSql = \"SELECT \\\"con\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \\\"con\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"con\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"att2\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"\\\"ns\\\".\\\"nspname\\\" AS \\\"referenced_table_schema\\\", \\\"cl\\\".\\\"relname\\\" AS \\\"referenced_table_name\\\", \\\"att\\\".\\\"attname\\\" AS \\\"referenced_column_name\\\", \\\"con\\\".\\\"confdeltype\\\" AS \\\"on_delete\\\", \" +\n \"\\\"con\\\".\\\"confupdtype\\\" AS \\\"on_update\\\", \\\"con\\\".\\\"condeferrable\\\" AS \\\"deferrable\\\", \\\"con\\\".\\\"condeferred\\\" AS \\\"deferred\\\" \" +\n \"FROM ( \" +\n \"SELECT UNNEST (\\\"con1\\\".\\\"conkey\\\") AS \\\"parent\\\", UNNEST (\\\"con1\\\".\\\"confkey\\\") AS \\\"child\\\", \\\"con1\\\".\\\"confrelid\\\", \\\"con1\\\".\\\"conrelid\\\", \\\"con1\\\".\\\"conname\\\", \\\"con1\\\".\\\"contype\\\", \\\"ns\\\".\\\"nspname\\\", \" +\n \"\\\"cl\\\".\\\"relname\\\", \\\"con1\\\".\\\"condeferrable\\\", \" +\n \"CASE WHEN \\\"con1\\\".\\\"condeferred\\\" THEN 'INITIALLY DEFERRED' ELSE 'INITIALLY IMMEDIATE' END as condeferred, \" +\n \"CASE \\\"con1\\\".\\\"confdeltype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confdeltype\\\", \" +\n \"CASE \\\"con1\\\".\\\"confupdtype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confupdtype\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"cl\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_constraint\\\" \\\"con1\\\" ON \\\"con1\\\".\\\"conrelid\\\" = \\\"cl\\\".\\\"oid\\\" \" +\n (\"WHERE \\\"con1\\\".\\\"contype\\\" = 'f' AND (\" + foreignKeysCondition + \") \") +\n \") \\\"con\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att\\\" ON \\\"att\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"confrelid\\\" AND \\\"att\\\".\\\"attnum\\\" = \\\"con\\\".\\\"child\\\" \" +\n (\"INNER JOIN \\\"pg_class\\\" \\\"cl\\\" ON \\\"cl\\\".\\\"oid\\\" = \\\"con\\\".\\\"confrelid\\\" \" + isPartitionCondition) +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att2\\\" ON \\\"att2\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"conrelid\\\" AND \\\"att2\\\".\\\"attnum\\\" = \\\"con\\\".\\\"parent\\\"\";\n return [4 /*yield*/, Promise.all([\n this.query(tablesSql),\n this.query(columnsSql),\n this.query(constraintsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])];\n case 3:\n _a = __read.apply(void 0, [_b.sent(), 5]), dbTables = _a[0], dbColumns = _a[1], dbConstraints = _a[2], dbIndices = _a[3], dbForeignKeys = _a[4];\n // if tables were not found in the db, no need to proceed\n if (!dbTables.length)\n return [2 /*return*/, []];\n // create tables for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, getSchemaFromKey, schema, tableFullName, _a, tableUniqueConstraints, tableCheckConstraints, tableExclusionConstraints, tableForeignKeyConstraints, tableIndexConstraints;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = new Table();\n getSchemaFromKey = function (dbObject, key) { return dbObject[key] === currentSchema && !_this.driver.options.schema ? undefined : dbObject[key]; };\n schema = getSchemaFromKey(dbTable, \"table_schema\");\n table.name = this.driver.buildTableName(dbTable[\"table_name\"], schema);\n tableFullName = this.driver.buildTableName(dbTable[\"table_name\"], dbTable[\"table_schema\"]);\n // create columns from the loaded columns\n _a = table;\n return [4 /*yield*/, Promise.all(dbColumns\n .filter(function (dbColumn) { return _this.driver.buildTableName(dbColumn[\"table_name\"], dbColumn[\"table_schema\"]) === tableFullName; })\n .map(function (dbColumn) { return __awaiter(_this, void 0, void 0, function () {\n var columnConstraints, tableColumn, type, enumTypeName, builtEnumName, sql, results, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraint, isConstraintComposite;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n columnConstraints = dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName && dbConstraint[\"column_name\"] === dbColumn[\"column_name\"];\n });\n tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"column_name\"];\n tableColumn.type = dbColumn[\"regtype\"].toLowerCase();\n if (tableColumn.type === \"numeric\" || tableColumn.type === \"decimal\" || tableColumn.type === \"float\") {\n // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property\n // we set 'undefined' in to unspecified property to avoid changing column on sync\n if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.precision = dbColumn[\"numeric_precision\"];\n }\n else if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.precision = undefined;\n }\n if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.scale = dbColumn[\"numeric_scale\"];\n }\n else if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.scale = undefined;\n }\n }\n if (dbColumn[\"data_type\"].toLowerCase() === \"array\") {\n tableColumn.isArray = true;\n type = tableColumn.type.replace(\"[]\", \"\");\n tableColumn.type = this.connection.driver.normalizeType({ type: type });\n }\n if (tableColumn.type === \"interval\"\n || tableColumn.type === \"time without time zone\"\n || tableColumn.type === \"time with time zone\"\n || tableColumn.type === \"timestamp without time zone\"\n || tableColumn.type === \"timestamp with time zone\") {\n tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"datetime_precision\"]) ? dbColumn[\"datetime_precision\"] : undefined;\n }\n if (!(tableColumn.type.indexOf(\"enum\") !== -1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getEnumTypeName(table, tableColumn)];\n case 1:\n enumTypeName = (_a.sent()).enumTypeName;\n builtEnumName = this.buildEnumName(table, tableColumn, false, true);\n if (builtEnumName !== enumTypeName)\n tableColumn.enumName = enumTypeName;\n tableColumn.type = \"enum\";\n sql = \"SELECT \\\"e\\\".\\\"enumlabel\\\" AS \\\"value\\\" FROM \\\"pg_enum\\\" \\\"e\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"e\\\".\\\"enumtypid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = '\" + dbTable[\"table_schema\"] + \"' AND \\\"t\\\".\\\"typname\\\" = '\" + this.buildEnumName(table, tableColumn, false, true) + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 2:\n results = _a.sent();\n tableColumn.enum = results.map(function (result) { return result[\"value\"]; });\n _a.label = 3;\n case 3:\n if (!(tableColumn.type === \"geometry\")) return [3 /*break*/, 5];\n geometryColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geometry_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geometry_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geometryColumnSql)];\n case 4:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 5;\n case 5:\n if (!(tableColumn.type === \"geography\")) return [3 /*break*/, 7];\n geographyColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geography_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geography_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geographyColumnSql)];\n case 6:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 7;\n case 7:\n // check only columns that have length property\n if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1) {\n if (tableColumn.isArray) {\n match = /\\((\\d+)\\)/.exec(dbColumn[\"format_type\"]);\n length_1 = match ? match[1] : undefined;\n }\n else if (dbColumn[\"character_maximum_length\"]) {\n length_1 = dbColumn[\"character_maximum_length\"].toString();\n }\n if (length_1) {\n tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length_1) ? length_1 : \"\";\n }\n }\n tableColumn.isNullable = dbColumn[\"is_nullable\"] === \"YES\";\n tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"PRIMARY\"; });\n uniqueConstraint = columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"UNIQUE\"; });\n isConstraintComposite = uniqueConstraint\n ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint[\"constraint_type\"] === \"UNIQUE\"\n && dbConstraint[\"constraint_name\"] === uniqueConstraint[\"constraint_name\"]\n && dbConstraint[\"column_name\"] !== dbColumn[\"column_name\"]; })\n : false;\n tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n if (dbColumn[\"column_default\"] !== null && dbColumn[\"column_default\"] !== undefined) {\n if (dbColumn[\"column_default\"].replace(/\"/gi, \"\") === \"nextval('\" + this.buildSequenceName(table, dbColumn[\"column_name\"], currentSchema, true) + \"'::regclass)\") {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"increment\";\n }\n else if (dbColumn[\"column_default\"] === \"gen_random_uuid()\" || /^uuid_generate_v\\d\\(\\)/.test(dbColumn[\"column_default\"])) {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"uuid\";\n }\n else {\n tableColumn.default = dbColumn[\"column_default\"].replace(/::.*/, \"\");\n tableColumn.default = tableColumn.default.replace(/^(-?\\d+)$/, \"'$1'\");\n }\n }\n tableColumn.comment = dbColumn[\"description\"] ? dbColumn[\"description\"] : undefined;\n if (dbColumn[\"character_set_name\"])\n tableColumn.charset = dbColumn[\"character_set_name\"];\n if (dbColumn[\"collation_name\"])\n tableColumn.collation = dbColumn[\"collation_name\"];\n return [2 /*return*/, tableColumn];\n }\n });\n }); }))];\n case 1:\n // create columns from the loaded columns\n _a.columns = _b.sent();\n tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"UNIQUE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.uniques = tableUniqueConstraints.map(function (constraint) {\n var uniques = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableUnique({\n name: constraint[\"constraint_name\"],\n columnNames: uniques.map(function (u) { return u[\"column_name\"]; })\n });\n });\n tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"CHECK\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.checks = tableCheckConstraints.map(function (constraint) {\n var checks = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableCheck({\n name: constraint[\"constraint_name\"],\n columnNames: checks.map(function (c) { return c[\"column_name\"]; }),\n expression: constraint[\"expression\"].replace(/^\\s*CHECK\\s*\\((.*)\\)\\s*$/i, \"$1\")\n });\n });\n tableExclusionConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"EXCLUDE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.exclusions = tableExclusionConstraints.map(function (constraint) {\n return new TableExclusion({\n name: constraint[\"constraint_name\"],\n expression: constraint[\"expression\"].substring(8) // trim EXCLUDE from start of expression\n });\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(function (dbForeignKey) {\n return _this.driver.buildTableName(dbForeignKey[\"table_name\"], dbForeignKey[\"table_schema\"]) === tableFullName;\n }), function (dbForeignKey) { return dbForeignKey[\"constraint_name\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (dbForeignKey) {\n var foreignKeys = dbForeignKeys.filter(function (dbFk) { return dbFk[\"constraint_name\"] === dbForeignKey[\"constraint_name\"]; });\n // if referenced table located in currently used schema, we don't need to concat schema name to table name.\n var schema = getSchemaFromKey(dbForeignKey, \"referenced_table_schema\");\n var referencedTableName = _this.driver.buildTableName(dbForeignKey[\"referenced_table_name\"], schema);\n return new TableForeignKey({\n name: dbForeignKey[\"constraint_name\"],\n columnNames: foreignKeys.map(function (dbFk) { return dbFk[\"column_name\"]; }),\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk[\"referenced_column_name\"]; }),\n onDelete: dbForeignKey[\"on_delete\"],\n onUpdate: dbForeignKey[\"on_update\"],\n deferrable: dbForeignKey[\"deferrable\"] ? dbForeignKey[\"deferred\"] : undefined,\n });\n });\n tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(function (dbIndex) {\n return _this.driver.buildTableName(dbIndex[\"table_name\"], dbIndex[\"table_schema\"]) === tableFullName;\n }), function (dbIndex) { return dbIndex[\"constraint_name\"]; });\n table.indices = tableIndexConstraints.map(function (constraint) {\n var indices = dbIndices.filter(function (index) {\n return index[\"table_schema\"] === constraint[\"table_schema\"]\n && index[\"table_name\"] === constraint[\"table_name\"]\n && index[\"constraint_name\"] === constraint[\"constraint_name\"];\n });\n return new TableIndex({\n table: table,\n name: constraint[\"constraint_name\"],\n columnNames: indices.map(function (i) { return i[\"column_name\"]; }),\n isUnique: constraint[\"is_unique\"] === \"TRUE\",\n where: constraint[\"condition\"],\n isSpatial: indices.every(function (i) { return _this.driver.spatialTypes.indexOf(i[\"type_name\"]) >= 0; }),\n isFulltext: false\n });\n });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n PostgresQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(table, column); }).join(\", \");\n var sql = \"CREATE TABLE \" + this.escapePath(table) + \" (\" + columnDefinitions;\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.exclusions.length > 0) {\n var exclusionsSql = table.exclusions.map(function (exclusion) {\n var exclusionName = exclusion.name ? exclusion.name : _this.connection.namingStrategy.exclusionConstraintName(table.name, exclusion.expression);\n return \"CONSTRAINT \\\"\" + exclusionName + \"\\\" EXCLUDE \" + exclusion.expression;\n }).join(\", \");\n sql += \", \" + exclusionsSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \" + _this.escapePath(fk.referencedTableName) + \" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n if (fk.deferrable)\n constraint += \" DEFERRABLE \" + fk.deferrable;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (primaryColumns.length > 0) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(function (column) { return column.name; }));\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n table.columns\n .filter(function (it) { return it.comment; })\n .forEach(function (it) { return sql += \"; COMMENT ON COLUMN \" + _this.escapePath(table) + \".\\\"\" + it.name + \"\\\" IS \" + _this.escapeComment(it.comment); });\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n PostgresQueryRunner.prototype.dropTableSql = function (tableOrPath) {\n return new Query(\"DROP TABLE \" + this.escapePath(tableOrPath));\n };\n PostgresQueryRunner.prototype.createViewSql = function (view) {\n var materializedClause = view.materialized ? \"MATERIALIZED \" : \"\";\n var viewName = this.escapePath(view);\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression(this.connection).getQuery());\n }\n };\n PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, splittedName, schema, name, expression, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n splittedName = view.name.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = view.name;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", schema: schema, name: name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Builds drop view sql.\n */\n PostgresQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n return new Query(\"DROP VIEW \" + this.escapePath(viewOrPath));\n };\n /**\n * Builds remove view sql.\n */\n PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, viewName, splittedName, schema, name, qb, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n splittedName = viewName.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = viewName;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n qb = this.connection.createQueryBuilder();\n _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"schema\") + \" = :schema\", { schema: schema })\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: name })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Extracts schema name from given Table object or table name string.\n */\n PostgresQueryRunner.prototype.extractSchema = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n return tableName.indexOf(\".\") === -1 ? this.driver.options.schema : tableName.split(\".\")[0];\n };\n /**\n * Drops ENUM type from given schemas.\n */\n PostgresQueryRunner.prototype.dropEnumTypes = function (schemaNames) {\n return __awaiter(this, void 0, void 0, function () {\n var selectDropsQuery, dropQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n selectDropsQuery = \"SELECT 'DROP TYPE IF EXISTS \\\"' || n.nspname || '\\\".\\\"' || t.typname || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_enum\\\" \\\"e\\\" ON \\\"e\\\".\\\"enumtypid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" IN (\" + schemaNames + \") GROUP BY \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\"\");\n return [4 /*yield*/, this.query(selectDropsQuery)];\n case 1:\n dropQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Checks if enum with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasEnumType = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, enumName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = this.parseTableName(table).schema;\n enumName = this.buildEnumName(table, column, false, true);\n sql = \"SELECT \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = \" + schema + \" AND \\\"t\\\".\\\"typname\\\" = '\" + enumName + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.createEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n var enumValues = column.enum.map(function (value) { return \"'\" + value.replace(\"'\", \"''\") + \"'\"; }).join(\", \");\n return new Query(\"CREATE TYPE \" + enumName + \" AS ENUM(\" + enumValues + \")\");\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.dropEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n return new Query(\"DROP TYPE \" + enumName);\n };\n /**\n * Builds create index sql.\n */\n PostgresQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \" + this.escapePath(table) + \" \" + (index.isSpatial ? \"USING GiST \" : \"\") + \"(\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n PostgresQueryRunner.prototype.dropIndexSql = function (table, indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n var schema = this.extractSchema(table);\n return schema ? new Query(\"DROP INDEX \\\"\" + schema + \"\\\".\\\"\" + indexName + \"\\\"\") : new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds create primary key sql.\n */\n PostgresQueryRunner.prototype.createPrimaryKeySql = function (table, columnNames) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n var columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\");\n };\n /**\n * Builds drop primary key sql.\n */\n PostgresQueryRunner.prototype.dropPrimaryKeySql = function (table) {\n var columnNames = table.primaryColumns.map(function (column) { return column.name; });\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + primaryKeyName + \"\\\"\");\n };\n /**\n * Builds create unique constraint sql.\n */\n PostgresQueryRunner.prototype.createUniqueConstraintSql = function (table, uniqueConstraint) {\n var columnNames = uniqueConstraint.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\" + columnNames + \")\");\n };\n /**\n * Builds drop unique constraint sql.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraintSql = function (table, uniqueOrName) {\n var uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueName + \"\\\"\");\n };\n /**\n * Builds create check constraint sql.\n */\n PostgresQueryRunner.prototype.createCheckConstraintSql = function (table, checkConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + checkConstraint.name + \"\\\" CHECK (\" + checkConstraint.expression + \")\");\n };\n /**\n * Builds drop check constraint sql.\n */\n PostgresQueryRunner.prototype.dropCheckConstraintSql = function (table, checkOrName) {\n var checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + checkName + \"\\\"\");\n };\n /**\n * Builds create exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.createExclusionConstraintSql = function (table, exclusionConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + exclusionConstraint.name + \"\\\" EXCLUDE \" + exclusionConstraint.expression);\n };\n /**\n * Builds drop exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraintSql = function (table, exclusionOrName) {\n var exclusionName = exclusionOrName instanceof TableExclusion ? exclusionOrName.name : exclusionOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + exclusionName + \"\\\"\");\n };\n /**\n * Builds create foreign key sql.\n */\n PostgresQueryRunner.prototype.createForeignKeySql = function (table, foreignKey) {\n var columnNames = foreignKey.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n var referencedColumnNames = foreignKey.referencedColumnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\",\");\n var sql = \"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + foreignKey.name + \"\\\" FOREIGN KEY (\" + columnNames + \") \" +\n (\"REFERENCES \" + this.escapePath(foreignKey.referencedTableName) + \"(\" + referencedColumnNames + \")\");\n if (foreignKey.onDelete)\n sql += \" ON DELETE \" + foreignKey.onDelete;\n if (foreignKey.onUpdate)\n sql += \" ON UPDATE \" + foreignKey.onUpdate;\n if (foreignKey.deferrable)\n sql += \" DEFERRABLE \" + foreignKey.deferrable;\n return new Query(sql);\n };\n /**\n * Builds drop foreign key sql.\n */\n PostgresQueryRunner.prototype.dropForeignKeySql = function (table, foreignKeyOrName) {\n var foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + foreignKeyName + \"\\\"\");\n };\n /**\n * Builds sequence name from given table and column.\n */\n PostgresQueryRunner.prototype.buildSequenceName = function (table, columnOrName, currentSchema, disableEscape, skipSchema) {\n var columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n var schema = undefined;\n var tableName = undefined;\n if (table.name.indexOf(\".\") === -1) {\n tableName = table.name;\n }\n else {\n schema = table.name.split(\".\")[0];\n tableName = table.name.split(\".\")[1];\n }\n var seqName = tableName + \"_\" + columnName + \"_seq\";\n if (seqName.length > this.connection.driver.maxAliasLength) // note doesn't yet handle corner cases where .length differs from number of UTF-8 bytes\n seqName = tableName.substring(0, 29) + \"_\" + columnName.substring(0, Math.max(29, 63 - tableName.length - 5)) + \"_seq\";\n if (schema && schema !== currentSchema && !skipSchema) {\n return disableEscape ? schema + \".\" + seqName : \"\\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\"\";\n }\n else {\n return disableEscape ? \"\" + seqName : \"\\\"\" + seqName + \"\\\"\";\n }\n };\n /**\n * Builds ENUM type name from given table and column.\n */\n PostgresQueryRunner.prototype.buildEnumName = function (table, column, withSchema, disableEscape, toOld) {\n if (withSchema === void 0) { withSchema = true; }\n var schema = table.name.indexOf(\".\") === -1 ? this.driver.options.schema : table.name.split(\".\")[0];\n var tableName = table.name.indexOf(\".\") === -1 ? table.name : table.name.split(\".\")[1];\n var enumName = column.enumName ? column.enumName : tableName + \"_\" + column.name.toLowerCase() + \"_enum\";\n if (schema && withSchema)\n enumName = schema + \".\" + enumName;\n if (toOld)\n enumName = enumName + \"_old\";\n return enumName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n PostgresQueryRunner.prototype.getEnumTypeName = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, _a, schema, name, result, udtName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n _a = __read(table.name.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = this.driver.options.schema || currentSchema;\n }\n return [4 /*yield*/, this.query(\"SELECT \\\"udt_schema\\\", \\\"udt_name\\\" \" +\n (\"FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"' AND \\\"column_name\\\"='\" + column.name + \"'\"))];\n case 2:\n result = _b.sent();\n udtName = result[0][\"udt_name\"];\n if (udtName.indexOf(\"_\") === 0) {\n udtName = udtName.substr(1, udtName.length);\n }\n return [2 /*return*/, {\n enumTypeSchema: result[0][\"udt_schema\"],\n enumTypeName: udtName\n }];\n }\n });\n });\n };\n /**\n * Escapes a given comment so it's safe to include in a query.\n */\n PostgresQueryRunner.prototype.escapeComment = function (comment) {\n if (!comment || comment.length === 0) {\n return \"NULL\";\n }\n comment = comment\n .replace(/'/g, \"''\")\n .replace(\"\\0\", \"\"); // Null bytes aren't allowed in comments\n return \"'\" + comment + \"'\";\n };\n /**\n * Escapes given table or view path.\n */\n PostgresQueryRunner.prototype.escapePath = function (target, disableEscape) {\n var tableName = target instanceof Table || target instanceof View ? target.name : target;\n tableName = tableName.indexOf(\".\") === -1 && this.driver.options.schema ? this.driver.options.schema + \".\" + tableName : tableName;\n return tableName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n /**\n * Returns object with table schema and table name.\n */\n PostgresQueryRunner.prototype.parseTableName = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n if (tableName.indexOf(\".\") === -1) {\n return {\n schema: this.driver.options.schema ? \"'\" + this.driver.options.schema + \"'\" : \"current_schema()\",\n tableName: \"'\" + tableName + \"'\"\n };\n }\n else {\n return {\n schema: \"'\" + tableName.split(\".\")[0] + \"'\",\n tableName: \"'\" + tableName.split(\".\")[1] + \"'\"\n };\n }\n };\n /**\n * Builds a query for create column.\n */\n PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column.isGenerated === true && column.generationStrategy !== \"uuid\") {\n if (column.type === \"integer\" || column.type === \"int\" || column.type === \"int4\")\n c += \" SERIAL\";\n if (column.type === \"smallint\" || column.type === \"int2\")\n c += \" SMALLSERIAL\";\n if (column.type === \"bigint\" || column.type === \"int8\")\n c += \" BIGSERIAL\";\n }\n if (column.type === \"enum\" || column.type === \"simple-enum\") {\n c += \" \" + this.buildEnumName(table, column);\n if (column.isArray)\n c += \" array\";\n }\n else if (!column.isGenerated || column.type === \"uuid\") {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.charset)\n c += \" CHARACTER SET \\\"\" + column.charset + \"\\\"\";\n if (column.collation)\n c += \" COLLATE \\\"\" + column.collation + \"\\\"\";\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT \" + column.default;\n if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default)\n c += \" DEFAULT \" + this.driver.uuidGenerator;\n return c;\n };\n /**\n * Checks if the PostgreSQL server has support for partitioned tables\n */\n PostgresQueryRunner.prototype.hasSupportForPartitionedTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT TRUE FROM information_schema.columns WHERE table_name = 'pg_class' and column_name = 'relispartition'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n return PostgresQueryRunner;\n}(BaseQueryRunner));\nexport { PostgresQueryRunner };\n\n//# sourceMappingURL=PostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { PostgresQueryRunner } from \"../postgres/PostgresQueryRunner\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nvar PostgresQueryRunnerWrapper = /** @class */ (function (_super) {\n __extends(PostgresQueryRunnerWrapper, _super);\n function PostgresQueryRunnerWrapper(driver, mode) {\n return _super.call(this, driver, mode) || this;\n }\n return PostgresQueryRunnerWrapper;\n}(PostgresQueryRunner));\n/**\n * Runs queries on a single postgres database connection.\n */\nvar AuroraDataApiPostgresQueryRunner = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresQueryRunner(driver, client, mode) {\n var _this = _super.call(this, driver, mode) || this;\n _this.client = client;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Starts transaction on the current connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.client.startTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.commitTransaction()];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.rollbackTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n AuroraDataApiPostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.client.query(query, parameters)];\n case 1:\n result = _a.sent();\n if (result.records) {\n return [2 /*return*/, result.records];\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n return AuroraDataApiPostgresQueryRunner;\n}(PostgresQueryRunnerWrapper));\nexport { AuroraDataApiPostgresQueryRunner };\n\n//# sourceMappingURL=AuroraDataApiPostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { PostgresDriver } from \"../postgres/PostgresDriver\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { AuroraDataApiPostgresQueryRunner } from \"../aurora-data-api-pg/AuroraDataApiPostgresQueryRunner\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\nvar PostgresWrapper = /** @class */ (function (_super) {\n __extends(PostgresWrapper, _super);\n function PostgresWrapper() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PostgresWrapper;\n}(PostgresDriver));\nvar AuroraDataApiPostgresDriver = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresDriver(connection) {\n var _this = _super.call(this) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.isReplicated = false;\n // load data-api package\n _this.loadDependencies();\n _this.client = new _this.DataApiDriver(_this.options.region, _this.options.secretArn, _this.options.resourceArn, _this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, _this.options.serviceConfigOptions, _this.options.formatOptions);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n AuroraDataApiPostgresDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Closes connection with database.\n */\n AuroraDataApiPostgresDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n AuroraDataApiPostgresDriver.prototype.createQueryRunner = function (mode) {\n var _this = this;\n return new AuroraDataApiPostgresQueryRunner(this, new this.DataApiDriver(this.options.region, this.options.secretArn, this.options.resourceArn, this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, this.options.serviceConfigOptions, this.options.formatOptions), mode);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.preparePersistentValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n return this.client.preparePersistentValue(value, columnMetadata);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.prepareHydratedValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return this.client.prepareHydratedValue(value, columnMetadata);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AuroraDataApiPostgresDriver.prototype.loadDependencies = function () {\n var pg = PlatformTools.load(\"typeorm-aurora-data-api-driver\").pg;\n this.DataApiDriver = pg;\n };\n /**\n * Executes given query.\n */\n AuroraDataApiPostgresDriver.prototype.executeQuery = function (connection, query) {\n return this.connection.query(query);\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AuroraDataApiPostgresDriver.prototype.afterConnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var extensionsMetadata;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.checkMetadataForExtensions()];\n case 1:\n extensionsMetadata = _a.sent();\n if (!extensionsMetadata.hasExtensions) return [3 /*break*/, 3];\n return [4 /*yield*/, this.enableExtensions(extensionsMetadata, this.connection)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/, Promise.resolve()];\n }\n });\n });\n };\n return AuroraDataApiPostgresDriver;\n}(PostgresWrapper));\nexport { AuroraDataApiPostgresDriver };\n\n//# sourceMappingURL=AuroraDataApiPostgresDriver.js.map\n","import { MissingDriverError } from \"../error/MissingDriverError\";\nimport { CockroachDriver } from \"./cockroachdb/CockroachDriver\";\nimport { MongoDriver } from \"./mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"./sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"./oracle/OracleDriver\";\nimport { SqliteDriver } from \"./sqlite/SqliteDriver\";\nimport { CordovaDriver } from \"./cordova/CordovaDriver\";\nimport { ReactNativeDriver } from \"./react-native/ReactNativeDriver\";\nimport { NativescriptDriver } from \"./nativescript/NativescriptDriver\";\nimport { SqljsDriver } from \"./sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"./mysql/MysqlDriver\";\nimport { PostgresDriver } from \"./postgres/PostgresDriver\";\nimport { ExpoDriver } from \"./expo/ExpoDriver\";\nimport { AuroraDataApiDriver } from \"./aurora-data-api/AuroraDataApiDriver\";\nimport { AuroraDataApiPostgresDriver } from \"./aurora-data-api-pg/AuroraDataApiPostgresDriver\";\nimport { SapDriver } from \"./sap/SapDriver\";\nimport { BetterSqlite3Driver } from \"./better-sqlite3/BetterSqlite3Driver\";\n/**\n * Helps to create drivers.\n */\nvar DriverFactory = /** @class */ (function () {\n function DriverFactory() {\n }\n /**\n * Creates a new driver depend on a given connection's driver type.\n */\n DriverFactory.prototype.create = function (connection) {\n var type = connection.options.type;\n switch (type) {\n case \"mysql\":\n return new MysqlDriver(connection);\n case \"postgres\":\n return new PostgresDriver(connection);\n case \"cockroachdb\":\n return new CockroachDriver(connection);\n case \"sap\":\n return new SapDriver(connection);\n case \"mariadb\":\n return new MysqlDriver(connection);\n case \"sqlite\":\n return new SqliteDriver(connection);\n case \"better-sqlite3\":\n return new BetterSqlite3Driver(connection);\n case \"cordova\":\n return new CordovaDriver(connection);\n case \"nativescript\":\n return new NativescriptDriver(connection);\n case \"react-native\":\n return new ReactNativeDriver(connection);\n case \"sqljs\":\n return new SqljsDriver(connection);\n case \"oracle\":\n return new OracleDriver(connection);\n case \"mssql\":\n return new SqlServerDriver(connection);\n case \"mongodb\":\n return new MongoDriver(connection);\n case \"expo\":\n return new ExpoDriver(connection);\n case \"aurora-data-api\":\n return new AuroraDataApiDriver(connection);\n case \"aurora-data-api-pg\":\n return new AuroraDataApiPostgresDriver(connection);\n default:\n throw new MissingDriverError(type);\n }\n };\n return DriverFactory;\n}());\nexport { DriverFactory };\n\n//# sourceMappingURL=DriverFactory.js.map\n","/**\n * Dummy functions for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\n/**\n * Loads all exported classes from the given directory.\n */\nexport function importClassesFromDirectories(logger, directories, formats) {\n if (formats === void 0) { formats = [\".js\", \".cjs\", \".ts\"]; }\n return [];\n}\n/**\n * Loads all json files from the given directory.\n */\nexport function importJsonsFromDirectories(directories, format) {\n if (format === void 0) { format = \".json\"; }\n return [];\n}\n\n//# sourceMappingURL=BrowserDirectoryExportedClassesLoader.js.map\n","/**\n * Container to be used by this library for inversion control. If container was not implicitly set then by default\n * container simply creates a new instance of the given class.\n */\nvar defaultContainer = new (/** @class */ (function () {\n function class_1() {\n this.instances = [];\n }\n class_1.prototype.get = function (someClass) {\n var instance = this.instances.find(function (i) { return i.type === someClass; });\n if (!instance) {\n instance = { type: someClass, object: new someClass() };\n this.instances.push(instance);\n }\n return instance.object;\n };\n return class_1;\n}()))();\nvar userContainer;\nvar userContainerOptions;\n/**\n * Sets container to be used by this library.\n */\nexport function useContainer(iocContainer, options) {\n userContainer = iocContainer;\n userContainerOptions = options;\n}\n/**\n * Gets the IOC container used by this library.\n */\nexport function getFromContainer(someClass) {\n if (userContainer) {\n try {\n var instance = userContainer.get(someClass);\n if (instance)\n return instance;\n if (!userContainerOptions || !userContainerOptions.fallback)\n return instance;\n }\n catch (error) {\n if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)\n throw error;\n }\n }\n return defaultContainer.get(someClass);\n}\n\n//# sourceMappingURL=container.js.map\n","/**\n * Index metadata contains all information about table's index.\n */\nvar IndexMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function IndexMetadata(options) {\n /**\n * Indicates if this index must be unique.\n */\n this.isUnique = false;\n /**\n * The SPATIAL modifier indexes the entire column and does not allow indexed columns to contain NULL values.\n * Works only in MySQL.\n */\n this.isSpatial = false;\n /**\n * The FULLTEXT modifier indexes the entire column and does not allow prefixing.\n * Works only in MySQL.\n */\n this.isFulltext = false;\n /**\n * Indicates if this index must synchronize with database index.\n */\n this.synchronize = true;\n /**\n * Indexed columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n if (options.args.synchronize !== null && options.args.synchronize !== undefined)\n this.synchronize = options.args.synchronize;\n this.isUnique = !!options.args.unique;\n this.isSpatial = !!options.args.spatial;\n this.isFulltext = !!options.args.fulltext;\n this.parser = options.args.parser;\n this.where = options.args.where;\n this.isSparse = options.args.sparse;\n this.isBackground = options.args.background;\n this.expireAfterSeconds = options.args.expireAfterSeconds;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend index properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n IndexMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n if (this.synchronize === false) {\n this.name = this.givenName;\n return this;\n }\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else { // todo: indices in embeds are not implemented in this syntax. deprecate this syntax?\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyPath) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyPath; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Index \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyPath);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.indexName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }), this.where);\n return this;\n };\n return IndexMetadata;\n}());\nexport { IndexMetadata };\n\n//# sourceMappingURL=IndexMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { EntityMetadata } from \"./EntityMetadata\";\n/**\n * Contains all information about some entity's relation.\n */\nvar RelationMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationMetadata(options) {\n /**\n * Indicates if this is a parent (can be only many-to-one relation) relation in the tree tables.\n */\n this.isTreeParent = false;\n /**\n * Indicates if this is a children (can be only one-to-many relation) relation in the tree tables.\n */\n this.isTreeChildren = false;\n /**\n * Indicates if this relation's column is a primary key.\n * Can be used only for many-to-one and owner one-to-one relations.\n */\n this.isPrimary = false;\n /**\n * Indicates if this relation is lazily loaded.\n */\n this.isLazy = false;\n /**\n * Indicates if this relation is eagerly loaded.\n */\n this.isEager = false;\n /**\n * Indicates if persistence is enabled for the relation.\n * By default its enabled, but if you want to avoid any changes in the relation to be reflected in the database you can disable it.\n * If its disabled you can only change a relation from inverse side of a relation or using relation query builder functionality.\n * This is useful for performance optimization since its disabling avoid multiple extra queries during entity save.\n */\n this.persistenceEnabled = true;\n /**\n * If set to true then related objects are allowed to be inserted to the database.\n */\n this.isCascadeInsert = false;\n /**\n * If set to true then related objects are allowed to be updated in the database.\n */\n this.isCascadeUpdate = false;\n /**\n * If set to true then related objects are allowed to be remove from the database.\n */\n this.isCascadeRemove = false;\n /**\n * If set to true then related objects are allowed to be soft-removed from the database.\n */\n this.isCascadeSoftRemove = false;\n /**\n * If set to true then related objects are allowed to be recovered from the database.\n */\n this.isCascadeRecover = false;\n /**\n * Indicates if relation column value can be nullable or not.\n */\n this.isNullable = true;\n /**\n * Indicates whether foreign key constraints will be created for join columns.\n * Can be used only for many-to-one and owner one-to-one relations.\n * Defaults to true.\n */\n this.createForeignKeyConstraints = true;\n /**\n * Indicates if this side is an owner of this relation.\n */\n this.isOwning = false;\n /**\n * Checks if this relation's type is \"one-to-one\".\n */\n this.isOneToOne = false;\n /**\n * Checks if this relation is owner side of the \"one-to-one\" relation.\n * Owner side means this side of relation has a join column in the table.\n */\n this.isOneToOneOwner = false;\n /**\n * Checks if this relation has a join column (e.g. is it many-to-one or one-to-one owner side).\n */\n this.isWithJoinColumn = false;\n /**\n * Checks if this relation is NOT owner side of the \"one-to-one\" relation.\n * NOT owner side means this side of relation does not have a join column in the table.\n */\n this.isOneToOneNotOwner = false;\n /**\n * Checks if this relation's type is \"one-to-many\".\n */\n this.isOneToMany = false;\n /**\n * Checks if this relation's type is \"many-to-one\".\n */\n this.isManyToOne = false;\n /**\n * Checks if this relation's type is \"many-to-many\".\n */\n this.isManyToMany = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is owner side of the relationship.\n * Owner side means this side of relation has a join table.\n */\n this.isManyToManyOwner = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is NOT owner side of the relationship.\n * Not owner side means this side of relation does not have a join table.\n */\n this.isManyToManyNotOwner = false;\n /**\n * Foreign keys created for this relation.\n */\n this.foreignKeys = [];\n /**\n * Join table columns.\n * Join columns can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be empty.\n * If this relation is a many-to-one/one-to-one then it takes join columns from the current entity.\n * If this relation is many-to-many then it takes all owner join columns from the junction entity.\n */\n this.joinColumns = [];\n /**\n * Inverse join table columns.\n * Inverse join columns are supported only for many-to-many relations\n * and can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be undefined.\n */\n this.inverseJoinColumns = [];\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n var args = options.args;\n this.target = args.target;\n this.propertyName = args.propertyName;\n this.relationType = args.relationType;\n if (args.inverseSideProperty)\n this.givenInverseSidePropertyFactory = args.inverseSideProperty;\n this.isLazy = args.isLazy || false;\n // this.isCascadeInsert = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"insert\") !== -1);\n // this.isCascadeUpdate = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"update\") !== -1);\n // this.isCascadeRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"remove\") !== -1);\n // this.isCascadeSoftRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n // this.isCascadeRecover = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isCascadeInsert = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"insert\") !== -1);\n this.isCascadeUpdate = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"update\") !== -1);\n this.isCascadeRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"remove\") !== -1);\n this.isCascadeSoftRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n this.isCascadeRecover = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isPrimary = args.options.primary || false;\n this.isNullable = args.options.nullable === false || this.isPrimary ? false : true;\n this.onDelete = args.options.onDelete;\n this.onUpdate = args.options.onUpdate;\n this.deferrable = args.options.deferrable;\n this.createForeignKeyConstraints = args.options.createForeignKeyConstraints === false ? false : true;\n this.isEager = args.options.eager || false;\n this.persistenceEnabled = args.options.persistence === false ? false : true;\n this.orphanedRowAction = args.options.orphanedRowAction || \"nullify\";\n this.isTreeParent = args.isTreeParent || false;\n this.isTreeChildren = args.isTreeChildren || false;\n this.type = args.type instanceof Function ? args.type() : args.type;\n this.isOneToOne = this.relationType === \"one-to-one\";\n this.isOneToMany = this.relationType === \"one-to-many\";\n this.isManyToOne = this.relationType === \"many-to-one\";\n this.isManyToMany = this.relationType === \"many-to-many\";\n this.isOneToOneNotOwner = this.isOneToOne ? true : false;\n this.isManyToManyNotOwner = this.isManyToMany ? true : false;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates join column ids map from the given related entity ids array.\n */\n RelationMetadata.prototype.getRelationIdMap = function (entity) {\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n // console.log(\"entity\", entity);\n // console.log(\"referencedColumns\", referencedColumns);\n return EntityMetadata.getValueMap(entity, referencedColumns);\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n RelationMetadata.prototype.ensureRelationIdMap = function (id) {\n if (id instanceof Object)\n return id;\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n if (referencedColumns.length > 1)\n throw new Error(\"Cannot create relation id map for a single value because relation contains multiple referenced columns.\");\n return referencedColumns[0].createValueMap(id);\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n RelationMetadata.prototype.getEntityValue = function (entity, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n if (entity === null || entity === undefined)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_1 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n if (value[propertyName]) {\n return extractEmbeddedColumnValue_1(propertyNames, value[propertyName]);\n }\n return undefined;\n }\n return value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_1(propertyNames, entity);\n if (this.isLazy) {\n if (embeddedObject[\"__\" + this.propertyName + \"__\"] !== undefined)\n return embeddedObject[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return embeddedObject[this.propertyName];\n return undefined;\n }\n return embeddedObject ? embeddedObject[this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName] : undefined;\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.isLazy) {\n if (entity[\"__\" + this.propertyName + \"__\"] !== undefined)\n return entity[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return entity[this.propertyName];\n return undefined;\n }\n return entity[this.propertyName];\n }\n };\n /**\n * Sets given entity's relation's value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n *\n * If merge is set to true, it merges given value into currently\n */\n RelationMetadata.prototype.setEntityValue = function (entity, value) {\n var propertyName = this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_2 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_2(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_2(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n entity[propertyName] = value;\n }\n };\n /**\n * Creates entity id map from the given entity ids array.\n */\n RelationMetadata.prototype.createValueMap = function (value) {\n var _a;\n var _this = this;\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_3 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_3(propertyNames, map[propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_3(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n return _a = {}, _a[this.propertyName] = value, _a;\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation metadata properties.\n * This builder method should be used only after embedded metadata tree was build.\n */\n RelationMetadata.prototype.build = function () {\n this.propertyPath = this.buildPropertyPath();\n };\n /**\n * Registers given foreign keys in the relation.\n * This builder method should be used to register foreign key in the relation.\n */\n RelationMetadata.prototype.registerForeignKeys = function () {\n var _a;\n var foreignKeys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foreignKeys[_i] = arguments[_i];\n }\n (_a = this.foreignKeys).push.apply(_a, __spreadArray([], __read(foreignKeys)));\n };\n /**\n * Registers given join columns in the relation.\n * This builder method should be used to register join column in the relation.\n */\n RelationMetadata.prototype.registerJoinColumns = function (joinColumns, inverseJoinColumns) {\n if (joinColumns === void 0) { joinColumns = []; }\n if (inverseJoinColumns === void 0) { inverseJoinColumns = []; }\n this.joinColumns = joinColumns;\n this.inverseJoinColumns = inverseJoinColumns;\n this.isOwning = this.isManyToOne || ((this.isManyToMany || this.isOneToOne) && this.joinColumns.length > 0);\n this.isOneToOneOwner = this.isOneToOne && this.isOwning;\n this.isOneToOneNotOwner = this.isOneToOne && !this.isOwning;\n this.isManyToManyOwner = this.isManyToMany && this.isOwning;\n this.isManyToManyNotOwner = this.isManyToMany && !this.isOwning;\n this.isWithJoinColumn = this.isManyToOne || this.isOneToOneOwner;\n };\n /**\n * Registers a given junction entity metadata.\n * This builder method can be called after junction entity metadata for the many-to-many relation was created.\n */\n RelationMetadata.prototype.registerJunctionEntityMetadata = function (junctionEntityMetadata) {\n this.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n if (this.inverseRelation) {\n this.inverseRelation.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n }\n };\n /**\n * Builds inverse side property path based on given inverse side property factory.\n * This builder method should be used only after properties map of the inverse entity metadata was build.\n */\n RelationMetadata.prototype.buildInverseSidePropertyPath = function () {\n if (this.givenInverseSidePropertyFactory) {\n var ownerEntityPropertiesMap = this.inverseEntityMetadata.propertiesMap;\n if (typeof this.givenInverseSidePropertyFactory === \"function\")\n return this.givenInverseSidePropertyFactory(ownerEntityPropertiesMap);\n if (typeof this.givenInverseSidePropertyFactory === \"string\")\n return this.givenInverseSidePropertyFactory;\n }\n else if (this.isTreeParent && this.entityMetadata.treeChildrenRelation) {\n return this.entityMetadata.treeChildrenRelation.propertyName;\n }\n else if (this.isTreeChildren && this.entityMetadata.treeParentRelation) {\n return this.entityMetadata.treeParentRelation.propertyName;\n }\n return \"\";\n };\n /**\n * Builds relation's property path based on its embedded tree.\n */\n RelationMetadata.prototype.buildPropertyPath = function () {\n if (!this.embeddedMetadata || !this.embeddedMetadata.parentPropertyNames.length)\n return this.propertyName;\n return this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\" + this.propertyName;\n };\n return RelationMetadata;\n}());\nexport { RelationMetadata };\n\n//# sourceMappingURL=RelationMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Contains all information about entity's embedded property.\n */\nvar EmbeddedMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EmbeddedMetadata(options) {\n /**\n * Columns inside this embed.\n */\n this.columns = [];\n /**\n * Relations inside this embed.\n */\n this.relations = [];\n /**\n * Entity listeners inside this embed.\n */\n this.listeners = [];\n /**\n * Indices applied to the embed columns.\n */\n this.indices = [];\n /**\n * Uniques applied to the embed columns.\n */\n this.uniques = [];\n /**\n * Relation ids inside this embed.\n */\n this.relationIds = [];\n /**\n * Relation counts inside this embed.\n */\n this.relationCounts = [];\n /**\n * Nested embeddable in this embeddable (which has current embedded as parent embedded).\n */\n this.embeddeds = [];\n /**\n * Indicates if this embedded is in array mode.\n *\n * This option works only in mongodb.\n */\n this.isArray = false;\n /**\n * Returns array of property names of current embed and all its parent embeds.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * we need to get value of \"id\" column from the post real entity object.\n * this method will return [\"data\", \"information\", \"counters\"]\n */\n this.parentPropertyNames = [];\n /**\n * Returns array of prefixes of current embed and all its parent embeds.\n */\n this.parentPrefixes = [];\n /**\n * Returns embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.embeddedMetadataTree = [];\n /**\n * Embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.columnsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.relationsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.listenersFromTree = [];\n /**\n * Indices of this embed and all indices from its child embeds.\n */\n this.indicesFromTree = [];\n /**\n * Uniques of this embed and all uniques from its child embeds.\n */\n this.uniquesFromTree = [];\n /**\n * Relation ids of this embed and all relation ids from its child embeds.\n */\n this.relationIdsFromTree = [];\n /**\n * Relation counts of this embed and all relation counts from its child embeds.\n */\n this.relationCountsFromTree = [];\n this.entityMetadata = options.entityMetadata;\n this.type = options.args.type();\n this.propertyName = options.args.propertyName;\n this.customPrefix = options.args.prefix;\n this.isArray = options.args.isArray;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates a new embedded object.\n */\n EmbeddedMetadata.prototype.create = function () {\n return new this.type;\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.build = function (connection) {\n this.embeddeds.forEach(function (embedded) { return embedded.build(connection); });\n this.prefix = this.buildPrefix(connection);\n this.parentPropertyNames = this.buildParentPropertyNames();\n this.parentPrefixes = this.buildParentPrefixes();\n this.propertyPath = this.parentPropertyNames.join(\".\");\n this.embeddedMetadataTree = this.buildEmbeddedMetadataTree();\n this.columnsFromTree = this.buildColumnsFromTree();\n this.relationsFromTree = this.buildRelationsFromTree();\n this.listenersFromTree = this.buildListenersFromTree();\n this.indicesFromTree = this.buildIndicesFromTree();\n this.uniquesFromTree = this.buildUniquesFromTree();\n this.relationIdsFromTree = this.buildRelationIdsFromTree();\n this.relationCountsFromTree = this.buildRelationCountsFromTree();\n return this;\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.buildPartialPrefix = function () {\n // if prefix option was not set or explicitly set to true - default prefix\n if (this.customPrefix === undefined || this.customPrefix === true) {\n return [this.propertyName];\n }\n // if prefix option was set to empty string or explicity set to false - disable prefix\n if (this.customPrefix === \"\" || this.customPrefix === false) {\n return [];\n }\n // use custom prefix\n if (typeof this.customPrefix === \"string\") {\n return [this.customPrefix];\n }\n throw new Error(\"Invalid prefix option given for \" + this.entityMetadata.targetName + \"#\" + this.propertyName);\n };\n EmbeddedMetadata.prototype.buildPrefix = function (connection) {\n if (connection.driver instanceof MongoDriver)\n return this.propertyName;\n var prefixes = [];\n if (this.parentEmbeddedMetadata)\n prefixes.push(this.parentEmbeddedMetadata.buildPrefix(connection));\n prefixes.push.apply(prefixes, __spreadArray([], __read(this.buildPartialPrefix())));\n return prefixes.join(\"_\"); // todo: use naming strategy instead of \"_\" !!!\n };\n EmbeddedMetadata.prototype.buildParentPropertyNames = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPropertyNames().concat(this.propertyName) : [this.propertyName];\n };\n EmbeddedMetadata.prototype.buildParentPrefixes = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPrefixes().concat(this.buildPartialPrefix()) : this.buildPartialPrefix();\n };\n EmbeddedMetadata.prototype.buildEmbeddedMetadataTree = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildEmbeddedMetadataTree().concat(this) : [this];\n };\n EmbeddedMetadata.prototype.buildColumnsFromTree = function () {\n return this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.buildColumnsFromTree()); }, this.columns);\n };\n EmbeddedMetadata.prototype.buildRelationsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationsFromTree()); }, this.relations);\n };\n EmbeddedMetadata.prototype.buildListenersFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildListenersFromTree()); }, this.listeners);\n };\n EmbeddedMetadata.prototype.buildIndicesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildIndicesFromTree()); }, this.indices);\n };\n EmbeddedMetadata.prototype.buildUniquesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildUniquesFromTree()); }, this.uniques);\n };\n EmbeddedMetadata.prototype.buildRelationIdsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationIdsFromTree()); }, this.relationIds);\n };\n EmbeddedMetadata.prototype.buildRelationCountsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationCountsFromTree()); }, this.relationCounts);\n };\n return EmbeddedMetadata;\n}());\nexport { EmbeddedMetadata };\n\n//# sourceMappingURL=EmbeddedMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationIdMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationIdMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Sets relation id value from the given entity.\n *\n * todo: make it to work in embeds as well.\n */\n RelationIdMetadata.prototype.setValue = function (entity) {\n var _this = this;\n var inverseEntity = this.relation.getEntityValue(entity);\n if (Array.isArray(inverseEntity)) {\n entity[this.propertyName] = inverseEntity.map(function (item) {\n return _this.relation.inverseEntityMetadata.getEntityIdMixedMap(item);\n }).filter(function (item) { return item !== null && item !== undefined; });\n }\n else {\n var value = this.relation.inverseEntityMetadata.getEntityIdMixedMap(inverseEntity);\n if (value !== undefined)\n entity[this.propertyName] = value;\n }\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation id properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationIdMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationId decorator.\");\n this.relation = relation;\n };\n return RelationIdMetadata;\n}());\nexport { RelationIdMetadata };\n\n//# sourceMappingURL=RelationIdMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationCountMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationCountMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation count metadata properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationCountMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationCount decorator.\");\n this.relation = relation;\n };\n return RelationCountMetadata;\n}());\nexport { RelationCountMetadata };\n\n//# sourceMappingURL=RelationCountMetadata.js.map\n","/**\n * Provides a constants for each entity listener type.\n */\nvar EventListenerTypes = /** @class */ (function () {\n function EventListenerTypes() {\n }\n EventListenerTypes.AFTER_LOAD = \"after-load\";\n EventListenerTypes.BEFORE_INSERT = \"before-insert\";\n EventListenerTypes.AFTER_INSERT = \"after-insert\";\n EventListenerTypes.BEFORE_UPDATE = \"before-update\";\n EventListenerTypes.AFTER_UPDATE = \"after-update\";\n EventListenerTypes.BEFORE_REMOVE = \"before-remove\";\n EventListenerTypes.AFTER_REMOVE = \"after-remove\";\n return EventListenerTypes;\n}());\nexport { EventListenerTypes };\n\n//# sourceMappingURL=EventListenerTypes.js.map\n","/**\n * Metadata args utility functions.\n */\nvar MetadataUtils = /** @class */ (function () {\n function MetadataUtils() {\n }\n /**\n * Gets given's entity all inherited classes.\n * Gives in order from parents to children.\n * For example Post extends ContentModel which extends Unit it will give\n * [Unit, ContentModel, Post]\n */\n MetadataUtils.getInheritanceTree = function (entity) {\n var tree = [entity];\n var getPrototypeOf = function (object) {\n var proto = Object.getPrototypeOf(object);\n if (proto && proto.name) {\n tree.push(proto);\n getPrototypeOf(proto);\n }\n };\n getPrototypeOf(entity);\n return tree;\n };\n /**\n * Checks if this table is inherited from another table.\n */\n MetadataUtils.isInherited = function (target1, target2) {\n return target1.prototype instanceof target2;\n };\n /**\n * Filters given array of targets by a given classes.\n * If classes are not given, then it returns array itself.\n */\n MetadataUtils.filterByTarget = function (array, classes) {\n if (!classes)\n return array;\n return array.filter(function (item) { return item.target && classes.indexOf(item.target) !== -1; });\n };\n return MetadataUtils;\n}());\nexport { MetadataUtils };\n\n//# sourceMappingURL=MetadataUtils.js.map\n","/**\n * Contains all information about entity's foreign key.\n */\nvar ForeignKeyMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ForeignKeyMetadata(options) {\n /**\n * Array of columns of this foreign key.\n */\n this.columns = [];\n /**\n * Array of referenced columns.\n */\n this.referencedColumns = [];\n /**\n * Gets array of column names.\n */\n this.columnNames = [];\n /**\n * Gets array of referenced column names.\n */\n this.referencedColumnNames = [];\n this.entityMetadata = options.entityMetadata;\n this.referencedEntityMetadata = options.referencedEntityMetadata;\n this.columns = options.columns;\n this.referencedColumns = options.referencedColumns;\n this.onDelete = options.onDelete || \"NO ACTION\";\n this.onUpdate = options.onUpdate || \"NO ACTION\";\n this.deferrable = options.deferrable;\n if (options.namingStrategy)\n this.build(options.namingStrategy);\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend foreign key properties.\n * Must be called after all entity metadatas and their columns are built.\n */\n ForeignKeyMetadata.prototype.build = function (namingStrategy) {\n this.columnNames = this.columns.map(function (column) { return column.databaseName; });\n this.referencedColumnNames = this.referencedColumns.map(function (column) { return column.databaseName; });\n this.referencedTablePath = this.referencedEntityMetadata.tablePath;\n this.name = namingStrategy.foreignKeyName(this.entityMetadata.tablePath, this.columnNames, this.referencedTablePath, this.referencedColumnNames);\n };\n return ForeignKeyMetadata;\n}());\nexport { ForeignKeyMetadata };\n\n//# sourceMappingURL=ForeignKeyMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates EntityMetadata for junction tables.\n * Junction tables are tables generated by many-to-many relations.\n */\nvar JunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the junction of the given many-to-many relation.\n */\n JunctionEntityMetadataBuilder.prototype.build = function (relation, joinTable) {\n var _this = this;\n var referencedColumns = this.collectReferencedColumns(relation, joinTable);\n var inverseReferencedColumns = this.collectInverseReferencedColumns(relation, joinTable);\n var joinTableName = joinTable.name || this.connection.namingStrategy.joinTableName(relation.entityMetadata.tableNameWithoutPrefix, relation.inverseEntityMetadata.tableNameWithoutPrefix, relation.propertyPath, relation.inverseRelation ? relation.inverseRelation.propertyName : \"\");\n var entityMetadata = new EntityMetadata({\n connection: this.connection,\n args: {\n target: \"\",\n name: joinTableName,\n type: \"junction\",\n database: joinTable.database || relation.entityMetadata.database,\n schema: joinTable.schema || relation.entityMetadata.schema,\n }\n });\n entityMetadata.build();\n // create original side junction columns\n var junctionColumns = referencedColumns.map(function (referencedColumn) {\n var joinColumn = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.propertyName, referencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: referencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n name: columnName,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n type: referencedColumn.type,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.zerofill ? true : referencedColumn.unsigned,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n // create inverse side junction columns\n var inverseJunctionColumns = inverseReferencedColumns.map(function (inverseReferencedColumn) {\n var joinColumn = joinTable.inverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableInverseColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.propertyName, inverseReferencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: inverseReferencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n length: !inverseReferencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (inverseReferencedColumn.generationStrategy === \"uuid\" || inverseReferencedColumn.type === \"uuid\")\n ? \"36\"\n : inverseReferencedColumn.length,\n width: inverseReferencedColumn.width,\n type: inverseReferencedColumn.type,\n precision: inverseReferencedColumn.precision,\n scale: inverseReferencedColumn.scale,\n charset: inverseReferencedColumn.charset,\n collation: inverseReferencedColumn.collation,\n zerofill: inverseReferencedColumn.zerofill,\n unsigned: inverseReferencedColumn.zerofill ? true : inverseReferencedColumn.unsigned,\n enum: inverseReferencedColumn.enum,\n enumName: inverseReferencedColumn.enumName,\n name: columnName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n this.changeDuplicatedColumnNames(junctionColumns, inverseJunctionColumns);\n // set junction table columns\n entityMetadata.ownerColumns = junctionColumns;\n entityMetadata.inverseColumns = inverseJunctionColumns;\n entityMetadata.ownColumns = __spreadArray(__spreadArray([], __read(junctionColumns)), __read(inverseJunctionColumns));\n entityMetadata.ownColumns.forEach(function (column) { return column.relationMetadata = relation; });\n // create junction table foreign keys\n entityMetadata.foreignKeys = relation.createForeignKeyConstraints ? [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.entityMetadata,\n columns: junctionColumns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n columns: inverseJunctionColumns,\n referencedColumns: inverseReferencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n ] : [];\n // create junction table indices\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: junctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: inverseJunctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // finally return entity metadata\n return entityMetadata;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectReferencedColumns = function (relation, joinTable) {\n var hasAnyReferencedColumnName = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!joinTable.joinColumns || (joinTable.joinColumns && !hasAnyReferencedColumnName)) {\n return relation.entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n }\n else {\n return joinTable.joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.entityMetadata.columns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.entityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects inverse referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectInverseReferencedColumns = function (relation, joinTable) {\n var hasInverseJoinColumns = !!joinTable.inverseJoinColumns;\n var hasAnyInverseReferencedColumnName = hasInverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!hasInverseJoinColumns || (hasInverseJoinColumns && !hasAnyInverseReferencedColumnName)) {\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else {\n return joinTable.inverseJoinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n JunctionEntityMetadataBuilder.prototype.changeDuplicatedColumnNames = function (junctionColumns, inverseJunctionColumns) {\n var _this = this;\n junctionColumns.forEach(function (junctionColumn) {\n inverseJunctionColumns.forEach(function (inverseJunctionColumn) {\n if (junctionColumn.givenDatabaseName === inverseJunctionColumn.givenDatabaseName) {\n var junctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(junctionColumn.propertyName, 1);\n junctionColumn.propertyName = junctionColumnName;\n junctionColumn.givenDatabaseName = junctionColumnName;\n var inverseJunctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(inverseJunctionColumn.propertyName, 2);\n inverseJunctionColumn.propertyName = inverseJunctionColumnName;\n inverseJunctionColumn.givenDatabaseName = inverseJunctionColumnName;\n }\n });\n });\n };\n return JunctionEntityMetadataBuilder;\n}());\nexport { JunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=JunctionEntityMetadataBuilder.js.map\n","import { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\n/**\n * Creates EntityMetadata for junction tables of the closure entities.\n * Closure junction tables are tables generated by closure entities.\n */\nvar ClosureJunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureJunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the closure junction of the given closure entity.\n */\n ClosureJunctionEntityMetadataBuilder.prototype.build = function (parentClosureEntityMetadata) {\n var _this = this;\n // create entity metadata itself\n var entityMetadata = new EntityMetadata({\n parentClosureEntityMetadata: parentClosureEntityMetadata,\n connection: this.connection,\n args: {\n target: \"\",\n name: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.closureTableName ? parentClosureEntityMetadata.treeOptions.closureTableName : parentClosureEntityMetadata.tableNameWithoutPrefix,\n type: \"closure-junction\"\n }\n });\n entityMetadata.build();\n // create ancestor and descendant columns for new closure junction table\n parentClosureEntityMetadata.primaryColumns.forEach(function (primaryColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"ancestor\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.ancestorColumnName ? parentClosureEntityMetadata.treeOptions.ancestorColumnName(primaryColumn) : primaryColumn.propertyName + \"_ancestor\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"descendant\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.descendantColumnName ? parentClosureEntityMetadata.treeOptions.descendantColumnName(primaryColumn) : primaryColumn.propertyName + \"_descendant\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type,\n }\n }\n }));\n });\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // if tree level column was defined by a closure entity then add it to the junction columns as well\n if (parentClosureEntityMetadata.treeLevelColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: \"level\",\n options: {\n type: this.connection.driver.mappedDataTypes.treeLevel,\n }\n }\n }));\n }\n // create junction table foreign keys\n entityMetadata.foreignKeys = [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n ];\n return entityMetadata;\n };\n return ClosureJunctionEntityMetadataBuilder;\n}());\nexport { ClosureJunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=ClosureJunctionEntityMetadataBuilder.js.map\n","/**\n * Unique metadata contains all information about table's unique constraints.\n */\nvar UniqueMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function UniqueMetadata(options) {\n /**\n * Unique columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend unique constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n UniqueMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else {\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyName) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyName; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyName; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Unique constraint \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyName);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.uniqueConstraintName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }));\n return this;\n };\n return UniqueMetadata;\n}());\nexport { UniqueMetadata };\n\n//# sourceMappingURL=UniqueMetadata.js.map\n","import { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds join column for the many-to-one and one-to-one owner relations.\n *\n * Cases it should cover:\n * 1. when join column is set with custom name and without referenced column name\n * we need automatically set referenced column name - primary ids by default\n * @JoinColumn({ name: \"custom_name\" })\n *\n * 2. when join column is set with only referenced column name\n * we need automatically set join column name - relation name + referenced column name\n * @JoinColumn({ referencedColumnName: \"title\" })\n *\n * 3. when join column is set without both referenced column name and join column name\n * we need to automatically set both of them\n * @JoinColumn()\n *\n * 4. when join column is not set at all (as in case of @ManyToOne relation)\n * we need to create join column for it with proper referenced column name and join column name\n *\n * 5. when multiple join columns set none of referencedColumnName and name can be optional\n * both options are required\n * @JoinColumn([\n * { name: \"category_title\", referencedColumnName: \"type\" },\n * { name: \"category_title\", referencedColumnName: \"name\" },\n * ])\n *\n * Since for many-to-one relations having JoinColumn decorator is not required,\n * we need to go thought each many-to-one relation without join column decorator set\n * and create join column metadata args for them.\n */\nvar RelationJoinColumnBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationJoinColumnBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a foreign key of the many-to-one or one-to-one owner relations.\n */\n RelationJoinColumnBuilder.prototype.build = function (joinColumns, relation) {\n var referencedColumns = this.collectReferencedColumns(joinColumns, relation);\n var columns = this.collectColumns(joinColumns, relation, referencedColumns);\n if (!referencedColumns.length || !relation.createForeignKeyConstraints)\n return { foreignKey: undefined, columns: columns, uniqueConstraint: undefined }; // this case is possible for one-to-one non owning side and relations with createForeignKeyConstraints = false\n var foreignKey = new ForeignKeyMetadata({\n entityMetadata: relation.entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n namingStrategy: this.connection.namingStrategy,\n columns: columns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete,\n onUpdate: relation.onUpdate,\n deferrable: relation.deferrable,\n });\n // Oracle does not allow both primary and unique constraints on the same column\n if (this.connection.driver instanceof OracleDriver && columns.every(function (column) { return column.isPrimary; }))\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n // CockroachDB requires UNIQUE constraints on referenced columns\n if (referencedColumns.length > 0 && relation.isOneToOne) {\n var uniqueConstraint = new UniqueMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n name: this.connection.namingStrategy.relationConstraintName(relation.entityMetadata.tablePath, foreignKey.columns.map(function (c) { return c.databaseName; })),\n target: relation.entityMetadata.target,\n }\n });\n uniqueConstraint.build(this.connection.namingStrategy);\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: uniqueConstraint };\n }\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectReferencedColumns = function (joinColumns, relation) {\n var hasAnyReferencedColumnName = joinColumns.find(function (joinColumnArgs) { return !!joinColumnArgs.referencedColumnName; });\n var manyToOneWithoutJoinColumn = joinColumns.length === 0 && relation.isManyToOne;\n var hasJoinColumnWithoutAnyReferencedColumnName = joinColumns.length > 0 && !hasAnyReferencedColumnName;\n if (manyToOneWithoutJoinColumn || hasJoinColumnWithoutAnyReferencedColumnName) { // covers case3 and case1\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else { // cases with referenced columns defined\n return joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; }); // todo: can we also search in relations?\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectColumns = function (joinColumns, relation, referencedColumns) {\n var _this = this;\n return referencedColumns.map(function (referencedColumn) {\n // in the case if relation has join column with only name set we need this check\n var joinColumnMetadataArg = joinColumns.find(function (joinColumn) {\n return (!joinColumn.referencedColumnName || joinColumn.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumn.name;\n });\n var joinColumnName = joinColumnMetadataArg ? joinColumnMetadataArg.name : _this.connection.namingStrategy.joinColumnName(relation.propertyName, referencedColumn.propertyName);\n var relationalColumn = relation.entityMetadata.ownColumns.find(function (column) { return column.databaseName === joinColumnName; });\n if (!relationalColumn) {\n relationalColumn = new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: relation.entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: relation.propertyName,\n options: {\n name: joinColumnName,\n type: referencedColumn.type,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.unsigned,\n comment: referencedColumn.comment,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n primary: relation.isPrimary,\n nullable: relation.isNullable,\n }\n }\n });\n relation.entityMetadata.registerColumn(relationalColumn);\n }\n relationalColumn.referencedColumn = referencedColumn; // its important to set it here because we need to set referenced column for user defined join column\n relationalColumn.type = referencedColumn.type; // also since types of relational column and join column must be equal we override user defined column type\n relationalColumn.relationMetadata = relation;\n relationalColumn.build(_this.connection);\n return relationalColumn;\n });\n };\n return RelationJoinColumnBuilder;\n}());\nexport { RelationJoinColumnBuilder };\n\n//# sourceMappingURL=RelationJoinColumnBuilder.js.map\n","/**\n * This metadata contains all information about entity's listeners.\n */\nvar EntityListenerMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityListenerMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.type = options.args.type;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Checks if entity listener is allowed to be executed on the given entity.\n */\n EntityListenerMetadata.prototype.isAllowed = function (entity) {\n return this.entityMetadata.target === entity.constructor || // todo: .constructor won't work for entity schemas, but there are no entity listeners in schemas since there are no objects, right?\n (this.entityMetadata.target instanceof Function && entity.constructor.prototype instanceof this.entityMetadata.target); // todo: also need to implement entity schema inheritance\n };\n /**\n * Executes listener method of the given entity.\n */\n EntityListenerMetadata.prototype.execute = function (entity) {\n if (!this.embeddedMetadata)\n return entity[this.propertyName]();\n this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(\".\"));\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Calls embedded entity listener method no matter how nested it is.\n */\n EntityListenerMetadata.prototype.callEntityEmbeddedMethod = function (entity, propertyPaths) {\n var propertyPath = propertyPaths.shift();\n if (!propertyPath || !entity[propertyPath])\n return;\n if (propertyPaths.length === 0) {\n entity[propertyPath][this.propertyName]();\n }\n else {\n if (entity[propertyPath])\n this.callEntityEmbeddedMethod(entity[propertyPath], propertyPaths);\n }\n };\n return EntityListenerMetadata;\n}());\nexport { EntityListenerMetadata };\n\n//# sourceMappingURL=EntityListenerMetadata.js.map\n","/**\n * Check metadata contains all information about table's check constraints.\n */\nvar CheckMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CheckMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend check constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n CheckMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.checkConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return CheckMetadata;\n}());\nexport { CheckMetadata };\n\n//# sourceMappingURL=CheckMetadata.js.map\n","/**\n * Exclusion metadata contains all information about table's exclusion constraints.\n */\nvar ExclusionMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ExclusionMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend exclusion constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n ExclusionMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.exclusionConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return ExclusionMetadata;\n}());\nexport { ExclusionMetadata };\n\n//# sourceMappingURL=ExclusionMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\nimport { EmbeddedMetadata } from \"../metadata/EmbeddedMetadata\";\nimport { RelationIdMetadata } from \"../metadata/RelationIdMetadata\";\nimport { RelationCountMetadata } from \"../metadata/RelationCountMetadata\";\nimport { EventListenerTypes } from \"../metadata/types/EventListenerTypes\";\nimport { MetadataUtils } from \"./MetadataUtils\";\nimport { JunctionEntityMetadataBuilder } from \"./JunctionEntityMetadataBuilder\";\nimport { ClosureJunctionEntityMetadataBuilder } from \"./ClosureJunctionEntityMetadataBuilder\";\nimport { RelationJoinColumnBuilder } from \"./RelationJoinColumnBuilder\";\nimport { EntityListenerMetadata } from \"../metadata/EntityListenerMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { CheckMetadata } from \"../metadata/CheckMetadata\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { ExclusionMetadata } from \"../metadata/ExclusionMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds EntityMetadata objects and all its sub-metadatas.\n */\nvar EntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityMetadataBuilder(connection, metadataArgsStorage) {\n this.connection = connection;\n this.metadataArgsStorage = metadataArgsStorage;\n this.junctionEntityMetadataBuilder = new JunctionEntityMetadataBuilder(connection);\n this.closureJunctionEntityMetadataBuilder = new ClosureJunctionEntityMetadataBuilder(connection);\n this.relationJoinColumnBuilder = new RelationJoinColumnBuilder(connection);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a complete entity metadatas for the given entity classes.\n */\n EntityMetadataBuilder.prototype.build = function (entityClasses) {\n var _this = this;\n // if entity classes to filter entities by are given then do filtering, otherwise use all\n var allTables = entityClasses ? this.metadataArgsStorage.filterTables(entityClasses) : this.metadataArgsStorage.tables;\n // filter out table metadata args for those we really create entity metadatas and tables in the db\n var realTables = allTables.filter(function (table) { return table.type === \"regular\" || table.type === \"closure\" || table.type === \"entity-child\" || table.type === \"view\"; });\n // create entity metadatas for a user defined entities (marked with @Entity decorator or loaded from entity schemas)\n var entityMetadatas = realTables.map(function (tableArgs) { return _this.createEntityMetadata(tableArgs); });\n // compute parent entity metadatas for table inheritance\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeParentEntityMetadata(entityMetadatas, entityMetadata); });\n // after all metadatas created we set child entity metadatas for table inheritance\n entityMetadatas.forEach(function (metadata) {\n metadata.childEntityMetadatas = entityMetadatas.filter(function (childMetadata) {\n return metadata.target instanceof Function\n && childMetadata.target instanceof Function\n && MetadataUtils.isInherited(childMetadata.target, metadata.target);\n });\n });\n // build entity metadata (step0), first for non-single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // build entity metadata (step0), now for single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // compute entity metadata columns, relations, etc. first for the regular, non-single-table-inherited entity metadatas\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // then do it for single table inheritance children (since they are depend on their parents to be built)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // calculate entity metadata computed properties and all its sub-metadatas\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeEntityMetadataStep2(entityMetadata); });\n // calculate entity metadata's inverse properties\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeInverseProperties(entityMetadata, entityMetadatas); });\n // go through all entity metadatas and create foreign keys / junction entity metadatas for their relations\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) {\n // create entity's relations join columns (for many-to-one and one-to-one owner)\n entityMetadata.relations.filter(function (relation) { return relation.isOneToOne || relation.isManyToOne; }).forEach(function (relation) {\n var joinColumns = _this.metadataArgsStorage.filterJoinColumns(relation.target, relation.propertyName);\n var _a = _this.relationJoinColumnBuilder.build(joinColumns, relation), foreignKey = _a.foreignKey, columns = _a.columns, uniqueConstraint = _a.uniqueConstraint; // create a foreign key based on its metadata args\n if (foreignKey) {\n relation.registerForeignKeys(foreignKey); // push it to the relation and thus register there a join column\n entityMetadata.foreignKeys.push(foreignKey);\n }\n if (columns) {\n relation.registerJoinColumns(columns);\n }\n if (uniqueConstraint) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver\n || _this.connection.driver instanceof SqlServerDriver || _this.connection.driver instanceof SapDriver) {\n var index = new IndexMetadata({\n entityMetadata: uniqueConstraint.entityMetadata,\n columns: uniqueConstraint.columns,\n args: {\n target: uniqueConstraint.target,\n name: uniqueConstraint.name,\n unique: true,\n synchronize: true\n }\n });\n if (_this.connection.driver instanceof SqlServerDriver) {\n index.where = index.columns.map(function (column) {\n return _this.connection.driver.escape(column.databaseName) + \" IS NOT NULL\";\n }).join(\" AND \");\n }\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n else {\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.uniques.push(uniqueConstraint);\n }\n else {\n relation.entityMetadata.ownUniques.push(uniqueConstraint);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n }\n if (foreignKey && _this.connection.driver instanceof CockroachDriver) {\n var index = new IndexMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n target: relation.entityMetadata.target,\n synchronize: true\n }\n });\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n // create junction entity metadatas for entity many-to-many relations\n entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; }).forEach(function (relation) {\n var joinTable = _this.metadataArgsStorage.findJoinTable(relation.target, relation.propertyName);\n if (!joinTable)\n return; // no join table set - no need to do anything (it means this is many-to-many inverse side)\n // here we create a junction entity metadata for a new junction table of many-to-many relation\n var junctionEntityMetadata = _this.junctionEntityMetadataBuilder.build(relation, joinTable);\n relation.registerForeignKeys.apply(relation, __spreadArray([], __read(junctionEntityMetadata.foreignKeys)));\n relation.registerJoinColumns(junctionEntityMetadata.ownIndices[0].columns, junctionEntityMetadata.ownIndices[1].columns);\n relation.registerJunctionEntityMetadata(junctionEntityMetadata);\n // compute new entity metadata properties and push it to entity metadatas pool\n _this.computeEntityMetadataStep2(junctionEntityMetadata);\n _this.computeInverseProperties(junctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(junctionEntityMetadata);\n });\n });\n // update entity metadata depend properties\n entityMetadatas\n .forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns = entityMetadata.relations.filter(function (relation) { return relation.isWithJoinColumn; });\n entityMetadata.hasNonNullableRelations = entityMetadata.relationsWithJoinColumns.some(function (relation) { return !relation.isNullable || relation.isPrimary; });\n });\n // generate closure junction tables for all closure tables\n entityMetadatas\n .filter(function (metadata) { return metadata.treeType === \"closure-table\"; })\n .forEach(function (entityMetadata) {\n var closureJunctionEntityMetadata = _this.closureJunctionEntityMetadataBuilder.build(entityMetadata);\n entityMetadata.closureJunctionTable = closureJunctionEntityMetadata;\n _this.computeEntityMetadataStep2(closureJunctionEntityMetadata);\n _this.computeInverseProperties(closureJunctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(closureJunctionEntityMetadata);\n });\n // generate keys for tables with single-table inheritance\n entityMetadatas\n .filter(function (metadata) { return metadata.inheritancePattern === \"STI\" && metadata.discriminatorColumn; })\n .forEach(function (entityMetadata) { return _this.createKeysForTableInheritance(entityMetadata); });\n // build all indices (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.indices.forEach(function (index) { return index.build(_this.connection.namingStrategy); });\n });\n // build all unique constraints (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.uniques.forEach(function (unique) { return unique.build(_this.connection.namingStrategy); });\n });\n // build all check constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.checks.forEach(function (check) { return check.build(_this.connection.namingStrategy); });\n });\n // build all exclusion constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.exclusions.forEach(function (exclusion) { return exclusion.build(_this.connection.namingStrategy); });\n });\n // add lazy initializer for entity relations\n entityMetadatas\n .filter(function (metadata) { return metadata.target instanceof Function; })\n .forEach(function (entityMetadata) {\n entityMetadata.relations\n .filter(function (relation) { return relation.isLazy; })\n .forEach(function (relation) {\n _this.connection.relationLoader.enableLazyLoad(relation, entityMetadata.target.prototype);\n });\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.columns.forEach(function (column) {\n // const target = column.embeddedMetadata ? column.embeddedMetadata.type : column.target;\n var generated = _this.metadataArgsStorage.findGenerated(column.target, column.propertyName);\n if (generated) {\n column.isGenerated = true;\n column.generationStrategy = generated.strategy;\n if (generated.strategy === \"uuid\") {\n column.type = \"uuid\";\n }\n else if (generated.strategy === \"rowid\") {\n column.type = \"int\";\n }\n else {\n column.type = column.type || Number;\n }\n column.build(_this.connection);\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n });\n return entityMetadatas;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates entity metadata from the given table args.\n * Creates column, relation, etc. metadatas for everything this entity metadata owns.\n */\n EntityMetadataBuilder.prototype.createEntityMetadata = function (tableArgs) {\n // we take all \"inheritance tree\" from a target entity to collect all stored metadata args\n // (by decorators or inside entity schemas). For example for target Post < ContentModel < Unit\n // it will be an array of [Post, ContentModel, Unit] and we can then get all metadata args of those classes\n var inheritanceTree = tableArgs.target instanceof Function\n ? MetadataUtils.getInheritanceTree(tableArgs.target)\n : [tableArgs.target]; // todo: implement later here inheritance for string-targets\n var tableInheritance = this.metadataArgsStorage.findInheritanceType(tableArgs.target);\n var tableTree = this.metadataArgsStorage.findTree(tableArgs.target);\n // if single table inheritance used, we need to copy all children columns in to parent table\n var singleTableChildrenTargets;\n if ((tableInheritance && tableInheritance.pattern === \"STI\") || tableArgs.type === \"entity-child\") {\n singleTableChildrenTargets = this.metadataArgsStorage\n .filterSingleTableChildren(tableArgs.target)\n .map(function (args) { return args.target; })\n .filter(function (target) { return target instanceof Function; });\n inheritanceTree.push.apply(inheritanceTree, __spreadArray([], __read(singleTableChildrenTargets)));\n }\n return new EntityMetadata({\n connection: this.connection,\n args: tableArgs,\n inheritanceTree: inheritanceTree,\n tableTree: tableTree,\n inheritancePattern: tableInheritance ? tableInheritance.pattern : undefined\n });\n };\n EntityMetadataBuilder.prototype.computeParentEntityMetadata = function (allEntityMetadatas, entityMetadata) {\n // after all metadatas created we set parent entity metadata for table inheritance\n if (entityMetadata.tableType === \"entity-child\") {\n entityMetadata.parentEntityMetadata = allEntityMetadatas.find(function (allEntityMetadata) {\n return allEntityMetadata.inheritanceTree.indexOf(entityMetadata.target) !== -1 && allEntityMetadata.inheritancePattern === \"STI\";\n });\n }\n };\n EntityMetadataBuilder.prototype.computeEntityMetadataStep1 = function (allEntityMetadatas, entityMetadata) {\n var _a, _b, _c;\n var _this = this;\n var entityInheritance = this.metadataArgsStorage.findInheritanceType(entityMetadata.target);\n var discriminatorValue = this.metadataArgsStorage.findDiscriminatorValue(entityMetadata.target);\n if (typeof discriminatorValue !== \"undefined\") {\n entityMetadata.discriminatorValue = discriminatorValue.value;\n }\n else {\n entityMetadata.discriminatorValue = entityMetadata.target.name;\n }\n // if single table inheritance is used, we need to mark all embedded columns as nullable\n entityMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(entityMetadata.inheritanceTree))\n .map(function (embedded) {\n if (entityMetadata.inheritancePattern === \"STI\") {\n embedded.columns = embedded.columns.map(function (column) {\n column.isNullable = true;\n return column;\n });\n }\n return embedded;\n });\n entityMetadata.ownColumns = this.metadataArgsStorage\n .filterColumns(entityMetadata.inheritanceTree)\n .map(function (args) {\n // for single table children we reuse columns created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.propertyName === args.propertyName; });\n var column = new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, args: args });\n // if single table inheritance used, we need to mark all inherit table columns as nullable\n var columnInSingleTableInheritedChild = allEntityMetadatas.find(function (otherEntityMetadata) { return otherEntityMetadata.tableType === \"entity-child\" && otherEntityMetadata.target === args.target; });\n if (columnInSingleTableInheritedChild)\n column.isNullable = true;\n return column;\n });\n // for table inheritance we need to add a discriminator column\n //\n if (entityInheritance && entityInheritance.column) {\n var discriminatorColumnName_1 = entityInheritance.column && entityInheritance.column.name ? entityInheritance.column.name : \"type\";\n var discriminatorColumn = entityMetadata.ownColumns.find(function (column) { return column.propertyName === discriminatorColumnName_1; });\n if (!discriminatorColumn) {\n discriminatorColumn = new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: discriminatorColumnName_1,\n options: entityInheritance.column || {\n name: discriminatorColumnName_1,\n type: \"varchar\",\n nullable: false\n }\n }\n });\n discriminatorColumn.isVirtual = true;\n discriminatorColumn.isDiscriminator = true;\n entityMetadata.ownColumns.push(discriminatorColumn);\n }\n else {\n discriminatorColumn.isDiscriminator = true;\n }\n }\n // add discriminator column to the child entity metadatas\n // discriminator column will not be there automatically since we are creating it in the code above\n if (entityMetadata.tableType === \"entity-child\") {\n var discriminatorColumn_1 = entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.isDiscriminator; });\n if (discriminatorColumn_1 && !entityMetadata.ownColumns.find(function (column) { return column === discriminatorColumn_1; })) {\n entityMetadata.ownColumns.push(discriminatorColumn_1);\n }\n }\n var namingStrategy = this.connection.namingStrategy;\n // check if tree is used then we need to add extra columns for specific tree types\n if (entityMetadata.treeType === \"materialized-path\") {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n materializedPath: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: \"mpath\",\n options: /*tree.column || */ {\n name: namingStrategy.materializedPathColumnName,\n type: \"varchar\",\n nullable: true,\n default: \"\"\n }\n }\n }));\n }\n else if (entityMetadata.treeType === \"nested-set\") {\n var _d = namingStrategy.nestedSetColumnNames, left = _d.left, right = _d.right;\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetLeft: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: left,\n options: /*tree.column || */ {\n name: left,\n type: \"integer\",\n nullable: false,\n default: 1\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetRight: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: right,\n options: /*tree.column || */ {\n name: right,\n type: \"integer\",\n nullable: false,\n default: 2\n }\n }\n }));\n }\n entityMetadata.ownRelations = this.metadataArgsStorage.filterRelations(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relations created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownRelations.find(function (relation) { return relation.propertyName === args.propertyName; });\n return new RelationMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation ids created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationIds.find(function (relationId) { return relationId.propertyName === args.propertyName; });\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation counts created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationCounts.find(function (relationCount) { return relationCount.propertyName === args.propertyName; });\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.ownListeners = this.metadataArgsStorage.filterListeners(entityMetadata.inheritanceTree).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.checks = this.metadataArgsStorage.filterChecks(entityMetadata.inheritanceTree).map(function (args) {\n return new CheckMetadata({ entityMetadata: entityMetadata, args: args });\n });\n // Only PostgreSQL supports exclusion constraints.\n if (this.connection.driver instanceof PostgresDriver) {\n entityMetadata.exclusions = this.metadataArgsStorage.filterExclusions(entityMetadata.inheritanceTree).map(function (args) {\n return new ExclusionMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n if (this.connection.driver instanceof CockroachDriver) {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return !args.unique; })\n .map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n var uniques = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return args.unique; })\n .map(function (args) {\n return new UniqueMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n }\n });\n });\n (_a = entityMetadata.ownUniques).push.apply(_a, __spreadArray([], __read(uniques)));\n }\n else {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n // Mysql and SAP HANA stores unique constraints as unique indices.\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n var indices = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n unique: true,\n synchronize: true\n }\n });\n });\n (_b = entityMetadata.ownIndices).push.apply(_b, __spreadArray([], __read(indices)));\n }\n else {\n var uniques = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, args: args });\n });\n (_c = entityMetadata.ownUniques).push.apply(_c, __spreadArray([], __read(uniques)));\n }\n };\n /**\n * Creates from the given embedded metadata args real embedded metadatas with its columns and relations,\n * and does the same for all its sub-embeddeds (goes recursively).\n */\n EntityMetadataBuilder.prototype.createEmbeddedsRecursively = function (entityMetadata, embeddedArgs) {\n var _this = this;\n return embeddedArgs.map(function (embeddedArgs) {\n var embeddedMetadata = new EmbeddedMetadata({ entityMetadata: entityMetadata, args: embeddedArgs });\n var targets = MetadataUtils.getInheritanceTree(embeddedMetadata.type);\n embeddedMetadata.columns = _this.metadataArgsStorage.filterColumns(targets).map(function (args) {\n return new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relations = _this.metadataArgsStorage.filterRelations(targets).map(function (args) {\n return new RelationMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.listeners = _this.metadataArgsStorage.filterListeners(targets).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.indices = _this.metadataArgsStorage.filterIndices(targets).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.uniques = _this.metadataArgsStorage.filterUniques(targets).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relationIds = _this.metadataArgsStorage.filterRelationIds(targets).map(function (args) {\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.relationCounts = _this.metadataArgsStorage.filterRelationCounts(targets).map(function (args) {\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.embeddeds = _this.createEmbeddedsRecursively(entityMetadata, _this.metadataArgsStorage.filterEmbeddeds(targets));\n embeddedMetadata.embeddeds.forEach(function (subEmbedded) { return subEmbedded.parentEmbeddedMetadata = embeddedMetadata; });\n entityMetadata.allEmbeddeds.push(embeddedMetadata);\n return embeddedMetadata;\n });\n };\n /**\n * Computes all entity metadata's computed properties, and all its sub-metadatas (relations, columns, embeds, etc).\n */\n EntityMetadataBuilder.prototype.computeEntityMetadataStep2 = function (entityMetadata) {\n var _this = this;\n entityMetadata.embeddeds.forEach(function (embedded) { return embedded.build(_this.connection); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.columnsFromTree.forEach(function (column) { return column.build(_this.connection); });\n embedded.relationsFromTree.forEach(function (relation) { return relation.build(); });\n });\n entityMetadata.ownColumns.forEach(function (column) { return column.build(_this.connection); });\n entityMetadata.ownRelations.forEach(function (relation) { return relation.build(); });\n entityMetadata.relations = entityMetadata.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.relationsFromTree); }, entityMetadata.ownRelations);\n entityMetadata.eagerRelations = entityMetadata.relations.filter(function (relation) { return relation.isEager; });\n entityMetadata.lazyRelations = entityMetadata.relations.filter(function (relation) { return relation.isLazy; });\n entityMetadata.oneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOne; });\n entityMetadata.oneToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToMany; });\n entityMetadata.manyToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToOne; });\n entityMetadata.manyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; });\n entityMetadata.ownerOneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOneOwner; });\n entityMetadata.ownerManyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToManyOwner; });\n entityMetadata.treeParentRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeParent; });\n entityMetadata.treeChildrenRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeChildren; });\n entityMetadata.columns = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, entityMetadata.ownColumns);\n entityMetadata.listeners = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.listenersFromTree); }, entityMetadata.ownListeners);\n entityMetadata.afterLoadListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_LOAD; });\n entityMetadata.afterInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_INSERT; });\n entityMetadata.afterUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_UPDATE; });\n entityMetadata.afterRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_REMOVE; });\n entityMetadata.beforeInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_INSERT; });\n entityMetadata.beforeUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_UPDATE; });\n entityMetadata.beforeRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_REMOVE; });\n entityMetadata.indices = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.indicesFromTree); }, entityMetadata.ownIndices);\n entityMetadata.uniques = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.uniquesFromTree); }, entityMetadata.ownUniques);\n entityMetadata.primaryColumns = entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n entityMetadata.nonVirtualColumns = entityMetadata.columns.filter(function (column) { return !column.isVirtual; });\n entityMetadata.ancestorColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"ancestor\"; });\n entityMetadata.descendantColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"descendant\"; });\n entityMetadata.hasMultiplePrimaryKeys = entityMetadata.primaryColumns.length > 1;\n entityMetadata.generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.isObjectId; });\n entityMetadata.hasUUIDGeneratedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n entityMetadata.createDateColumn = entityMetadata.columns.find(function (column) { return column.isCreateDate; });\n entityMetadata.updateDateColumn = entityMetadata.columns.find(function (column) { return column.isUpdateDate; });\n entityMetadata.deleteDateColumn = entityMetadata.columns.find(function (column) { return column.isDeleteDate; });\n entityMetadata.versionColumn = entityMetadata.columns.find(function (column) { return column.isVersion; });\n entityMetadata.discriminatorColumn = entityMetadata.columns.find(function (column) { return column.isDiscriminator; });\n entityMetadata.treeLevelColumn = entityMetadata.columns.find(function (column) { return column.isTreeLevel; });\n entityMetadata.nestedSetLeftColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetLeft; });\n entityMetadata.nestedSetRightColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetRight; });\n entityMetadata.materializedPathColumn = entityMetadata.columns.find(function (column) { return column.isMaterializedPath; });\n entityMetadata.objectIdColumn = entityMetadata.columns.find(function (column) { return column.isObjectId; });\n entityMetadata.foreignKeys.forEach(function (foreignKey) { return foreignKey.build(_this.connection.namingStrategy); });\n entityMetadata.propertiesMap = entityMetadata.createPropertiesMap();\n entityMetadata.relationIds.forEach(function (relationId) { return relationId.build(); });\n entityMetadata.relationCounts.forEach(function (relationCount) { return relationCount.build(); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.relationIdsFromTree.forEach(function (relationId) { return relationId.build(); });\n embedded.relationCountsFromTree.forEach(function (relationCount) { return relationCount.build(); });\n });\n };\n /**\n * Computes entity metadata's relations inverse side properties.\n */\n EntityMetadataBuilder.prototype.computeInverseProperties = function (entityMetadata, entityMetadatas) {\n entityMetadata.relations.forEach(function (relation) {\n // compute inverse side (related) entity metadatas for all relation metadatas\n var inverseEntityMetadata = entityMetadatas.find(function (m) { return m.target === relation.type || (typeof relation.type === \"string\" && (m.targetName === relation.type || m.givenTableName === relation.type)); });\n if (!inverseEntityMetadata)\n throw new Error(\"Entity metadata for \" + entityMetadata.name + \"#\" + relation.propertyPath + \" was not found. Check if you specified a correct entity object and if it's connected in the connection options.\");\n relation.inverseEntityMetadata = inverseEntityMetadata;\n relation.inverseSidePropertyPath = relation.buildInverseSidePropertyPath();\n // and compute inverse relation and mark if it has such\n relation.inverseRelation = inverseEntityMetadata.relations.find(function (foundRelation) { return foundRelation.propertyPath === relation.inverseSidePropertyPath; });\n });\n };\n /**\n * Creates indices for the table of single table inheritance.\n */\n EntityMetadataBuilder.prototype.createKeysForTableInheritance = function (entityMetadata) {\n entityMetadata.indices.push(new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.discriminatorColumn],\n args: {\n target: entityMetadata.target,\n unique: false\n }\n }));\n };\n return EntityMetadataBuilder;\n}());\nexport { EntityMetadataBuilder };\n\n//# sourceMappingURL=EntityMetadataBuilder.js.map\n","import { MetadataUtils } from \"../metadata-builder/MetadataUtils\";\n/**\n * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc.\n * Each metadata args represents some specifications of what it represents.\n * MetadataArgs used to create a real Metadata objects.\n */\nvar MetadataArgsStorage = /** @class */ (function () {\n function MetadataArgsStorage() {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n this.tables = [];\n this.trees = [];\n this.entityRepositories = [];\n this.transactionEntityManagers = [];\n this.transactionRepositories = [];\n this.namingStrategies = [];\n this.entitySubscribers = [];\n this.indices = [];\n this.uniques = [];\n this.checks = [];\n this.exclusions = [];\n this.columns = [];\n this.generations = [];\n this.relations = [];\n this.joinColumns = [];\n this.joinTables = [];\n this.entityListeners = [];\n this.relationCounts = [];\n this.relationIds = [];\n this.embeddeds = [];\n this.inheritances = [];\n this.discriminatorValues = [];\n }\n MetadataArgsStorage.prototype.filterTables = function (target) {\n return this.filterByTarget(this.tables, target);\n };\n MetadataArgsStorage.prototype.filterColumns = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.columns, target);\n };\n MetadataArgsStorage.prototype.findGenerated = function (target, propertyName) {\n return this.generations.find(function (generated) {\n return (Array.isArray(target) ? target.indexOf(generated.target) !== -1 : generated.target === target) && generated.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.findTree = function (target) {\n return this.trees.find(function (tree) {\n return (Array.isArray(target) ? target.indexOf(tree.target) !== -1 : tree.target === target);\n });\n };\n MetadataArgsStorage.prototype.filterRelations = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relations, target);\n };\n MetadataArgsStorage.prototype.filterRelationIds = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationIds, target);\n };\n MetadataArgsStorage.prototype.filterRelationCounts = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationCounts, target);\n };\n MetadataArgsStorage.prototype.filterIndices = function (target) {\n // todo: implement parent-entity overrides?\n return this.indices.filter(function (index) {\n return Array.isArray(target) ? target.indexOf(index.target) !== -1 : index.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterUniques = function (target) {\n return this.uniques.filter(function (unique) {\n return Array.isArray(target) ? target.indexOf(unique.target) !== -1 : unique.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterChecks = function (target) {\n return this.checks.filter(function (check) {\n return Array.isArray(target) ? target.indexOf(check.target) !== -1 : check.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterExclusions = function (target) {\n return this.exclusions.filter(function (exclusion) {\n return Array.isArray(target) ? target.indexOf(exclusion.target) !== -1 : exclusion.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterListeners = function (target) {\n return this.filterByTarget(this.entityListeners, target);\n };\n MetadataArgsStorage.prototype.filterEmbeddeds = function (target) {\n return this.filterByTargetAndWithoutDuplicateEmbeddedProperties(this.embeddeds, target);\n };\n MetadataArgsStorage.prototype.findJoinTable = function (target, propertyName) {\n return this.joinTables.find(function (joinTable) {\n return joinTable.target === target && joinTable.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterJoinColumns = function (target, propertyName) {\n // todo: implement parent-entity overrides?\n return this.joinColumns.filter(function (joinColumn) {\n return joinColumn.target === target && joinColumn.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSubscribers = function (target) {\n return this.filterByTarget(this.entitySubscribers, target);\n };\n MetadataArgsStorage.prototype.filterNamingStrategies = function (target) {\n return this.filterByTarget(this.namingStrategies, target);\n };\n MetadataArgsStorage.prototype.filterTransactionEntityManagers = function (target, propertyName) {\n return this.transactionEntityManagers.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterTransactionRepository = function (target, propertyName) {\n return this.transactionRepositories.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSingleTableChildren = function (target) {\n return this.tables.filter(function (table) {\n return table.target instanceof Function\n && target instanceof Function\n && MetadataUtils.isInherited(table.target, target)\n && table.type === \"entity-child\";\n });\n };\n MetadataArgsStorage.prototype.findInheritanceType = function (target) {\n return this.inheritances.find(function (inheritance) { return inheritance.target === target; });\n };\n MetadataArgsStorage.prototype.findDiscriminatorValue = function (target) {\n return this.discriminatorValues.find(function (discriminatorValue) { return discriminatorValue.target === target; });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Filters given array by a given target or targets.\n */\n MetadataArgsStorage.prototype.filterByTarget = function (array, target) {\n return array.filter(function (table) {\n return Array.isArray(target) ? target.indexOf(table.target) !== -1 : table.target === target;\n });\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n if (!newArray.find(function (newItem) { return newItem.propertyName === item.propertyName; }))\n newArray.push(item);\n }\n });\n return newArray;\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate embedded property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateEmbeddedProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n var isDuplicateEmbeddedProperty = newArray.find(function (newItem) {\n return newItem.prefix === item.prefix && newItem.propertyName === item.propertyName;\n });\n if (!isDuplicateEmbeddedProperty)\n newArray.push(item);\n }\n });\n return newArray;\n };\n return MetadataArgsStorage;\n}());\nexport { MetadataArgsStorage };\n\n//# sourceMappingURL=MetadataArgsStorage.js.map\n","import { __values } from \"tslib\";\nimport { MetadataArgsStorage } from \"../metadata-args/MetadataArgsStorage\";\n/**\n * Transforms entity schema into metadata args storage.\n * The result will be just like entities read from decorators.\n */\nvar EntitySchemaTransformer = /** @class */ (function () {\n function EntitySchemaTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Transforms entity schema into new metadata args storage object.\n */\n EntitySchemaTransformer.prototype.transform = function (schemas) {\n var metadataArgsStorage = new MetadataArgsStorage();\n schemas.forEach(function (entitySchema) {\n var options = entitySchema.options;\n // add table metadata args from the schema\n var tableMetadata = {\n target: options.target || options.name,\n name: options.tableName,\n database: options.database,\n schema: options.schema,\n type: options.type || \"regular\",\n orderBy: options.orderBy,\n synchronize: options.synchronize,\n expression: options.expression\n };\n metadataArgsStorage.tables.push(tableMetadata);\n // add columns metadata args from the schema\n Object.keys(options.columns).forEach(function (columnName) {\n var column = options.columns[columnName];\n var mode = \"regular\";\n if (column.createDate)\n mode = \"createDate\";\n if (column.updateDate)\n mode = \"updateDate\";\n if (column.deleteDate)\n mode = \"deleteDate\";\n if (column.version)\n mode = \"version\";\n if (column.treeChildrenCount)\n mode = \"treeChildrenCount\";\n if (column.treeLevel)\n mode = \"treeLevel\";\n if (column.objectId)\n mode = \"objectId\";\n var columnAgrs = {\n target: options.target || options.name,\n mode: mode,\n propertyName: columnName,\n options: {\n type: column.type,\n name: column.objectId ? \"_id\" : column.name,\n length: column.length,\n width: column.width,\n nullable: column.nullable,\n readonly: column.readonly,\n update: column.update,\n select: column.select,\n insert: column.insert,\n primary: column.primary,\n unique: column.unique,\n comment: column.comment,\n default: column.default,\n onUpdate: column.onUpdate,\n precision: column.precision,\n scale: column.scale,\n zerofill: column.zerofill,\n unsigned: column.unsigned,\n charset: column.charset,\n collation: column.collation,\n enum: column.enum,\n asExpression: column.asExpression,\n generatedType: column.generatedType,\n hstoreType: column.hstoreType,\n array: column.array,\n transformer: column.transformer,\n spatialFeatureType: column.spatialFeatureType,\n srid: column.srid\n }\n };\n metadataArgsStorage.columns.push(columnAgrs);\n if (column.generated) {\n var generationArgs = {\n target: options.target || options.name,\n propertyName: columnName,\n strategy: typeof column.generated === \"string\" ? column.generated : \"increment\"\n };\n metadataArgsStorage.generations.push(generationArgs);\n }\n if (column.unique)\n metadataArgsStorage.uniques.push({ target: options.target || options.name, columns: [columnName] });\n });\n // add relation metadata args from the schema\n if (options.relations) {\n Object.keys(options.relations).forEach(function (relationName) {\n var e_1, _a;\n var relationSchema = options.relations[relationName];\n var relation = {\n target: options.target || options.name,\n propertyName: relationName,\n relationType: relationSchema.type,\n isLazy: relationSchema.lazy || false,\n type: relationSchema.target,\n inverseSideProperty: relationSchema.inverseSide,\n isTreeParent: relationSchema.treeParent,\n isTreeChildren: relationSchema.treeChildren,\n options: {\n eager: relationSchema.eager || false,\n cascade: relationSchema.cascade,\n nullable: relationSchema.nullable,\n onDelete: relationSchema.onDelete,\n onUpdate: relationSchema.onUpdate,\n deferrable: relationSchema.deferrable,\n primary: relationSchema.primary,\n persistence: relationSchema.persistence\n }\n };\n metadataArgsStorage.relations.push(relation);\n // add join column\n if (relationSchema.joinColumn) {\n if (typeof relationSchema.joinColumn === \"boolean\") {\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n else {\n var joinColumnsOptions = Array.isArray(relationSchema.joinColumn) ? relationSchema.joinColumn : [relationSchema.joinColumn];\n try {\n for (var joinColumnsOptions_1 = __values(joinColumnsOptions), joinColumnsOptions_1_1 = joinColumnsOptions_1.next(); !joinColumnsOptions_1_1.done; joinColumnsOptions_1_1 = joinColumnsOptions_1.next()) {\n var joinColumnOption = joinColumnsOptions_1_1.value;\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName,\n name: joinColumnOption.name,\n referencedColumnName: joinColumnOption.referencedColumnName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (joinColumnsOptions_1_1 && !joinColumnsOptions_1_1.done && (_a = joinColumnsOptions_1.return)) _a.call(joinColumnsOptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n }\n // add join table\n if (relationSchema.joinTable) {\n if (typeof relationSchema.joinTable === \"boolean\") {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n else {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName,\n name: relationSchema.joinTable.name,\n database: relationSchema.joinTable.database,\n schema: relationSchema.joinTable.schema,\n joinColumns: (relationSchema.joinTable.joinColumn ? [relationSchema.joinTable.joinColumn] : relationSchema.joinTable.joinColumns),\n inverseJoinColumns: (relationSchema.joinTable.inverseJoinColumn ? [relationSchema.joinTable.inverseJoinColumn] : relationSchema.joinTable.inverseJoinColumns),\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n }\n });\n }\n // add index metadata args from the schema\n if (options.indices) {\n options.indices.forEach(function (index) {\n var indexAgrs = {\n target: options.target || options.name,\n name: index.name,\n unique: index.unique === true ? true : false,\n spatial: index.spatial === true ? true : false,\n fulltext: index.fulltext === true ? true : false,\n parser: index.parser,\n synchronize: index.synchronize === false ? false : true,\n where: index.where,\n sparse: index.sparse,\n columns: index.columns\n };\n metadataArgsStorage.indices.push(indexAgrs);\n });\n }\n // add unique metadata args from the schema\n if (options.uniques) {\n options.uniques.forEach(function (unique) {\n var uniqueAgrs = {\n target: options.target || options.name,\n name: unique.name,\n columns: unique.columns\n };\n metadataArgsStorage.uniques.push(uniqueAgrs);\n });\n }\n // add check metadata args from the schema\n if (options.checks) {\n options.checks.forEach(function (check) {\n var checkAgrs = {\n target: options.target || options.name,\n name: check.name,\n expression: check.expression\n };\n metadataArgsStorage.checks.push(checkAgrs);\n });\n }\n // add exclusion metadata args from the schema\n if (options.exclusions) {\n options.exclusions.forEach(function (exclusion) {\n var exclusionArgs = {\n target: options.target || options.name,\n name: exclusion.name,\n expression: exclusion.expression\n };\n metadataArgsStorage.exclusions.push(exclusionArgs);\n });\n }\n });\n return metadataArgsStorage;\n };\n return EntitySchemaTransformer;\n}());\nexport { EntitySchemaTransformer };\n\n//# sourceMappingURL=EntitySchemaTransformer.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { importClassesFromDirectories } from \"../util/DirectoryExportedClassesLoader\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { getFromContainer } from \"../container\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { EntityMetadataBuilder } from \"../metadata-builder/EntityMetadataBuilder\";\nimport { EntitySchemaTransformer } from \"../entity-schema/EntitySchemaTransformer\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nvar ConnectionMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ConnectionMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds migration instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildMigrations = function (migrations) {\n var _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];\n var allMigrationClasses = __spreadArray(__spreadArray([], __read(migrationClasses)), __read(importClassesFromDirectories(this.connection.logger, migrationDirectories)));\n return allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); });\n };\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildSubscribers = function (subscribers) {\n var _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];\n var allSubscriberClasses = __spreadArray(__spreadArray([], __read(subscriberClasses)), __read(importClassesFromDirectories(this.connection.logger, subscriberDirectories)));\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(function (metadata) { return getFromContainer(metadata.target); });\n };\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildEntityMetadatas = function (entities) {\n // todo: instead we need to merge multiple metadata args storages\n var _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];\n var entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });\n var entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });\n var allEntityClasses = __spreadArray(__spreadArray([], __read(entityClasses)), __read(importClassesFromDirectories(this.connection.logger, entityDirectories)));\n allEntityClasses.forEach(function (entityClass) {\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n allEntityClasses.slice(allEntityClasses.indexOf(entityClass), 1);\n }\n });\n var decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n var metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n var schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n return __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas)), __read(schemaEntityMetadatas));\n };\n return ConnectionMetadataBuilder;\n}());\nexport { ConnectionMetadataBuilder };\n\n//# sourceMappingURL=ConnectionMetadataBuilder.js.map\n","/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and does not use syntax highlighting.\n */\nvar SimpleConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SimpleConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n SimpleConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query\" + \": \" + sql);\n }\n };\n /**\n * Logs query that is failed.\n */\n SimpleConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query failed: \" + sql);\n console.log(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n SimpleConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query is slow: \" + sql);\n console.log(\"execution time: \" + time);\n };\n /**\n * Logs events from the schema build process.\n */\n SimpleConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n console.log(message);\n }\n };\n /**\n * Logs events from the migrations run process.\n */\n SimpleConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n console.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n SimpleConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n console.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n console.info(message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(message);\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n SimpleConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return SimpleConsoleLogger;\n}());\nexport { SimpleConsoleLogger };\n\n//# sourceMappingURL=SimpleConsoleLogger.js.map\n","import { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and use syntax highlighting.\n */\nvar AdvancedConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AdvancedConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n AdvancedConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logInfo(\"query:\", PlatformTools.highlightSql(sql));\n }\n };\n /**\n * Logs query that is failed.\n */\n AdvancedConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logError(\"query failed:\", PlatformTools.highlightSql(sql));\n PlatformTools.logError(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n AdvancedConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logWarn(\"query is slow:\", PlatformTools.highlightSql(sql));\n PlatformTools.logWarn(\"execution time:\", time);\n };\n /**\n * Logs events from the schema build process.\n */\n AdvancedConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n PlatformTools.log(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n AdvancedConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n PlatformTools.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n AdvancedConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n PlatformTools.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n PlatformTools.logInfo(\"INFO:\", message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(PlatformTools.warn(message));\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n AdvancedConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return AdvancedConsoleLogger;\n}());\nexport { AdvancedConsoleLogger };\n\n//# sourceMappingURL=AdvancedConsoleLogger.js.map\n","import { __extends } from \"tslib\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger logs everything into ormlogs.log file.\n */\nvar DummyLogger = /** @class */ (function () {\n function DummyLogger() {\n }\n /**\n * Logs query and parameters used in it.\n */\n DummyLogger.prototype.logQuery = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is failed.\n */\n DummyLogger.prototype.logQueryError = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is slow.\n */\n DummyLogger.prototype.logQuerySlow = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the schema build process.\n */\n DummyLogger.prototype.logSchemaBuild = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the migrations run process.\n */\n DummyLogger.prototype.logMigration = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n DummyLogger.prototype.log = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n return DummyLogger;\n}());\nexport { DummyLogger };\nvar FileLogger = /** @class */ (function (_super) {\n __extends(FileLogger, _super);\n function FileLogger() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FileLogger;\n}(DummyLogger));\nexport { FileLogger };\n\n//# sourceMappingURL=BrowserFileLoggerDummy.js.map\n","import debug from \"debug\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM via debug library.\n */\nvar DebugLogger = /** @class */ (function () {\n function DebugLogger() {\n this.debugQueryLog = debug(\"typeorm:query:log\");\n this.debugQueryError = debug(\"typeorm:query:error\");\n this.debugQuerySlow = debug(\"typeorm:query:slow\");\n this.debugSchemaBuild = debug(\"typeorm:schema\");\n this.debugMigration = debug(\"typeorm:migration\");\n this.debugLog = debug(\"typeorm:log\");\n this.debugInfo = debug(\"typeorm:info\");\n this.debugWarn = debug(\"typeorm:warn\");\n }\n /**\n * Logs query and parameters used in it.\n */\n DebugLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.debugQueryLog.enabled) {\n this.debugQueryLog(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryLog(\"parameters:\", parameters);\n }\n }\n };\n /**\n * Logs query that failed.\n */\n DebugLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.debugQueryError.enabled) {\n this.debugQueryError(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryError(\"parameters:\", parameters);\n }\n this.debugQueryError(\"error: \", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n DebugLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n if (this.debugQuerySlow.enabled) {\n this.debugQuerySlow(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQuerySlow(\"parameters:\", parameters);\n }\n this.debugQuerySlow(\"execution time:\", time);\n }\n };\n /**\n * Logs events from the schema build process.\n */\n DebugLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.debugSchemaBuild.enabled) {\n this.debugSchemaBuild(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n DebugLogger.prototype.logMigration = function (message, queryRunner) {\n if (this.debugMigration.enabled) {\n this.debugMigration(message);\n }\n };\n /**\n * Perform logging using given logger.\n * Log has its own level and message.\n */\n DebugLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.debugLog.enabled) {\n this.debugLog(message);\n }\n break;\n case \"info\":\n if (this.debugInfo.enabled) {\n this.debugInfo(message);\n }\n break;\n case \"warn\":\n if (this.debugWarn.enabled) {\n this.debugWarn(message);\n }\n break;\n }\n };\n return DebugLogger;\n}());\nexport { DebugLogger };\n\n//# sourceMappingURL=DebugLogger.js.map\n","import { SimpleConsoleLogger } from \"./SimpleConsoleLogger\";\nimport { AdvancedConsoleLogger } from \"./AdvancedConsoleLogger\";\nimport { FileLogger } from \"./FileLogger\";\nimport { DebugLogger } from \"./DebugLogger\";\n/**\n * Helps to create logger instances.\n */\nvar LoggerFactory = /** @class */ (function () {\n function LoggerFactory() {\n }\n /**\n * Creates a new logger depend on a given connection's driver.\n */\n LoggerFactory.prototype.create = function (logger, options) {\n if (logger instanceof Object)\n return logger;\n if (logger) {\n switch (logger) {\n case \"simple-console\":\n return new SimpleConsoleLogger(options);\n case \"file\":\n return new FileLogger(options);\n case \"advanced-console\":\n return new AdvancedConsoleLogger(options);\n case \"debug\":\n return new DebugLogger();\n }\n }\n return new AdvancedConsoleLogger(options);\n };\n return LoggerFactory;\n}());\nexport { LoggerFactory };\n\n//# sourceMappingURL=LoggerFactory.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Caches query result into Redis database.\n */\nvar RedisQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RedisQueryResultCache(connection, clientType) {\n this.connection = connection;\n this.clientType = clientType;\n this.redis = this.loadRedis();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n RedisQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var cacheOptions;\n return __generator(this, function (_a) {\n cacheOptions = this.connection.options.cache;\n if (this.clientType === \"redis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = this.redis.createClient(cacheOptions.options);\n }\n else {\n this.client = this.redis.createClient();\n }\n }\n else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options);\n }\n else {\n this.client = new this.redis();\n }\n }\n else if (this.clientType === \"ioredis/cluster\") {\n if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n }\n else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n }\n else {\n throw new Error(\"options.startupNodes required for \" + this.clientType + \".\");\n }\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects the connection\n */\n RedisQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.quit(function (err, result) {\n if (err)\n return fail(err);\n ok();\n _this.client = undefined;\n });\n })];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n RedisQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n RedisQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n var _this = this;\n return new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.get(options.identifier, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else if (options.query) {\n _this.client.get(options.query, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else {\n ok(undefined);\n }\n });\n };\n /**\n * Checks if cache is expired or not.\n */\n RedisQueryResultCache.prototype.isExpired = function (savedCache) {\n return (savedCache.time + savedCache.duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n RedisQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n else if (options.query) {\n _this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n })];\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n RedisQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.flushdb(function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n })];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n RedisQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n return _this.deleteKey(identifier);\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes a single key from redis database.\n */\n RedisQueryResultCache.prototype.deleteKey = function (key) {\n var _this = this;\n return new Promise(function (ok, fail) {\n _this.client.del(key, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n });\n };\n /**\n * Loads redis dependency.\n */\n RedisQueryResultCache.prototype.loadRedis = function () {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\");\n }\n else {\n return PlatformTools.load(this.clientType);\n }\n }\n catch (e) {\n throw new Error(\"Cannot use cache because \" + this.clientType + \" is not installed. Please run \\\"npm i \" + this.clientType + \" --save\\\".\");\n }\n };\n return RedisQueryResultCache;\n}());\nexport { RedisQueryResultCache };\n\n//# sourceMappingURL=RedisQueryResultCache.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nvar DbQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DbQueryResultCache(connection) {\n this.connection = connection;\n var options = this.connection.driver.options;\n var cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n var cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n DbQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects with given cache provider.\n */\n DbQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n DbQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var driver, tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n driver = this.connection.driver;\n return [4 /*yield*/, queryRunner.hasTable(this.queryResultCacheTable)];\n case 1:\n tableExist = _a.sent();\n if (tableExist)\n return [2 /*return*/];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheId }),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheIdentifier }),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheTime }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheDuration }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheQuery }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheResult }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n DbQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n queryRunner = this.getQueryRunner(queryRunner);\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n if (options.identifier) {\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"identifier\") + \" = :identifier\")\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n }\n else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(\"dbms_lob.compare(\" + qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \", :query) = 0\", { query: options.query })\n .getRawOne();\n }\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \" = :query\")\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n return Promise.resolve(undefined);\n };\n /**\n * Checks if cache is expired or not.\n */\n DbQueryResultCache.prototype.isExpired = function (savedCache) {\n var duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time) : savedCache.time) + duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n DbQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var insertedValues, qb, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n insertedValues = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n if (!(savedCache && savedCache.identifier)) return [3 /*break*/, 2];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n qb.where(qb.escape(\"identifier\") + \" = :condition\", { condition: insertedValues.identifier });\n return [4 /*yield*/, qb.execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 6];\n case 2:\n if (!(savedCache && savedCache.query)) return [3 /*break*/, 4];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(\"dbms_lob.compare(\\\"query\\\", :condition) = 0\", { condition: insertedValues.query });\n }\n else {\n qb.where(qb.escape(\"query\") + \" = :condition\", { condition: insertedValues.query });\n }\n return [4 /*yield*/, qb.execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 6];\n case 4: // otherwise insert\n return [4 /*yield*/, queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n DbQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable)];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n DbQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n var qb = _this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(_this.queryResultCacheTable)\n .where(qb.escape(\"identifier\") + \" = :identifier\", { identifier: identifier })\n .execute();\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets a query runner to work with.\n */\n DbQueryResultCache.prototype.getQueryRunner = function (queryRunner) {\n if (queryRunner)\n return queryRunner;\n return this.connection.createQueryRunner();\n };\n return DbQueryResultCache;\n}());\nexport { DbQueryResultCache };\n\n//# sourceMappingURL=DbQueryResultCache.js.map\n","import { RedisQueryResultCache } from \"./RedisQueryResultCache\";\nimport { DbQueryResultCache } from \"./DbQueryResultCache\";\n/**\n * Caches query result into Redis database.\n */\nvar QueryResultCacheFactory = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryResultCacheFactory(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query result cache based on connection options.\n */\n QueryResultCacheFactory.prototype.create = function () {\n if (!this.connection.options.cache)\n throw new Error(\"To use cache you need to enable it in connection options by setting cache: true or providing some caching options. Example: { host: ..., username: ..., cache: true }\");\n var cache = this.connection.options.cache;\n if (cache.provider && typeof cache.provider === \"function\") {\n return cache.provider(this.connection);\n }\n if (cache.type === \"redis\" || cache.type === \"ioredis\" || cache.type === \"ioredis/cluster\") {\n return new RedisQueryResultCache(this.connection, cache.type);\n }\n else {\n return new DbQueryResultCache(this.connection);\n }\n };\n return QueryResultCacheFactory;\n}());\nexport { QueryResultCacheFactory };\n\n//# sourceMappingURL=QueryResultCacheFactory.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nvar RelationLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationLoader(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation data for the given entity and its relation.\n */\n RelationLoader.prototype.load = function (relation, entityOrEntities, queryRunner) {\n if (queryRunner && queryRunner.isReleased)\n queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n }\n else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n };\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n RelationLoader.prototype.loadManyToOneOrOneToOneOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var columns = relation.entityMetadata.primaryColumns;\n var joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation.joinColumns;\n var conditions = joinColumns.map(function (joinColumn) {\n return relation.entityMetadata.name + \".\" + joinColumn.propertyName + \" = \" + relation.propertyName + \".\" + joinColumn.referencedColumn.propertyName;\n }).join(\" AND \");\n var joinAliasName = relation.entityMetadata.name;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target, joinAliasName, conditions);\n if (columns.length === 1) {\n qb.where(joinAliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (joinAliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n RelationLoader.prototype.loadOneToManyOrOneToOneNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var aliasName = relation.propertyName;\n var columns = relation.inverseRelation.joinColumns;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation.entityMetadata.target, aliasName);\n if (columns.length === 1) {\n qb.where(aliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (aliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n RelationLoader.prototype.loadManyToManyOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" IN (:...\" + joinColumn.propertyName + \")\";\n });\n var inverseJoinColumnConditions = relation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \"=\" + mainAlias + \".\" + inverseJoinColumn.referencedColumn.propertyName;\n });\n var parameters = relation.joinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n RelationLoader.prototype.loadManyToManyNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" = \" + mainAlias + \".\" + joinColumn.referencedColumn.propertyName;\n });\n var inverseJoinColumnConditions = relation.inverseRelation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \" IN (:...\" + inverseJoinColumn.propertyName + \")\";\n });\n var parameters = relation.inverseRelation.inverseJoinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n RelationLoader.prototype.enableLazyLoad = function (relation, entity, queryRunner) {\n var relationLoader = this;\n var dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n var promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n var resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n var setData = function (entity, value) {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n var setPromise = function (entity, value) {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n function (result) { return entity[promiseIndex] === value ? setData(entity, result) : result; });\n return value;\n };\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n var loader = relationLoader.load(relation, this, queryRunner).then(function (result) { return relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result; });\n return setPromise(this, loader);\n },\n set: function (value) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n }\n else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n };\n return RelationLoader;\n}());\nexport { RelationLoader };\n\n//# sourceMappingURL=RelationLoader.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\n/**\n * Loads relation ids for the given entities.\n */\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection) {\n this.connection = connection;\n }\n /**\n * Loads relation ids of the given entity or entities.\n */\n RelationIdLoader.prototype.load = function (relationOrTarget, relationNameOrEntities, entitiesOrRelatedEntities, maybeRelatedEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, entities, relatedEntities, entityMetadata;\n return __generator(this, function (_a) {\n if (relationOrTarget instanceof RelationMetadata) {\n relation = relationOrTarget;\n entities = Array.isArray(relationNameOrEntities) ? relationNameOrEntities : [relationNameOrEntities];\n relatedEntities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : (entitiesOrRelatedEntities ? [entitiesOrRelatedEntities] : undefined);\n }\n else {\n entityMetadata = this.connection.getMetadata(relationOrTarget);\n relation = entityMetadata.findRelationWithPropertyPath(relationNameOrEntities);\n if (!relation)\n throw new Error(\"Relation \\\"\" + relation + \"\\\" was not found in \\\"\" + entityMetadata.name + \"\\\".\");\n entities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : [entitiesOrRelatedEntities];\n relatedEntities = Array.isArray(maybeRelatedEntities) ? maybeRelatedEntities : (maybeRelatedEntities ? [maybeRelatedEntities] : undefined);\n }\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return [2 /*return*/, this.loadForManyToMany(relation, entities, relatedEntities)];\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return [2 /*return*/, this.loadForManyToOneAndOneToOneOwner(relation, entities, relatedEntities)];\n }\n else { // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return [2 /*return*/, this.loadForOneToManyAndOneToOneNotOwner(relation, entities, relatedEntities)];\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n RelationIdLoader.prototype.loadManyToManyRelationIdsAndGroup = function (relation, entitiesOrEntities, relatedEntityOrEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var isMany, entities, relationIds, relatedEntities, columns, inverseColumns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isMany = relation.isManyToMany || relation.isOneToMany;\n entities = Array.isArray(entitiesOrEntities) ? entitiesOrEntities : [entitiesOrEntities];\n if (!!relatedEntityOrEntities) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.relationLoader.load(relation, entitiesOrEntities)];\n case 1:\n relatedEntityOrEntities = _a.sent();\n if (!relatedEntityOrEntities.length)\n return [2 /*return*/, entities.map(function (entity) { return ({ entity: entity, related: isMany ? [] : undefined }); })];\n _a.label = 2;\n case 2: return [4 /*yield*/, this.load(relation, entitiesOrEntities, relatedEntityOrEntities)];\n case 3:\n relationIds = _a.sent();\n relatedEntities = Array.isArray(relatedEntityOrEntities) ? relatedEntityOrEntities : [relatedEntityOrEntities];\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.entityMetadata.primaryColumns;\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.entityMetadata.primaryColumns;\n inverseColumns = relation.inverseRelation.joinColumns.map(function (column) { return column.referencedColumn; });\n }\n else {\n }\n return [2 /*return*/, entities.map(function (entity) {\n var group = { entity: entity, related: isMany ? [] : undefined };\n relationIds.forEach(function (relationId) {\n var entityMatched = inverseColumns.every(function (column) {\n return column.getEntityValue(entity) === relationId[column.entityMetadata.name + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (entityMatched) {\n relatedEntities.forEach(function (relatedEntity) {\n var relatedEntityMatched = columns.every(function (column) {\n return column.getEntityValue(relatedEntity) === relationId[column.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (relatedEntityMatched) {\n if (isMany) {\n group.related.push(relatedEntity);\n }\n else {\n group.related = relatedEntity;\n }\n }\n });\n }\n });\n return group;\n })];\n }\n });\n });\n };\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise {\n\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation ids for the many-to-many relation.\n */\n RelationIdLoader.prototype.loadForManyToMany = function (relation, entities, relatedEntities) {\n var junctionMetadata = relation.junctionEntityMetadata;\n var mainAlias = junctionMetadata.name;\n var columns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n var inverseColumns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n var qb = this.connection.createQueryBuilder();\n // select all columns from junction table\n junctionMetadata.ownerColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n junctionMetadata.inverseColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add conditions for the given entities\n var condition1 = \"\";\n if (columns.length === 1) {\n qb.setParameter(\"values1\", entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n condition1 = mainAlias + \".\" + columns[0].propertyPath + \" IN (:...values1)\"; // todo: use ANY for postgres\n }\n else {\n condition1 = \"(\" + entities.map(function (entity, entityIndex) {\n return columns.map(function (column) {\n var paramName = \"entity1_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n // add conditions for the given inverse entities\n var condition2 = \"\";\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n qb.setParameter(\"values2\", relatedEntities.map(function (entity) { return inverseColumns[0].referencedColumn.getEntityValue(entity); }));\n condition2 = mainAlias + \".\" + inverseColumns[0].propertyPath + \" IN (:...values2)\"; // todo: use ANY for postgres\n }\n else {\n condition2 = \"(\" + relatedEntities.map(function (entity, entityIndex) {\n return inverseColumns.map(function (column) {\n var paramName = \"entity2_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n }\n // execute query\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"))\n .getRawMany();\n };\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n RelationIdLoader.prototype.loadForManyToOneAndOneToOneOwner = function (relation, entities, relatedEntities) {\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.entityMetadata.primaryColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.entityMetadata.primaryColumns[0].getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.entityMetadata.primaryColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n RelationIdLoader.prototype.loadForOneToManyAndOneToOneNotOwner = function (relation, entities, relatedEntities) {\n relation = relation.inverseRelation;\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + relation.inverseRelation.propertyPath.replace(\".\", \"_\") + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.joinColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.joinColumns[0].referencedColumn.getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.joinColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.joinColumns.map(function (joinColumn, joinColumnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + joinColumnIndex;\n qb.setParameter(paramName, joinColumn.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + joinColumn.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\";\nimport { CannotExecuteNotConnectedError } from \"../error/CannotExecuteNotConnectedError\";\nimport { CannotConnectAlreadyConnectedError } from \"../error/CannotConnectAlreadyConnectedError\";\nimport { EntityMetadataNotFoundError } from \"../error/EntityMetadataNotFoundError\";\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoEntityManager } from \"../entity-manager/MongoEntityManager\";\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\";\nimport { DriverFactory } from \"../driver/DriverFactory\";\nimport { ConnectionMetadataBuilder } from \"./ConnectionMetadataBuilder\";\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\";\nimport { LoggerFactory } from \"../logger/LoggerFactory\";\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\";\nimport { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\";\nimport { RelationLoader } from \"../query-builder/RelationLoader\";\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\";\nimport { EntitySchema } from \"../\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nvar Connection = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Connection(options) {\n /**\n * Migration instances that are registered for this connection.\n */\n this.migrations = [];\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n this.subscribers = [];\n /**\n * All entity metadatas that are registered for this connection.\n */\n this.entityMetadatas = [];\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.relationIdLoader = new RelationIdLoader(this);\n this.isConnected = false;\n }\n Object.defineProperty(Connection.prototype, \"mongoManager\", {\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get: function () {\n if (!(this.manager instanceof MongoEntityManager))\n throw new Error(\"MongoEntityManager is only available for MongoDB databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Connection.prototype, \"sqljsManager\", {\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get: function () {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new Error(\"SqljsEntityManager is only available for Sqljs databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n Connection.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n // connect to the database via its driver\n return [4 /*yield*/, this.driver.connect()];\n case 1:\n // connect to the database via its driver\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.connect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n _a.label = 4;\n case 4:\n _a.trys.push([4, 12, , 14]);\n // build all metadatas registered in the current connection\n this.buildMetadatas();\n return [4 /*yield*/, this.driver.afterConnect()];\n case 5:\n _a.sent();\n if (!this.options.dropSchema) return [3 /*break*/, 7];\n return [4 /*yield*/, this.dropDatabase()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7:\n if (!this.options.synchronize) return [3 /*break*/, 9];\n return [4 /*yield*/, this.synchronize()];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!this.options.migrationsRun) return [3 /*break*/, 11];\n return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 14];\n case 12:\n error_1 = _a.sent();\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n return [4 /*yield*/, this.close()];\n case 13:\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n _a.sent();\n throw error_1;\n case 14: return [2 /*return*/, this];\n }\n });\n });\n };\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n Connection.prototype.close = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n return [4 /*yield*/, this.driver.disconnect()];\n case 1:\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.disconnect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n ObjectUtils.assign(this, { isConnected: false });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n Connection.prototype.synchronize = function (dropBeforeSync) {\n if (dropBeforeSync === void 0) { dropBeforeSync = false; }\n return __awaiter(this, void 0, void 0, function () {\n var schemaBuilder;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n if (!dropBeforeSync) return [3 /*break*/, 2];\n return [4 /*yield*/, this.dropDatabase()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n schemaBuilder = this.driver.createSchemaBuilder();\n return [4 /*yield*/, schemaBuilder.build()];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n Connection.prototype.dropDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, databases_2, databases_1, databases_1_1, database, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.createQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 13, 15]);\n if (!(this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 10];\n databases_2 = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(function (metadata) {\n if (metadata.database && databases_2.indexOf(metadata.database) === -1)\n databases_2.push(metadata.database);\n });\n _b.label = 2;\n case 2:\n _b.trys.push([2, 7, 8, 9]);\n databases_1 = __values(databases_2), databases_1_1 = databases_1.next();\n _b.label = 3;\n case 3:\n if (!!databases_1_1.done) return [3 /*break*/, 6];\n database = databases_1_1.value;\n return [4 /*yield*/, queryRunner.clearDatabase(database)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n databases_1_1 = databases_1.next();\n return [3 /*break*/, 3];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (databases_1_1 && !databases_1_1.done && (_a = databases_1.return)) _a.call(databases_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 9: return [3 /*break*/, 12];\n case 10: return [4 /*yield*/, queryRunner.clearDatabase()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [3 /*break*/, 15];\n case 13: return [4 /*yield*/, queryRunner.release()];\n case 14:\n _b.sent();\n return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.runMigrations = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor, successMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.executePendingMigrations()];\n case 1:\n successMigrations = _a.sent();\n return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.undoLastMigration = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.undoLastMigration()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n Connection.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n migrationExecutor = new MigrationExecutor(this);\n return [4 /*yield*/, migrationExecutor.showMigrations()];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n Connection.prototype.hasMetadata = function (target) {\n return !!this.findMetadata(target);\n };\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n Connection.prototype.getMetadata = function (target) {\n var metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n return metadata;\n };\n /**\n * Gets repository for the given entity.\n */\n Connection.prototype.getRepository = function (target) {\n return this.manager.getRepository(target);\n };\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n Connection.prototype.getTreeRepository = function (target) {\n return this.manager.getTreeRepository(target);\n };\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n Connection.prototype.getMongoRepository = function (target) {\n if (!(this.driver instanceof MongoDriver))\n throw new Error(\"You can use getMongoRepository only for MongoDB connections.\");\n return this.manager.getRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n Connection.prototype.getCustomRepository = function (customRepository) {\n return this.manager.getCustomRepository(customRepository);\n };\n Connection.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.manager.transaction(isolationOrRunInTransaction, runInTransactionParam)];\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n Connection.prototype.query = function (query, parameters, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var usedQueryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this instanceof MongoEntityManager)\n throw new Error(\"Queries aren't supported by MongoDB.\");\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n usedQueryRunner = queryRunner || this.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, usedQueryRunner.query(query, parameters)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, usedQueryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {\n if (this instanceof MongoEntityManager)\n throw new Error(\"Query Builder is not supported by MongoDB.\");\n if (alias) {\n var metadata = this.getMetadata(entityOrRunner);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n }\n else {\n return new SelectQueryBuilder(this, entityOrRunner);\n }\n };\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n Connection.prototype.createQueryRunner = function (mode) {\n if (mode === void 0) { mode = \"master\"; }\n var queryRunner = this.driver.createQueryRunner(mode);\n var manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n };\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n Connection.prototype.getManyToManyMetadata = function (entityTarget, relationPropertyPath) {\n var relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \\\"\" + relationPropertyPath + \"\\\" was not found in \" + entityTarget + \" entity.\");\n if (!relationMetadata.isManyToMany)\n throw new Error(\"Relation \\\"\" + entityTarget + \"#\" + relationPropertyPath + \"\\\" does not have a many-to-many relationship.\" +\n \"You can use this method only on many-to-many relations.\");\n return relationMetadata.junctionEntityMetadata;\n };\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n Connection.prototype.createEntityManager = function (queryRunner) {\n return new EntityManagerFactory().create(this, queryRunner);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n Connection.prototype.findMetadata = function (target) {\n return this.entityMetadatas.find(function (metadata) {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n }\n else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n return false;\n });\n };\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n Connection.prototype.buildMetadatas = function () {\n var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n var entityMetadataValidator = new EntityMetadataValidator();\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n // build entity metadatas\n var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n // create migration instances\n var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n this.driver.database = this.getDatabaseName();\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== \"view\"; }), this.driver);\n };\n // This database name property is nested for replication configs.\n Connection.prototype.getDatabaseName = function () {\n var options = this.options;\n switch (options.type) {\n case \"mysql\":\n case \"mariadb\":\n case \"postgres\":\n case \"cockroachdb\":\n case \"mssql\":\n case \"oracle\":\n return DriverUtils.buildDriverOptions(options.replication ? options.replication.master : options).database;\n case \"mongodb\":\n return DriverUtils.buildMongoDBDriverOptions(options).database;\n default:\n return DriverUtils.buildDriverOptions(options).database;\n }\n };\n return Connection;\n}());\nexport { Connection };\n\n//# sourceMappingURL=Connection.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to get connection that does not exist.\n */\nvar ConnectionNotFoundError = /** @class */ (function (_super) {\n __extends(ConnectionNotFoundError, _super);\n function ConnectionNotFoundError(name) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionNotFoundError\";\n Object.setPrototypeOf(_this, ConnectionNotFoundError.prototype);\n _this.message = \"Connection \\\"\" + name + \"\\\" was not found.\";\n return _this;\n }\n return ConnectionNotFoundError;\n}(Error));\nexport { ConnectionNotFoundError };\n\n//# sourceMappingURL=ConnectionNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to recreate connection with the same name, but previous connection was not closed yet.\n */\nvar AlreadyHasActiveConnectionError = /** @class */ (function (_super) {\n __extends(AlreadyHasActiveConnectionError, _super);\n function AlreadyHasActiveConnectionError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"AlreadyHasActiveConnectionError\";\n Object.setPrototypeOf(_this, AlreadyHasActiveConnectionError.prototype);\n _this.message = \"Cannot create a new connection named \\\"\" + connectionName + \"\\\", because connection with such name \" +\n \"already exist and it now has an active connection session.\";\n return _this;\n }\n return AlreadyHasActiveConnectionError;\n}(Error));\nexport { AlreadyHasActiveConnectionError };\n\n//# sourceMappingURL=AlreadyHasActiveConnectionError.js.map\n","import { Connection } from \"./Connection\";\nimport { ConnectionNotFoundError } from \"../error/ConnectionNotFoundError\";\nimport { AlreadyHasActiveConnectionError } from \"../error/AlreadyHasActiveConnectionError\";\n/**\n * ConnectionManager is used to store and manage multiple orm connections.\n * It also provides useful factory methods to simplify connection creation.\n */\nvar ConnectionManager = /** @class */ (function () {\n function ConnectionManager() {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * List of connections registered in this connection manager.\n */\n this.connections = [];\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if connection with the given name exist in the manager.\n */\n ConnectionManager.prototype.has = function (name) {\n return !!this.connections.find(function (connection) { return connection.name === name; });\n };\n /**\n * Gets registered connection with the given name.\n * If connection name is not given then it will get a default connection.\n * Throws error if connection with the given name was not found.\n */\n ConnectionManager.prototype.get = function (name) {\n if (name === void 0) { name = \"default\"; }\n var connection = this.connections.find(function (connection) { return connection.name === name; });\n if (!connection)\n throw new ConnectionNotFoundError(name);\n return connection;\n };\n /**\n * Creates a new connection based on the given connection options and registers it in the manager.\n * Connection won't be established, you'll need to manually call connect method to establish connection.\n */\n ConnectionManager.prototype.create = function (options) {\n // check if such connection is already registered\n var existConnection = this.connections.find(function (connection) { return connection.name === (options.name || \"default\"); });\n if (existConnection) {\n // if connection is registered and its not closed then throw an error\n if (existConnection.isConnected)\n throw new AlreadyHasActiveConnectionError(options.name || \"default\");\n // if its registered but closed then simply remove it from the manager\n this.connections.splice(this.connections.indexOf(existConnection), 1);\n }\n // create a new connection\n var connection = new Connection(options);\n this.connections.push(connection);\n return connection;\n };\n return ConnectionManager;\n}());\nexport { ConnectionManager };\n\n//# sourceMappingURL=ConnectionManager.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsEnvReader = /** @class */ (function () {\n function ConnectionOptionsEnvReader() {\n }\n ConnectionOptionsEnvReader.prototype.read = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsEnvReader;\n}());\nexport { ConnectionOptionsEnvReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsXmlReader = /** @class */ (function () {\n function ConnectionOptionsXmlReader() {\n }\n ConnectionOptionsXmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsXmlReader;\n}());\nexport { ConnectionOptionsXmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsYmlReader = /** @class */ (function () {\n function ConnectionOptionsYmlReader() {\n }\n ConnectionOptionsYmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsYmlReader;\n}());\nexport { ConnectionOptionsYmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsReader = /** @class */ (function () {\n function ConnectionOptionsReader() {\n }\n ConnectionOptionsReader.prototype.all = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.get = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.has = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsReader;\n}());\nexport { ConnectionOptionsReader };\n\n//# sourceMappingURL=BrowserConnectionOptionsReaderDummy.js.map\n","export {};\n\n//# sourceMappingURL=EntityTarget.js.map\n","export {};\n\n//# sourceMappingURL=ObjectType.js.map\n","export {};\n\n//# sourceMappingURL=ObjectLiteral.js.map\n","export {};\n\n//# sourceMappingURL=DeepPartial.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get method parameter's type.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar CannotReflectMethodParameterTypeError = /** @class */ (function (_super) {\n __extends(CannotReflectMethodParameterTypeError, _super);\n function CannotReflectMethodParameterTypeError(target, methodName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotReflectMethodParameterTypeError\";\n Object.setPrototypeOf(_this, CannotReflectMethodParameterTypeError.prototype);\n _this.message = \"Cannot get reflected type for a \\\"\" + methodName + \"\\\" method's parameter of \\\"\" + target.name + \"\\\" class. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application.\";\n return _this;\n }\n return CannotReflectMethodParameterTypeError;\n}(Error));\nexport { CannotReflectMethodParameterTypeError };\n\n//# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to execute operation that requires connection to be established.\n */\nvar ConnectionIsNotSetError = /** @class */ (function (_super) {\n __extends(ConnectionIsNotSetError, _super);\n function ConnectionIsNotSetError(dbType) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionIsNotSetError\";\n Object.setPrototypeOf(_this, ConnectionIsNotSetError.prototype);\n _this.message = \"Connection with \" + dbType + \" database is not established. Check connection configuration.\";\n return _this;\n }\n return ConnectionIsNotSetError;\n}(Error));\nexport { ConnectionIsNotSetError };\n\n//# sourceMappingURL=ConnectionIsNotSetError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataAlreadyExistsError, _super);\n function MetadataAlreadyExistsError(metadataType, constructor, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata already exists for the class constructor \" + JSON.stringify(constructor) +\n (propertyName ? \" on property \" + propertyName : \". If you previously renamed or moved entity class, make sure\" +\n \" that compiled version of old entity class source wasn't left in the compiler output directory.\");\n return _this;\n }\n return MetadataAlreadyExistsError;\n}(Error));\nexport { MetadataAlreadyExistsError };\n\n//# sourceMappingURL=MetadataAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\nvar PrimaryColumnCannotBeNullableError = /** @class */ (function (_super) {\n __extends(PrimaryColumnCannotBeNullableError, _super);\n function PrimaryColumnCannotBeNullableError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"PrimaryColumnCannotBeNullableError\";\n Object.setPrototypeOf(_this, PrimaryColumnCannotBeNullableError.prototype);\n _this.message = \"Primary column \" + object.constructor.name + \"#\" + propertyName + \" cannot be nullable. \" +\n \"Its not allowed for primary keys. Try to remove nullable option.\";\n return _this;\n }\n return PrimaryColumnCannotBeNullableError;\n}(Error));\nexport { PrimaryColumnCannotBeNullableError };\n\n//# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access repository before connection is established.\n */\nvar NoConnectionForRepositoryError = /** @class */ (function (_super) {\n __extends(NoConnectionForRepositoryError, _super);\n function NoConnectionForRepositoryError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NoConnectionForRepositoryError\";\n Object.setPrototypeOf(_this, NoConnectionForRepositoryError.prototype);\n _this.message = \"Cannot get a Repository for \\\"\" + connectionName + \" connection, because connection with the database \" +\n \"is not established yet. Call connection#connect method to establish connection.\";\n return _this;\n }\n return NoConnectionForRepositoryError;\n}(Error));\nexport { NoConnectionForRepositoryError };\n\n//# sourceMappingURL=NoConnectionForRepositoryError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableIsNotAllowedError, _super);\n function UsingJoinTableIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableIsNotAllowedError.prototype);\n _this.message = \"Using JoinTable on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n (entityMetadata.name + \"#\" + relation.propertyName + \" has \" + relation.relationType + \" relation, \") +\n \"however you can use JoinTable only on many-to-many relations.\";\n return _this;\n }\n return UsingJoinTableIsNotAllowedError;\n}(Error));\nexport { UsingJoinTableIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinTableIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinColumnError = /** @class */ (function (_super) {\n __extends(MissingJoinColumnError, _super);\n function MissingJoinColumnError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinColumnError\";\n Object.setPrototypeOf(_this, MissingJoinColumnError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinColumn is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" one-to-one relationship. \") +\n \"You need to put JoinColumn decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinColumn is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" one-to-one relationship. \" +\n \"You need to put JoinColumn decorator on it.\";\n }\n return _this;\n }\n return MissingJoinColumnError;\n}(Error));\nexport { MissingJoinColumnError };\n\n//# sourceMappingURL=MissingJoinColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access entity manager before connection is established.\n */\nvar CannotGetEntityManagerNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotGetEntityManagerNotConnectedError, _super);\n function CannotGetEntityManagerNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotGetEntityManagerNotConnectedError\";\n Object.setPrototypeOf(_this, CannotGetEntityManagerNotConnectedError.prototype);\n _this.message = \"Cannot get entity manager for \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotGetEntityManagerNotConnectedError;\n}(Error));\nexport { CannotGetEntityManagerNotConnectedError };\n\n//# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataWithSuchNameAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataWithSuchNameAlreadyExistsError, _super);\n function MetadataWithSuchNameAlreadyExistsError(metadataType, name) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataWithSuchNameAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataWithSuchNameAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata with such name \" + name + \" already exists. \" +\n \"Do you apply decorator twice? Or maybe try to change a name?\";\n return _this;\n }\n return MetadataWithSuchNameAlreadyExistsError;\n}(Error));\nexport { MetadataWithSuchNameAlreadyExistsError };\n\n//# sourceMappingURL=MetadataWithSuchNameAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use naming strategy that does not exist.\n */\nvar NamingStrategyNotFoundError = /** @class */ (function (_super) {\n __extends(NamingStrategyNotFoundError, _super);\n function NamingStrategyNotFoundError(strategyName, connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NamingStrategyNotFoundError\";\n Object.setPrototypeOf(_this, NamingStrategyNotFoundError.prototype);\n var name = strategyName instanceof Function ? strategyName.name : strategyName;\n _this.message = \"Naming strategy \\\"\" + name + \"\\\" was not found. Looks like this naming strategy does not \" +\n (\"exist or it was not registered in current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return NamingStrategyNotFoundError;\n}(Error));\nexport { NamingStrategyNotFoundError };\n\n//# sourceMappingURL=NamingStrategyNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinTableError = /** @class */ (function (_super) {\n __extends(MissingJoinTableError, _super);\n function MissingJoinTableError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinTableError\";\n Object.setPrototypeOf(_this, MissingJoinTableError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinTable is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" many-to-many relationship. \") +\n \"You need to put decorator decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinTable is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" many-to-many relationship. \" +\n \"You need to put JoinTable decorator on it.\";\n }\n return _this;\n }\n return MissingJoinTableError;\n}(Error));\nexport { MissingJoinTableError };\n\n//# sourceMappingURL=MissingJoinTableError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnOnlyOnOneSideAllowedError, _super);\n function UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinColumn is allowed only on one side of the one-to-one relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinTable decorator only on it.\";\n return _this;\n }\n return UsingJoinColumnOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinColumnOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableOnlyOnOneSideAllowedError, _super);\n function UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinTable is allowed only on one side of the many-to-many relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinColumn decorator only on it.\";\n return _this;\n }\n return UsingJoinTableOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinTableOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinTableOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown . Theoretically can't be thrown.\n */\nvar PersistedEntityNotFoundError = /** @class */ (function (_super) {\n __extends(PersistedEntityNotFoundError, _super);\n function PersistedEntityNotFoundError() {\n var _this = _super.call(this) || this;\n _this.name = \"PersistedEntityNotFoundError\";\n Object.setPrototypeOf(_this, PersistedEntityNotFoundError.prototype);\n _this.message = \"Internal error. Persisted entity was not found in the list of prepared operated entities.\";\n return _this;\n }\n return PersistedEntityNotFoundError;\n}(Error));\nexport { PersistedEntityNotFoundError };\n\n//# sourceMappingURL=PersistedEntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnIsNotAllowedError, _super);\n function UsingJoinColumnIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnIsNotAllowedError.prototype);\n _this.message = \"Using JoinColumn on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n \"You can use JoinColumn only on one-to-one and many-to-one relations.\";\n return _this;\n }\n return UsingJoinColumnIsNotAllowedError;\n}(Error));\nexport { UsingJoinColumnIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get column's type automatically.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar ColumnTypeUndefinedError = /** @class */ (function (_super) {\n __extends(ColumnTypeUndefinedError, _super);\n function ColumnTypeUndefinedError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"ColumnTypeUndefinedError\";\n Object.setPrototypeOf(_this, ColumnTypeUndefinedError.prototype);\n _this.message = \"Column type for \" + object.constructor.name + \"#\" + propertyName + \" is not defined and cannot be guessed. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application (before any entity imported).\" +\n \"If you are using JavaScript instead of TypeScript you must explicitly provide a column type.\";\n return _this;\n }\n return ColumnTypeUndefinedError;\n}(Error));\nexport { ColumnTypeUndefinedError };\n\n//# sourceMappingURL=ColumnTypeUndefinedError.js.map\n","export * from \"./CannotReflectMethodParameterTypeError\";\nexport * from \"./AlreadyHasActiveConnectionError\";\nexport * from \"./SubjectWithoutIdentifierError\";\nexport * from \"./CannotConnectAlreadyConnectedError\";\nexport * from \"./LockNotSupportedOnGivenDriverError\";\nexport * from \"./ConnectionIsNotSetError\";\nexport * from \"./CannotCreateEntityIdMapError\";\nexport * from \"./MetadataAlreadyExistsError\";\nexport * from \"./CannotDetermineEntityError\";\nexport * from \"./UpdateValuesMissingError\";\nexport * from \"./TreeRepositoryNotSupportedError\";\nexport * from \"./CustomRepositoryNotFoundError\";\nexport * from \"./TransactionNotStartedError\";\nexport * from \"./TransactionAlreadyStartedError\";\nexport * from \"./EntityNotFoundError\";\nexport * from \"./EntityMetadataNotFoundError\";\nexport * from \"./MustBeEntityError\";\nexport * from \"./OptimisticLockVersionMismatchError\";\nexport * from \"./LimitOnUpdateNotSupportedError\";\nexport * from \"./PrimaryColumnCannotBeNullableError\";\nexport * from \"./CustomRepositoryCannotInheritRepositoryError\";\nexport * from \"./QueryRunnerProviderAlreadyReleasedError\";\nexport * from \"./CannotAttachTreeChildrenEntityError\";\nexport * from \"./CustomRepositoryDoesNotHaveEntityError\";\nexport * from \"./MissingDeleteDateColumnError\";\nexport * from \"./NoConnectionForRepositoryError\";\nexport * from \"./CircularRelationsError\";\nexport * from \"./ReturningStatementNotSupportedError\";\nexport * from \"./UsingJoinTableIsNotAllowedError\";\nexport * from \"./MissingJoinColumnError\";\nexport * from \"./MissingPrimaryColumnError\";\nexport * from \"./EntityColumnNotFound\";\nexport * from \"./MissingDriverError\";\nexport * from \"./DriverPackageNotInstalledError\";\nexport * from \"./CannotGetEntityManagerNotConnectedError\";\nexport * from \"./ConnectionNotFoundError\";\nexport * from \"./NoVersionOrUpdateDateColumnError\";\nexport * from \"./InsertValuesMissingError\";\nexport * from \"./OptimisticLockCanNotBeUsedError\";\nexport * from \"./MetadataWithSuchNameAlreadyExistsError\";\nexport * from \"./DriverOptionNotSetError\";\nexport * from \"./FindRelationsNotFoundError\";\nexport * from \"./RepositoryNotFoundError\";\nexport * from \"./NamingStrategyNotFoundError\";\nexport * from \"./PessimisticLockTransactionRequiredError\";\nexport * from \"./RepositoryNotTreeError\";\nexport * from \"./DataTypeNotSupportedError\";\nexport * from \"./InitializedRelationError\";\nexport * from \"./MissingJoinTableError\";\nexport * from \"./QueryFailedError\";\nexport * from \"./NoNeedToReleaseEntityManagerError\";\nexport * from \"./UsingJoinColumnOnlyOnOneSideAllowedError\";\nexport * from \"./UsingJoinTableOnlyOnOneSideAllowedError\";\nexport * from \"./SubjectRemovedAndUpdatedError\";\nexport * from \"./PersistedEntityNotFoundError\";\nexport * from \"./UsingJoinColumnIsNotAllowedError\";\nexport * from \"./ColumnTypeUndefinedError\";\nexport * from \"./QueryRunnerAlreadyReleasedError\";\nexport * from \"./OffsetWithoutLimitNotSupportedError\";\nexport * from \"./CannotExecuteNotConnectedError\";\nexport * from \"./NoConnectionOptionError\";\n\n//# sourceMappingURL=index.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n */\nexport function Column(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\" || typeOrOptions instanceof Function) {\n type = typeOrOptions;\n }\n else if (typeOrOptions) {\n options = typeOrOptions;\n type = typeOrOptions.type;\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType) // if type is not given explicitly then try to guess it\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // specify HSTORE type if column is HSTORE\n if (options.type === \"hstore\" && !options.hstoreType)\n options.hstoreType = reflectMetadataType === Object ? \"object\" : \"string\";\n if (typeOrOptions instanceof Function) { // register an embedded\n getMetadataArgsStorage().embeddeds.push({\n target: object.constructor,\n propertyName: propertyName,\n isArray: reflectMetadataType === Array || options.array === true,\n prefix: options.prefix !== undefined ? options.prefix : undefined,\n type: typeOrOptions\n });\n }\n else { // register a regular column\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // create unique\n if (options.unique === true)\n getMetadataArgsStorage().uniques.push({ target: object.constructor, columns: [propertyName] });\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n }\n };\n}\n\n//# sourceMappingURL=Column.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a creation date of the inserted object.\n * Creation date is generated and inserted only once,\n * at the first time when you create an object, the value is inserted into the table, and is never touched again.\n */\nexport function CreateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"createDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=CreateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a delete date of the soft-deleted object.\n * This date is being updated each time you soft-delete the object.\n */\nexport function DeleteDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"deleteDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=DeleteDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * This column creates an integer PRIMARY COLUMN with generated set to true.\n */\nexport function PrimaryGeneratedColumn(strategyOrOptions, maybeOptions) {\n // normalize parameters\n var options = {};\n var strategy;\n if (strategyOrOptions) {\n if (typeof strategyOrOptions === \"string\")\n strategy = strategyOrOptions;\n if (strategyOrOptions instanceof Object) {\n strategy = \"increment\";\n Object.assign(options, strategyOrOptions);\n }\n }\n else {\n strategy = \"increment\";\n }\n if (maybeOptions instanceof Object)\n Object.assign(options, maybeOptions);\n return function (object, propertyName) {\n // if column type is not explicitly set then determine it based on generation strategy\n if (!options.type) {\n if (strategy === \"increment\") {\n options.type = Number;\n }\n else if (strategy === \"uuid\") {\n options.type = \"uuid\";\n }\n else if (strategy === \"rowid\") {\n options.type = \"int\";\n }\n }\n // explicitly set a primary and generated to column options\n options.primary = true;\n // register column metadata args\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n // register generated metadata args\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=PrimaryGeneratedColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\nimport { PrimaryColumnCannotBeNullableError } from \"../../error/PrimaryColumnCannotBeNullableError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * Primary columns also creates a PRIMARY KEY for this column in a db.\n */\nexport function PrimaryColumn(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\") {\n type = typeOrOptions;\n }\n else {\n options = Object.assign({}, typeOrOptions);\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType)\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // check if column is not nullable, because we cannot allow a primary key to be nullable\n if (options.nullable)\n throw new PrimaryColumnCannotBeNullableError(object, propertyName);\n // explicitly set a primary to column options\n options.primary = true;\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n };\n}\n\n//# sourceMappingURL=PrimaryColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store an update date of the updated object.\n * This date is being updated each time you persist the object.\n */\nexport function UpdateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"updateDate\",\n options: options ? options : {}\n });\n };\n}\n\n//# sourceMappingURL=UpdateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a number - version of the entity.\n * Every time your entity will be persisted, this number will be increased by one -\n * so you can organize visioning and update strategies of your entity.\n */\nexport function VersionColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"version\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=VersionColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * ViewColumn decorator is used to mark a specific class property as a view column.\n */\nexport function ViewColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=ViewColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of column that is available only for MongoDB database.\n * Marks your entity's column to be an object id.\n */\nexport function ObjectIdColumn(options) {\n return function (object, propertyName) {\n // if column options are not given then create a new empty options\n if (!options)\n options = {};\n options.primary = true;\n if (!options.name)\n options.name = \"_id\";\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"objectId\",\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ObjectIdColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity insertion.\n */\nexport function AfterInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_INSERT\n });\n };\n}\n\n//# sourceMappingURL=AfterInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after entity is loaded.\n */\nexport function AfterLoad() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_LOAD\n });\n };\n}\n\n//# sourceMappingURL=AfterLoad.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity removal.\n */\nexport function AfterRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=AfterRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity update.\n */\nexport function AfterUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=AfterUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity insertion.\n */\nexport function BeforeInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_INSERT\n });\n };\n}\n\n//# sourceMappingURL=BeforeInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity removal.\n */\nexport function BeforeRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=BeforeRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity update.\n */\nexport function BeforeUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=BeforeUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event\n * occurs. Those classes must implement EventSubscriberInterface interface.\n */\nexport function EventSubscriber() {\n return function (target) {\n getMetadataArgsStorage().entitySubscribers.push({\n target: target\n });\n };\n}\n\n//# sourceMappingURL=EventSubscriber.js.map\n","export {};\n\n//# sourceMappingURL=ColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=IndexOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinTableOptions.js.map\n","export {};\n\n//# sourceMappingURL=RelationOptions.js.map\n","export {};\n\n//# sourceMappingURL=EntityOptions.js.map\n","export {};\n\n//# sourceMappingURL=ValueTransformer.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(optionsOrOptionsArray) {\n return function (object, propertyName) {\n var options = Array.isArray(optionsOrOptionsArray) ? optionsOrOptionsArray : [optionsOrOptionsArray || {}];\n options.forEach(function (options) {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName\n });\n });\n };\n}\n\n//# sourceMappingURL=JoinColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(options) {\n return function (object, propertyName) {\n options = options || {};\n getMetadataArgsStorage().joinTables.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n joinColumns: (options && options.joinColumn ? [options.joinColumn] : options.joinColumns),\n inverseJoinColumns: (options && options.inverseJoinColumn ? [options.inverseJoinColumn] : options.inverseJoinColumns),\n schema: options && options.schema ? options.schema : undefined,\n database: options && options.database ? options.database : undefined,\n });\n };\n}\n\n//# sourceMappingURL=JoinTable.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options.lazy === true;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-many\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // Normalize parameters.\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-one\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,\n * but Entity2 has only one Entity1. Entity2 is the owner of the relationship, and stores the id of Entity1 on its\n * side of the relation.\n */\nexport function OneToMany(typeFunctionOrTarget, inverseSide, options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSide,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-one\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Holds a number of children in the closure table of the column.\n *\n * @deprecated Do not use this decorator, it may be removed in the future versions\n */\nexport function RelationCount(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationCounts.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationCount.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special decorator used to extract relation id into separate entity property.\n *\n * @experimental\n */\nexport function RelationId(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationIds.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationId.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity (table or document depend on database type).\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function Entity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n type: \"regular\",\n orderBy: options.orderBy ? options.orderBy : undefined,\n engine: options.engine ? options.engine : undefined,\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize,\n withoutRowid: options.withoutRowid\n });\n };\n}\n\n//# sourceMappingURL=Entity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of the table used in the single-table inherited tables.\n */\nexport function ChildEntity(discriminatorValue) {\n return function (target) {\n // register a table metadata\n getMetadataArgsStorage().tables.push({\n target: target,\n type: \"entity-child\",\n });\n // register discriminator value if it was provided\n if (typeof discriminatorValue !== 'undefined') {\n getMetadataArgsStorage().discriminatorValues.push({\n target: target,\n value: discriminatorValue\n });\n }\n };\n}\n\n//# sourceMappingURL=ChildEntity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Sets for entity to use table inheritance pattern.\n */\nexport function TableInheritance(options) {\n return function (target) {\n getMetadataArgsStorage().inheritances.push({\n target: target,\n pattern: options && options.pattern ? options.pattern : \"STI\",\n column: options && options.column ? typeof options.column === \"string\" ? { name: options.column } : options.column : undefined\n });\n };\n}\n\n//# sourceMappingURL=TableInheritance.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity view.\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function ViewEntity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n expression: options.expression,\n type: \"view\",\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize === false ? false : true,\n materialized: !!options.materialized\n });\n };\n}\n\n//# sourceMappingURL=ViewEntity.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { getConnection, getMetadataArgsStorage, MongoRepository, Repository, TreeRepository } from \"../../\";\nexport function Transaction(connectionOrOptions) {\n return function (target, methodName, descriptor) {\n // save original method - we gonna need it\n var originalMethod = descriptor.value;\n // override method descriptor with proxy method\n descriptor.value = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var connectionName = \"default\";\n var isolationLevel = undefined;\n if (connectionOrOptions) {\n if (typeof connectionOrOptions === \"string\") {\n connectionName = connectionOrOptions;\n }\n else {\n if (connectionOrOptions.connectionName) {\n connectionName = connectionOrOptions.connectionName;\n }\n if (connectionOrOptions.isolation) {\n isolationLevel = connectionOrOptions.isolation;\n }\n }\n }\n var transactionCallback = function (entityManager) {\n var argsWithInjectedTransactionManagerAndRepositories;\n // filter all @TransactionManager() and @TransactionRepository() decorator usages for this method\n var transactionEntityManagerMetadatas = getMetadataArgsStorage()\n .filterTransactionEntityManagers(target.constructor, methodName)\n .reverse();\n var transactionRepositoryMetadatas = getMetadataArgsStorage()\n .filterTransactionRepository(target.constructor, methodName)\n .reverse();\n // if there are @TransactionManager() decorator usages the inject them\n if (transactionEntityManagerMetadatas.length > 0) {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n // replace method params with injection of transactionEntityManager\n transactionEntityManagerMetadatas.forEach(function (metadata) {\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, entityManager);\n });\n }\n else if (transactionRepositoryMetadatas.length === 0) { // otherwise if there's no transaction repositories in use, inject it as a first parameter\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([entityManager], __read(args));\n }\n else {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n }\n // for every usage of @TransactionRepository decorator\n transactionRepositoryMetadatas.forEach(function (metadata) {\n var repositoryInstance;\n // detect type of the repository and get instance from transaction entity manager\n switch (metadata.repositoryType) {\n case Repository:\n repositoryInstance = entityManager.getRepository(metadata.entityType);\n break;\n case MongoRepository:\n repositoryInstance = entityManager.getMongoRepository(metadata.entityType);\n break;\n case TreeRepository:\n repositoryInstance = entityManager.getTreeRepository(metadata.entityType);\n break;\n // if not the TypeORM's ones, there must be custom repository classes\n default:\n repositoryInstance = entityManager.getCustomRepository(metadata.repositoryType);\n }\n // replace method param with injection of repository instance\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, repositoryInstance);\n });\n return originalMethod.apply(_this, argsWithInjectedTransactionManagerAndRepositories);\n };\n if (isolationLevel) {\n return getConnection(connectionName).manager.transaction(isolationLevel, transactionCallback);\n }\n else {\n return getConnection(connectionName).manager.transaction(transactionCallback);\n }\n };\n };\n}\n\n//# sourceMappingURL=Transaction.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Injects transaction's entity manager into the method wrapped with @Transaction decorator.\n */\nexport function TransactionManager() {\n return function (object, methodName, index) {\n getMetadataArgsStorage().transactionEntityManagers.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n });\n };\n}\n\n//# sourceMappingURL=TransactionManager.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { CannotReflectMethodParameterTypeError } from \"../../error/CannotReflectMethodParameterTypeError\";\n/**\n * Injects transaction's repository into the method wrapped with @Transaction decorator.\n */\nexport function TransactionRepository(entityType) {\n return function (object, methodName, index) {\n // get repository type\n var repositoryType;\n try {\n repositoryType = Reflect.getOwnMetadata(\"design:paramtypes\", object, methodName)[index];\n }\n catch (err) {\n throw new CannotReflectMethodParameterTypeError(object.constructor, methodName);\n }\n getMetadataArgsStorage().transactionRepositories.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n repositoryType: repositoryType,\n entityType: entityType,\n });\n };\n}\n\n//# sourceMappingURL=TransactionRepository.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Creates a \"level\"/\"length\" column to the table that holds a closure table.\n */\nexport function TreeLevelColumn() {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"treeLevel\",\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeLevelColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a parent of the tree.\n * \"Tree parent\" indicates who owns (is a parent) of this entity in tree structure.\n */\nexport function TreeParent() {\n return function (object, propertyName) {\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n getMetadataArgsStorage().relations.push({\n isTreeParent: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"many-to-one\",\n type: function () { return object.constructor; },\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeParent.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a children of the tree.\n * \"Tree children\" will contain all children (bind) of this entity.\n */\nexport function TreeChildren(options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n // add one-to-many relation for this\n getMetadataArgsStorage().relations.push({\n isTreeChildren: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: function () { return object.constructor; },\n options: options\n });\n };\n}\n\n//# sourceMappingURL=TreeChildren.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks entity to work like a tree.\n * Tree pattern that will be used for the tree entity should be specified.\n * @TreeParent decorator must be used in tree entities.\n * TreeRepository can be used to manipulate with tree entities.\n */\nexport function Tree(type, options) {\n return function (target) {\n getMetadataArgsStorage().trees.push({\n target: target,\n type: type,\n options: type === \"closure-table\" ? options : undefined\n });\n };\n}\n\n//# sourceMappingURL=Tree.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database index.\n * Can be used on entity property or on entity.\n * Can create indices with composite columns when used on entity.\n */\nexport function Index(nameOrFieldsOrOptions, maybeFieldsOrOptions, maybeOptions) {\n // normalize parameters\n var name = typeof nameOrFieldsOrOptions === \"string\" ? nameOrFieldsOrOptions : undefined;\n var fields = typeof nameOrFieldsOrOptions === \"string\" ? maybeFieldsOrOptions : nameOrFieldsOrOptions;\n var options = (typeof nameOrFieldsOrOptions === \"object\" && !Array.isArray(nameOrFieldsOrOptions)) ? nameOrFieldsOrOptions : maybeOptions;\n if (!options)\n options = (typeof maybeFieldsOrOptions === \"object\" && !Array.isArray(maybeFieldsOrOptions)) ? maybeFieldsOrOptions : maybeOptions;\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().indices.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: propertyName ? [propertyName] : fields,\n synchronize: options && options.synchronize === false ? false : true,\n where: options ? options.where : undefined,\n unique: options && options.unique ? true : false,\n spatial: options && options.spatial ? true : false,\n fulltext: options && options.fulltext ? true : false,\n parser: options ? options.parser : undefined,\n sparse: options && options.sparse ? true : false,\n background: options && options.background ? true : false,\n expireAfterSeconds: options ? options.expireAfterSeconds : undefined\n });\n };\n}\n\n//# sourceMappingURL=Index.js.map\n","import { getMetadataArgsStorage } from \"../index\";\n/**\n * Composite unique constraint must be set on entity classes and must specify entity's fields to be unique.\n */\nexport function Unique(nameOrFields, maybeFields) {\n var name = typeof nameOrFields === \"string\" ? nameOrFields : undefined;\n var fields = typeof nameOrFields === \"string\" ? maybeFields : nameOrFields;\n return function (clsOrObject, propertyName) {\n var columns = fields;\n if (propertyName !== undefined) {\n switch (typeof (propertyName)) {\n case \"string\":\n columns = [propertyName];\n break;\n case \"symbol\":\n columns = [propertyName.toString()];\n break;\n }\n }\n var args = {\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: columns,\n };\n getMetadataArgsStorage().uniques.push(args);\n };\n}\n\n//# sourceMappingURL=Unique.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database check.\n * Can be used on entity property or on entity.\n * Can create checks with composite columns when used on entity.\n */\nexport function Check(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Check expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().checks.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Check.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database exclusion.\n * Can be used on entity.\n * Can create exclusions with composite columns when used on entity.\n */\nexport function Exclusion(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Exclusion expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().exclusions.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Exclusion.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Marks a column to generate a value on entity insertion.\n * There are three types of generation strategy - increment, uuid and rowid (cockroachdb only).\n * Increment uses a number which increases by one on each insertion.\n * Uuid generates a special UUID token.\n * Rowid supports only in CockroachDB and uses `unique_rowid()` function\n *\n * Note, some databases do not support non-primary generation columns.\n */\nexport function Generated(strategy) {\n if (strategy === void 0) { strategy = \"increment\"; }\n return function (object, propertyName) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=Generated.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Used to declare a class as a custom repository.\n * Custom repository can manage some specific entity or just be generic.\n * Custom repository optionally can extend AbstractRepository, Repository or TreeRepository.\n */\nexport function EntityRepository(entity) {\n return function (target) {\n getMetadataArgsStorage().entityRepositories.push({\n target: target,\n entity: entity,\n });\n };\n}\n\n//# sourceMappingURL=EntityRepository.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Any([...]) }\n */\nexport function Any(value) {\n return new FindOperator(\"any\", value);\n}\n\n//# sourceMappingURL=Any.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Between(x, y) }\n */\nexport function Between(from, to) {\n return new FindOperator(\"between\", [from, to], true, true);\n}\n\n//# sourceMappingURL=Between.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Equal(\"value\") }\n */\nexport function Equal(value) {\n return new FindOperator(\"equal\", value);\n}\n\n//# sourceMappingURL=Equal.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: IsNull() }\n */\nexport function IsNull() {\n return new FindOperator(\"isNull\", undefined, false);\n}\n\n//# sourceMappingURL=IsNull.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThan(10) }\n */\nexport function LessThan(value) {\n return new FindOperator(\"lessThan\", value);\n}\n\n//# sourceMappingURL=LessThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThanOrEqual(10) }\n */\nexport function LessThanOrEqual(value) {\n return new FindOperator(\"lessThanOrEqual\", value);\n}\n\n//# sourceMappingURL=LessThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: ILike(\"%SOME string%\") }\n */\nexport function ILike(value) {\n return new FindOperator(\"ilike\", value);\n}\n\n//# sourceMappingURL=ILike.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Like(\"%some sting%\") }\n */\nexport function Like(value) {\n return new FindOperator(\"like\", value);\n}\n\n//# sourceMappingURL=Like.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThan(10) }\n */\nexport function MoreThan(value) {\n return new FindOperator(\"moreThan\", value);\n}\n\n//# sourceMappingURL=MoreThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThanOrEqual(10) }\n */\nexport function MoreThanOrEqual(value) {\n return new FindOperator(\"moreThanOrEqual\", value);\n}\n\n//# sourceMappingURL=MoreThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Used to negotiate expression.\n * Example: { title: not(\"hello\") } will return entities where title not equal to \"hello\".\n */\nexport function Not(value) {\n return new FindOperator(\"not\", value);\n}\n\n//# sourceMappingURL=Not.js.map\n","import { FindOperator } from \"../FindOperator\";\nexport function Raw(valueOrSqlGenerator, sqlGeneratorParameters) {\n if (typeof valueOrSqlGenerator !== 'function') {\n return new FindOperator(\"raw\", valueOrSqlGenerator, false);\n }\n return new FindOperator(\"raw\", [], true, true, valueOrSqlGenerator, sqlGeneratorParameters);\n}\n\n//# sourceMappingURL=Raw.js.map\n","export {};\n\n//# sourceMappingURL=FindConditions.js.map\n","export {};\n\n//# sourceMappingURL=FindManyOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOneOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOperatorType.js.map\n","export {};\n\n//# sourceMappingURL=JoinOptions.js.map\n","export {};\n\n//# sourceMappingURL=OrderByCondition.js.map\n","export {};\n\n//# sourceMappingURL=Logger.js.map\n","export {};\n\n//# sourceMappingURL=LoggerOptions.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getConnection } from \"../index\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nvar BaseEntity = /** @class */ (function () {\n function BaseEntity() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.prototype.hasId = function () {\n return this.constructor.getRepository().hasId(this);\n };\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n BaseEntity.prototype.save = function (options) {\n return this.constructor.getRepository().save(this, options);\n };\n /**\n * Removes current entity from the database.\n */\n BaseEntity.prototype.remove = function (options) {\n return this.constructor.getRepository().remove(this, options);\n };\n /**\n * Records the delete date of current entity.\n */\n BaseEntity.prototype.softRemove = function (options) {\n return this.constructor.getRepository().softRemove(this, options);\n };\n /**\n * Recovers a given entity in the database.\n */\n BaseEntity.prototype.recover = function (options) {\n return this.constructor.getRepository().recover(this, options);\n };\n /**\n * Reloads entity data from the database.\n */\n BaseEntity.prototype.reload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var base, newestEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n base = this.constructor;\n return [4 /*yield*/, base.getRepository().findOneOrFail(base.getId(this))];\n case 1:\n newestEntity = _a.sent();\n ObjectUtils.assign(this, newestEntity);\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Sets connection to be used by entity.\n */\n BaseEntity.useConnection = function (connection) {\n this.usedConnection = connection;\n };\n /**\n * Gets current entity's Repository.\n */\n BaseEntity.getRepository = function () {\n var connection = this.usedConnection || getConnection();\n return connection.getRepository(this);\n };\n Object.defineProperty(BaseEntity, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.getRepository().target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.hasId = function (entity) {\n return this.getRepository().hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n BaseEntity.getId = function (entity) {\n return this.getRepository().getId(entity);\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n BaseEntity.createQueryBuilder = function (alias) {\n return this.getRepository().createQueryBuilder(alias);\n };\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n BaseEntity.create = function (entityOrEntities) {\n return this.getRepository().create(entityOrEntities);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n BaseEntity.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.getRepository()).merge.apply(_a, __spreadArray([mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n BaseEntity.preload = function (entityLike) {\n return this.getRepository().preload(entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n BaseEntity.save = function (entityOrEntities, options) {\n return this.getRepository().save(entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n BaseEntity.remove = function (entityOrEntities, options) {\n return this.getRepository().remove(entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n BaseEntity.softRemove = function (entityOrEntities, options) {\n return this.getRepository().softRemove(entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n BaseEntity.insert = function (entity, options) {\n return this.getRepository().insert(entity, options);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.update = function (criteria, partialEntity, options) {\n return this.getRepository().update(criteria, partialEntity, options);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.delete = function (criteria, options) {\n return this.getRepository().delete(criteria, options);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n BaseEntity.count = function (optionsOrConditions) {\n return this.getRepository().count(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n BaseEntity.find = function (optionsOrConditions) {\n return this.getRepository().find(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n BaseEntity.findAndCount = function (optionsOrConditions) {\n return this.getRepository().findAndCount(optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n BaseEntity.findByIds = function (ids, optionsOrConditions) {\n return this.getRepository().findByIds(ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOne = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOne(optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOneOrFail(optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n BaseEntity.query = function (query, parameters) {\n return this.getRepository().query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n BaseEntity.clear = function () {\n return this.getRepository().clear();\n };\n return BaseEntity;\n}());\nexport { BaseEntity };\n\n//# sourceMappingURL=BaseEntity.js.map\n","export {};\n\n//# sourceMappingURL=RemoveOptions.js.map\n","export {};\n\n//# sourceMappingURL=SaveOptions.js.map\n","import { EventEmitter, Readable, Writable } from \"../../platform/PlatformTools\";\n\n//# sourceMappingURL=typings.js.map\n","export {};\n\n//# sourceMappingURL=DatabaseType.js.map\n","export {};\n\n//# sourceMappingURL=ReplicationMode.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/*!\n */\nimport \"reflect-metadata\";\nimport { ConnectionManager } from \"./connection/ConnectionManager\";\nimport { MetadataArgsStorage } from \"./metadata-args/MetadataArgsStorage\";\nimport { getFromContainer } from \"./container\";\nimport { PlatformTools } from \"./platform/PlatformTools\";\nimport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\n// -------------------------------------------------------------------------\n// Commonly Used exports\n// -------------------------------------------------------------------------\nexport * from \"./container\";\nexport * from \"./common/EntityTarget\";\nexport * from \"./common/ObjectType\";\nexport * from \"./common/ObjectLiteral\";\nexport * from \"./common/DeepPartial\";\nexport * from \"./error\";\nexport * from \"./decorator/columns/Column\";\nexport * from \"./decorator/columns/CreateDateColumn\";\nexport * from \"./decorator/columns/DeleteDateColumn\";\nexport * from \"./decorator/columns/PrimaryGeneratedColumn\";\nexport * from \"./decorator/columns/PrimaryColumn\";\nexport * from \"./decorator/columns/UpdateDateColumn\";\nexport * from \"./decorator/columns/VersionColumn\";\nexport * from \"./decorator/columns/ViewColumn\";\nexport * from \"./decorator/columns/ObjectIdColumn\";\nexport * from \"./decorator/listeners/AfterInsert\";\nexport * from \"./decorator/listeners/AfterLoad\";\nexport * from \"./decorator/listeners/AfterRemove\";\nexport * from \"./decorator/listeners/AfterUpdate\";\nexport * from \"./decorator/listeners/BeforeInsert\";\nexport * from \"./decorator/listeners/BeforeRemove\";\nexport * from \"./decorator/listeners/BeforeUpdate\";\nexport * from \"./decorator/listeners/EventSubscriber\";\nexport * from \"./decorator/options/ColumnOptions\";\nexport * from \"./decorator/options/IndexOptions\";\nexport * from \"./decorator/options/JoinColumnOptions\";\nexport * from \"./decorator/options/JoinTableOptions\";\nexport * from \"./decorator/options/RelationOptions\";\nexport * from \"./decorator/options/EntityOptions\";\nexport * from \"./decorator/options/ValueTransformer\";\nexport * from \"./decorator/relations/JoinColumn\";\nexport * from \"./decorator/relations/JoinTable\";\nexport * from \"./decorator/relations/ManyToMany\";\nexport * from \"./decorator/relations/ManyToOne\";\nexport * from \"./decorator/relations/OneToMany\";\nexport * from \"./decorator/relations/OneToOne\";\nexport * from \"./decorator/relations/RelationCount\";\nexport * from \"./decorator/relations/RelationId\";\nexport * from \"./decorator/entity/Entity\";\nexport * from \"./decorator/entity/ChildEntity\";\nexport * from \"./decorator/entity/TableInheritance\";\nexport * from \"./decorator/entity-view/ViewEntity\";\nexport * from \"./decorator/transaction/Transaction\";\nexport * from \"./decorator/transaction/TransactionManager\";\nexport * from \"./decorator/transaction/TransactionRepository\";\nexport * from \"./decorator/tree/TreeLevelColumn\";\nexport * from \"./decorator/tree/TreeParent\";\nexport * from \"./decorator/tree/TreeChildren\";\nexport * from \"./decorator/tree/Tree\";\nexport * from \"./decorator/Index\";\nexport * from \"./decorator/Unique\";\nexport * from \"./decorator/Check\";\nexport * from \"./decorator/Exclusion\";\nexport * from \"./decorator/Generated\";\nexport * from \"./decorator/EntityRepository\";\nexport * from \"./find-options/operator/Any\";\nexport * from \"./find-options/operator/Between\";\nexport * from \"./find-options/operator/Equal\";\nexport * from \"./find-options/operator/In\";\nexport * from \"./find-options/operator/IsNull\";\nexport * from \"./find-options/operator/LessThan\";\nexport * from \"./find-options/operator/LessThanOrEqual\";\nexport * from \"./find-options/operator/ILike\";\nexport * from \"./find-options/operator/Like\";\nexport * from \"./find-options/operator/MoreThan\";\nexport * from \"./find-options/operator/MoreThanOrEqual\";\nexport * from \"./find-options/operator/Not\";\nexport * from \"./find-options/operator/Raw\";\nexport * from \"./find-options/FindConditions\";\nexport * from \"./find-options/FindManyOptions\";\nexport * from \"./find-options/FindOneOptions\";\nexport * from \"./find-options/FindOperator\";\nexport * from \"./find-options/FindOperatorType\";\nexport * from \"./find-options/JoinOptions\";\nexport * from \"./find-options/OrderByCondition\";\nexport * from \"./find-options/FindOptionsUtils\";\nexport * from \"./logger/Logger\";\nexport * from \"./logger/LoggerOptions\";\nexport * from \"./logger/AdvancedConsoleLogger\";\nexport * from \"./logger/SimpleConsoleLogger\";\nexport * from \"./logger/FileLogger\";\nexport * from \"./metadata/EntityMetadata\";\nexport * from \"./entity-manager/EntityManager\";\nexport * from \"./repository/AbstractRepository\";\nexport * from \"./repository/Repository\";\nexport * from \"./repository/BaseEntity\";\nexport * from \"./repository/TreeRepository\";\nexport * from \"./repository/MongoRepository\";\nexport * from \"./repository/RemoveOptions\";\nexport * from \"./repository/SaveOptions\";\nexport * from \"./schema-builder/table/TableCheck\";\nexport * from \"./schema-builder/table/TableColumn\";\nexport * from \"./schema-builder/table/TableExclusion\";\nexport * from \"./schema-builder/table/TableForeignKey\";\nexport * from \"./schema-builder/table/TableIndex\";\nexport * from \"./schema-builder/table/TableUnique\";\nexport * from \"./schema-builder/table/Table\";\nexport * from \"./driver/mongodb/typings\";\nexport * from \"./driver/types/DatabaseType\";\nexport * from \"./driver/types/ReplicationMode\";\nexport * from \"./driver/sqlserver/MssqlParameter\";\nexport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\nexport { Connection } from \"./connection/Connection\";\nexport { ConnectionManager } from \"./connection/ConnectionManager\";\nexport { QueryBuilder } from \"./query-builder/QueryBuilder\";\nexport { SelectQueryBuilder } from \"./query-builder/SelectQueryBuilder\";\nexport { DeleteQueryBuilder } from \"./query-builder/DeleteQueryBuilder\";\nexport { InsertQueryBuilder } from \"./query-builder/InsertQueryBuilder\";\nexport { UpdateQueryBuilder } from \"./query-builder/UpdateQueryBuilder\";\nexport { RelationQueryBuilder } from \"./query-builder/RelationQueryBuilder\";\nexport { Brackets } from \"./query-builder/Brackets\";\nexport { InsertResult } from \"./query-builder/result/InsertResult\";\nexport { UpdateResult } from \"./query-builder/result/UpdateResult\";\nexport { DeleteResult } from \"./query-builder/result/DeleteResult\";\nexport { MongoEntityManager } from \"./entity-manager/MongoEntityManager\";\nexport { Migration } from \"./migration/Migration\";\nexport { MigrationExecutor } from \"./migration/MigrationExecutor\";\nexport { DefaultNamingStrategy } from \"./naming-strategy/DefaultNamingStrategy\";\nexport { EntitySchema } from \"./entity-schema/EntitySchema\";\n// -------------------------------------------------------------------------\n// Deprecated\n// -------------------------------------------------------------------------\n// -------------------------------------------------------------------------\n// Commonly used functionality\n// -------------------------------------------------------------------------\n/**\n * Gets metadata args storage.\n */\nexport function getMetadataArgsStorage() {\n // we should store metadata storage in a global variable otherwise it brings too much problems\n // one of the problem is that if any entity (or any other) will be imported before consumer will call\n // useContainer method with his own container implementation, that entity will be registered in the\n // old old container (default one post probably) and consumer will his entity.\n // calling useContainer before he imports any entity (or any other) is not always convenient.\n // another reason is that when we run migrations typeorm is being called from a global package\n // and it may load entities which register decorators in typeorm of local package\n // this leads to impossibility of usage of entities in migrations and cli related operations\n var globalScope = PlatformTools.getGlobalVariable();\n if (!globalScope.typeormMetadataArgsStorage)\n globalScope.typeormMetadataArgsStorage = new MetadataArgsStorage();\n return globalScope.typeormMetadataArgsStorage;\n}\n/**\n * Reads connection options stored in ormconfig configuration file.\n */\nexport function getConnectionOptions(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new ConnectionOptionsReader().get(connectionName)];\n });\n });\n}\n/**\n * Gets a ConnectionManager which creates connections.\n */\nexport function getConnectionManager() {\n return getFromContainer(ConnectionManager);\n}\n/**\n * Creates a new connection and registers it in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * Only one connection from ormconfig will be created (name \"default\" or connection without name).\n */\nexport function createConnection(optionsOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var connectionName, options, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n connectionName = typeof optionsOrName === \"string\" ? optionsOrName : \"default\";\n if (!(optionsOrName instanceof Object)) return [3 /*break*/, 1];\n _a = optionsOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, getConnectionOptions(connectionName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n options = _a;\n return [2 /*return*/, getConnectionManager().create(options).connect()];\n }\n });\n });\n}\n/**\n * Creates new connections and registers them in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * All connections from the ormconfig will be created.\n */\nexport function createConnections(options) {\n return __awaiter(this, void 0, void 0, function () {\n var connections;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!options) return [3 /*break*/, 2];\n return [4 /*yield*/, new ConnectionOptionsReader().all()];\n case 1:\n options = _a.sent();\n _a.label = 2;\n case 2:\n connections = options.map(function (options) { return getConnectionManager().create(options); });\n return [2 /*return*/, Promise.all(connections.map(function (connection) { return connection.connect(); }))];\n }\n });\n });\n}\n/**\n * Gets connection from the connection manager.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getConnection(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName);\n}\n/**\n * Gets entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets MongoDB entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getMongoManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets Sqljs entity manager from connection name.\n * \"default\" connection is used, when no name is specified.\n * Only works when Sqljs driver is used.\n */\nexport function getSqljsManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets repository for the given entity class.\n */\nexport function getRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getTreeRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getTreeRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getCustomRepository(customRepository, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getCustomRepository(customRepository);\n}\n/**\n * Gets mongodb repository for the given entity class or name.\n */\nexport function getMongoRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getMongoRepository(entityClass);\n}\n/**\n * Creates a new query builder.\n */\nexport function createQueryBuilder(entityClass, alias, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n if (entityClass) {\n return getRepository(entityClass, connectionName).createQueryBuilder(alias);\n }\n return getConnection(connectionName).createQueryBuilder();\n}\n\n//# sourceMappingURL=index.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Foreign key from the database stored in this class.\n */\nvar TableForeignKey = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableForeignKey(options) {\n /**\n * Column names which included by this foreign key.\n */\n this.columnNames = [];\n /**\n * Column names which included by this foreign key.\n */\n this.referencedColumnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.referencedColumnNames = options.referencedColumnNames;\n this.referencedTableName = options.referencedTableName;\n this.onDelete = options.onDelete;\n this.onUpdate = options.onUpdate;\n this.deferrable = options.deferrable;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this foreign key with exactly same properties.\n */\n TableForeignKey.prototype.clone = function () {\n return new TableForeignKey({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n referencedColumnNames: __spreadArray([], __read(this.referencedColumnNames)),\n referencedTableName: this.referencedTableName,\n onDelete: this.onDelete,\n onUpdate: this.onUpdate,\n deferrable: this.deferrable,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new table foreign key from the given foreign key metadata.\n */\n TableForeignKey.create = function (metadata) {\n return new TableForeignKey({\n name: metadata.name,\n columnNames: metadata.columnNames,\n referencedColumnNames: metadata.referencedColumnNames,\n referencedTableName: metadata.referencedTablePath,\n onDelete: metadata.onDelete,\n onUpdate: metadata.onUpdate,\n deferrable: metadata.deferrable,\n });\n };\n return TableForeignKey;\n}());\nexport { TableForeignKey };\n\n//# sourceMappingURL=TableForeignKey.js.map\n","import shajs from \"sha.js\";\n/**\n * Converts string into camelCase.\n *\n * @see http://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case\n */\nexport function camelCase(str, firstCapital) {\n if (firstCapital === void 0) { firstCapital = false; }\n return str.replace(/^([A-Z])|[\\s-_](\\w)/g, function (match, p1, p2, offset) {\n if (firstCapital === true && offset === 0)\n return p1;\n if (p2)\n return p2.toUpperCase();\n return p1.toLowerCase();\n });\n}\n/**\n * Converts string into snake_case.\n *\n * @see https://regex101.com/r/QeSm2I/1\n */\nexport function snakeCase(str) {\n return str.replace(/(?:([a-z])([A-Z]))|(?:((?!^)[A-Z])([a-z]))/g, \"$1_$3$2$4\").toLowerCase();\n}\n/**\n * Converts string into Title Case.\n *\n * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript\n */\nexport function titleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });\n}\n/**\n * Builds abbreviated string from given string;\n */\nexport function abbreviate(str, abbrLettersCount) {\n if (abbrLettersCount === void 0) { abbrLettersCount = 1; }\n var words = str.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0\\xDF])/g, \"$1 $2\").split(\" \");\n return words.reduce(function (res, word) {\n res += word.substr(0, abbrLettersCount);\n return res;\n }, \"\");\n}\n/**\n * Shorten a given `input`. Useful for RDBMS imposing a limit on the\n * maximum length of aliases and column names in SQL queries.\n *\n * @param input String to be shortened.\n * @param options Default to `4` for segments length, `2` for terms length, `'__'` as a separator.\n *\n * @return Shortened `input`.\n *\n * @example\n * // returns: \"UsShCa__orde__mark__dire\"\n * shorten('UserShoppingCart__order__market__director')\n *\n * // returns: \"cat_wit_ver_lon_nam_pos_wit_ver_lon_nam_pos_wit_ver_lon_nam\"\n * shorten(\n * 'category_with_very_long_name_posts_with_very_long_name_post_with_very_long_name',\n * { separator: '_', segmentLength: 3 }\n * )\n *\n * // equals: UsShCa__orde__mark_market_id\n * `${shorten('UserShoppingCart__order__market')}_market_id`\n */\nexport function shorten(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.segmentLength, segmentLength = _a === void 0 ? 4 : _a, _b = options.separator, separator = _b === void 0 ? \"__\" : _b, _c = options.termLength, termLength = _c === void 0 ? 2 : _c;\n var segments = input.split(separator);\n var shortSegments = segments.reduce(function (acc, val) {\n // split the given segment into many terms based on an eventual camel cased name\n var segmentTerms = val.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0-\\xDF])/g, \"$1 $2\").split(\" \");\n // \"OrderItemList\" becomes \"OrItLi\", while \"company\" becomes \"comp\"\n var length = segmentTerms.length > 1 ? termLength : segmentLength;\n var shortSegment = segmentTerms.map(function (term) { return term.substr(0, length); }).join(\"\");\n acc.push(shortSegment);\n return acc;\n }, []);\n return shortSegments.join(separator);\n}\n/**\n * Returns a hashed input.\n *\n * @param input String to be hashed.\n * @param options.length Optionally, shorten the output to desired length.\n */\nexport function hash(input, options) {\n if (options === void 0) { options = {}; }\n var hashFunction = shajs(\"sha256\");\n hashFunction.update(input, \"utf8\");\n var hashedInput = hashFunction.digest(\"hex\");\n if (options.length) {\n return hashedInput.slice(0, options.length);\n }\n return hashedInput;\n}\n\n//# sourceMappingURL=StringUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Helper utility functions for QueryBuilder.\n */\nvar QueryBuilderUtils = /** @class */ (function () {\n function QueryBuilderUtils() {\n }\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n QueryBuilderUtils.isAliasProperty = function (str) {\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n // extra alias and its property relation\n var _a = __read(str.split(\".\"), 2), aliasName = _a[0], propertyName = _a[1]; // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n return true;\n };\n return QueryBuilderUtils;\n}());\nexport { QueryBuilderUtils };\n\n//# sourceMappingURL=QueryBuilderUtils.js.map\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nvar Broadcaster = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Broadcaster(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\n var executionResult = subscriber.beforeInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\n var executionResult = subscriber.beforeUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\n var executionResult = subscriber.beforeRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\n var executionResult = subscriber.afterInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionStart) {\n var executionResult = subscriber.beforeTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionStart) {\n var executionResult = subscriber.afterTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionCommit) {\n var executionResult = subscriber.beforeTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionCommit) {\n var executionResult = subscriber.afterTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionRollback) {\n var executionResult = subscriber.beforeTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionRollback) {\n var executionResult = subscriber.afterTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\n var executionResult = subscriber.afterUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\n var executionResult = subscriber.afterRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastLoadEventsForAll = function (result, metadata, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n if (entity instanceof Promise) // todo: check why need this?\n return;\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))\n return;\n var value = relation.getEntityValue(entity);\n if (value instanceof Object)\n _this.broadcastLoadEventsForAll(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\n });\n }\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (_this.queryRunner.connection.subscribers.length) {\n _this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {\n var executionResult = subscriber.afterLoad(entity, {\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n Broadcaster.prototype.isAllowedSubscriber = function (subscriber, target) {\n return !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target);\n };\n return Broadcaster;\n}());\nexport { Broadcaster };\n\n//# sourceMappingURL=Broadcaster.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matomo = void 0;\nconst js_helper_1 = require(\"js-helper\");\nconst NativeStoragePromise_1 = require(\"../NativeStoragePromise\");\nclass Matomo {\n static init() {\n Matomo.isTrackingPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let shouldTrack = yield NativeStoragePromise_1.NativeStoragePromise.getItem(Matomo.LOCAL_STORAGE_KEY, \"1\");\n if (js_helper_1.Helper.isNull(shouldTrack)) {\n shouldTrack = yield Matomo._askIsTracking();\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);\n }\n else {\n shouldTrack = (shouldTrack === \"1\");\n yield Matomo.setTrack(shouldTrack);\n }\n resolve(shouldTrack);\n }));\n Matomo.isTrackingPromise.then(() => {\n Matomo.push(['trackPageView'], true);\n Matomo.push(['enableLinkTracking'], true);\n Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php'], true);\n Matomo.push(['setSiteId', Matomo.SIDE_ID + \"\"], true);\n let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = Matomo.TRACK_SITE + '/piwik.js';\n s.appendChild(g);\n });\n }\n static update(title) {\n if (js_helper_1.Helper.nonNull(Matomo.currentUrl)) {\n Matomo.push(['setReferrerUrl', Matomo.currentUrl]);\n }\n Matomo.currentUrl = window.location.pathname + window.location.search;\n Matomo.push(['setCustomUrl', Matomo.currentUrl]);\n Matomo.push(['setDocumentTitle', title]);\n // remove all previously assigned custom variables, requires Matomo (formerly Piwik) 3.0.2\n Matomo.push(['deleteCustomVariables', 'page']);\n Matomo.push(['setGenerationTimeMs', 0]);\n Matomo.push(['trackPageView']);\n // make Matomo aware of newly added content\n var content = document.getElementById('site-content');\n Matomo.push(['MediaAnalytics::scanForMedia', content]);\n Matomo.push(['FormAnalytics::scanForForms', content]);\n Matomo.push(['trackContentImpressionsWithinNode', content]);\n Matomo.push(['enableLinkTracking']);\n }\n static _askIsTracking() {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = new Promise(resolve => {\n Matomo.push([function () {\n resolve(!this[\"isUserOptedOut\"]());\n }]);\n });\n return Matomo.isTrackingPromise;\n });\n }\n static query(method) {\n return __awaiter(this, void 0, void 0, function* () {\n return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {\n \"mode\": \"cors\",\n \"credentials\": \"include\",\n }).then(res => res.text()).then(text => (new window[\"DOMParser\"]()).parseFromString(text, \"text/xml\"));\n });\n }\n static getTrackingPromise() {\n return Matomo.isTrackingPromise;\n }\n static setTrack(shouldTrack) {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = Promise.resolve(shouldTrack);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? \"1\" : \"0\");\n if (shouldTrack) {\n yield Matomo.push([\"forgetUserOptOut\"], true);\n }\n else {\n yield Matomo.push([\"optUserOut\"], true);\n }\n });\n }\n static trackEvent(event, name, label, value) {\n return __awaiter(this, void 0, void 0, function* () {\n let ev = [\"trackEvent\", event, name];\n if (js_helper_1.Helper.isNotNull(label)) {\n ev.push(label);\n }\n if (js_helper_1.Helper.isNotNull(value) && !isNaN(parseFloat(value)) && isFinite(value)) {\n ev.push(value);\n }\n return this.push(ev);\n });\n }\n //TODO Matomo\n static push(arr, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // if (!Array.isArray(arr)) {\n // arr = [arr];\n // }\n // window[\"_paq\"].push(arr);\n });\n }\n}\nexports.Matomo = Matomo;\nMatomo.LOCAL_STORAGE_KEY = \"matomoShouldTrack\";\nMatomo.TRACK_SITE = \"\";\nMatomo.BASE_PATH = \"\";\nMatomo.SIDE_ID = \"1\";\nMatomo.currentUrl = null;\nMatomo.isTrackingPromise = null;\n//# sourceMappingURL=Matomo.js.map","/**\n * View in the database represented in this class.\n */\nvar View = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function View(options) {\n if (options) {\n this.name = options.name;\n this.expression = options.expression;\n this.materialized = !!options.materialized;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n View.prototype.clone = function () {\n return new View({\n name: this.name,\n expression: this.expression,\n materialized: this.materialized,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates view from a given entity metadata.\n */\n View.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n expression: entityMetadata.expression,\n materialized: entityMetadata.tableMetadataArgs.materialized\n };\n return new View(options);\n };\n return View;\n}());\nexport { View };\n\n//# sourceMappingURL=View.js.map\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewInflater = void 0;\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst DataManager_1 = require(\"./DataManager\");\n/**\n * Singleton-Klasse genutzt zum laden von Views\n */\nclass ViewInflater {\n constructor() {\n this.loadingPromises = {};\n }\n /**\n * Statische Funktion, um die Singleton-Instanz zu holen\n *\n * @returns {ViewInflater}\n */\n static getInstance() {\n if (shared_1.Helper.isNull(ViewInflater.instance)) {\n ViewInflater.instance = new ViewInflater();\n }\n return ViewInflater.instance;\n }\n /**\n * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views\n *\n * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann\n *\n * @param viewUrl\n * @param parentUrls\n * @returns {*}\n */\n load(viewUrl, parentUrls) {\n //Kopiere Elemente, damit originale parentURLS nicht verändert werden\n parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, []));\n //Detektiert eine Schleife in den Views\n if (parentUrls.indexOf(viewUrl) !== -1) {\n //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View\n return Promise.reject(\"views are in a circuit! cannot resolve view for url \" + parentUrls[0] + \"! url \" + viewUrl + \" is in stack before!\");\n }\n parentUrls.push(viewUrl);\n //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden\n if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) {\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n let t;\n let resultPromise = Promise.resolve(t);\n if (viewUrl instanceof Element) {\n resultPromise = Promise.resolve(viewUrl);\n }\n else {\n resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(htmlText => {\n let doc = (new DOMParser()).parseFromString(htmlText, \"text/html\");\n //Parsing hat nicht geklappt, also per innerHTML\n if (shared_1.Helper.isNull(doc)) {\n doc = document.implementation.createHTMLDocument('');\n doc.body.innerHTML = htmlText;\n }\n //Wrappe Elemente mit einem Span\n let spanElem = document.createElement(\"span\");\n spanElem.classList.add(\"injected-span\");\n return ViewInflater.moveChildren(doc.body, spanElem);\n });\n }\n this.loadingPromises[viewUrl] = resultPromise.then(parentElement => {\n let promises = [];\n let childViews = parentElement.querySelectorAll(\"[data-view]\");\n //lade Kinder-Views\n childViews.forEach(childView => {\n promises.push(ViewInflater.getInstance().load(childView.dataset[\"view\"], parentUrls).then(element => {\n childView.replaceWith(element);\n ViewInflater.replaceWithChildren(element);\n }));\n });\n return Promise.all(promises).then(function () {\n return parentElement;\n });\n }).catch(e => {\n console.error(e);\n this.loadingPromises[viewUrl] = null;\n throw e;\n });\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n /**\n * Statische Funktion, um Elemente aus einem String zu kreieren\n *\n * @param string\n * @returns {NodeListOf}\n */\n static inflateElementsFromString(string) {\n let template = document.createElement('template');\n template.innerHTML = string;\n return template.content.childNodes;\n }\n /**\n * Kreiert ein Ladesymbol. Evtl entfernen\n *\n * @returns {HTMLDivElement}\n */\n static createLoadingSymbol(loaderClass) {\n let svgNS = \"http://www.w3.org/2000/svg\";\n let loader = document.createElement(\"div\");\n loader.classList.add('loader');\n //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt\n if (loaderClass) {\n loader.classList.add(loaderClass);\n }\n let svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute('viewBox', \"0 0 32 32\");\n svg.setAttribute(\"width\", \"32\");\n svg.setAttribute(\"height\", \"32\");\n let circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"class\", \"spinner\");\n circle.setAttribute(\"cx\", \"16\");\n circle.setAttribute(\"cy\", \"16\");\n circle.setAttribute(\"r\", \"14\");\n circle.setAttribute(\"fill\", \"none\");\n svg.appendChild(circle);\n loader.appendChild(svg);\n // let loader = document.createElement(\"div\");\n // loader.appendChild(document.createTextNode(\"LOADING...\"));\n return loader;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n return client_1.ViewHelper.moveChildren(from, to);\n }\n /**\n * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen)\n * @param element\n */\n static replaceWithChildren(element) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n element.childNodes.forEach(child => {\n children.push(child);\n });\n let parent = element.parentElement;\n children.forEach(child => {\n element.removeChild(child);\n parent.insertBefore(child, element);\n });\n element.remove();\n }\n}\nexports.ViewInflater = ViewInflater;\nViewInflater.instance = null;\n//# sourceMappingURL=ViewInflater.js.map","/**\n * Database's table exclusion constraint stored in this class.\n */\nvar TableExclusion = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableExclusion(options) {\n this.name = options.name;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableExclusion.prototype.clone = function () {\n return new TableExclusion({\n name: this.name,\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates exclusions from the exclusion metadata object.\n */\n TableExclusion.create = function (exclusionMetadata) {\n return new TableExclusion({\n name: exclusionMetadata.name,\n expression: exclusionMetadata.expression\n });\n };\n return TableExclusion;\n}());\nexport { TableExclusion };\n\n//# sourceMappingURL=TableExclusion.js.map\n","var ApplyValueTransformers = /** @class */ (function () {\n function ApplyValueTransformers() {\n }\n ApplyValueTransformers.transformFrom = function (transformer, databaseValue) {\n if (Array.isArray(transformer)) {\n var reverseTransformers = transformer.slice().reverse();\n return reverseTransformers.reduce(function (transformedValue, _transformer) {\n return _transformer.from(transformedValue);\n }, databaseValue);\n }\n return transformer.from(databaseValue);\n };\n ApplyValueTransformers.transformTo = function (transformer, entityValue) {\n if (Array.isArray(transformer)) {\n return transformer.reduce(function (transformedValue, _transformer) {\n return _transformer.to(transformedValue);\n }, entityValue);\n }\n return transformer.to(entityValue);\n };\n return ApplyValueTransformers;\n}());\nexport { ApplyValueTransformers };\n\n//# sourceMappingURL=ApplyValueTransformers.js.map\n","var RandomGenerator = /** @class */ (function () {\n function RandomGenerator() {\n }\n /**\n * discuss at: http://locutus.io/php/sha1/\n * original by: Webtoolkit.info (http://www.webtoolkit.info/)\n * improved by: Michael White (http://getsprink.com)\n * improved by: Kevin van Zonneveld (http://kvz.io)\n * input by: Brett Zamir (http://brett-zamir.me)\n * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then\n * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly\n * note 1: in a steaming fashion for faster and more efficient hashing\n * example 1: sha1('Kevin van Zonneveld')\n * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'\n */\n RandomGenerator.sha1 = function (str) {\n var _rotLeft = function (n, s) {\n var t4 = (n << s) | (n >>> (32 - s));\n return t4;\n };\n var _cvtHex = function (val) {\n var str = \"\";\n var i;\n var v;\n for (i = 7; i >= 0; i--) {\n v = (val >>> (i * 4)) & 0x0f;\n str += v.toString(16);\n }\n return str;\n };\n var blockstart;\n var i, j;\n var W = new Array(80);\n var H0 = 0x67452301;\n var H1 = 0xEFCDAB89;\n var H2 = 0x98BADCFE;\n var H3 = 0x10325476;\n var H4 = 0xC3D2E1F0;\n var A, B, C, D, E;\n var temp;\n // utf8_encode\n str = /*unescape*/ (encodeURIComponent(str));\n var strLen = str.length;\n var wordArray = [];\n for (i = 0; i < strLen - 3; i += 4) {\n j = str.charCodeAt(i) << 24 |\n str.charCodeAt(i + 1) << 16 |\n str.charCodeAt(i + 2) << 8 |\n str.charCodeAt(i + 3);\n wordArray.push(j);\n }\n switch (strLen % 4) {\n case 0:\n i = 0x080000000;\n break;\n case 1:\n i = str.charCodeAt(strLen - 1) << 24 | 0x0800000;\n break;\n case 2:\n i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000;\n break;\n case 3:\n i = str.charCodeAt(strLen - 3) << 24 |\n str.charCodeAt(strLen - 2) << 16 |\n str.charCodeAt(strLen - 1) <<\n 8 | 0x80;\n break;\n }\n wordArray.push(i);\n while ((wordArray.length % 16) !== 14) {\n wordArray.push(0);\n }\n wordArray.push(strLen >>> 29);\n wordArray.push((strLen << 3) & 0x0ffffffff);\n for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {\n for (i = 0; i < 16; i++) {\n W[i] = wordArray[blockstart + i];\n }\n for (i = 16; i <= 79; i++) {\n W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n }\n A = H0;\n B = H1;\n C = H2;\n D = H3;\n E = H4;\n for (i = 0; i <= 19; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 20; i <= 39; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 40; i <= 59; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 60; i <= 79; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n H0 = (H0 + A) & 0x0ffffffff;\n H1 = (H1 + B) & 0x0ffffffff;\n H2 = (H2 + C) & 0x0ffffffff;\n H3 = (H3 + D) & 0x0ffffffff;\n H4 = (H4 + E) & 0x0ffffffff;\n }\n temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4);\n return temp.toLowerCase();\n };\n /**\n * RFC4122 compliant UUID v4 generator.\n */\n RandomGenerator.uuid4 = function () {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c === \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return RandomGenerator;\n}());\nexport { RandomGenerator };\n\n//# sourceMappingURL=RandomGenerator.js.map\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst NotOnlineError_1 = require(\"./DataManager/NotOnlineError\");\n/**\n * Ein Manager, welches das Laden von Resourcen übernimmt.\n */\nclass DataManager {\n /**\n * Diese Funktion sollte anstelle von dem nativen \"fetch\" verwendet werden!\n * Das native Fetch kann keine file://, welches von Cordova unter Android (und whs iOS) verwendet wird\n * Daher wird heir auf XMLHttpRequest zurückgegriffen\n *\n * @param url\n * @param useArrayBuffer\n * @returns {Promise<*>}\n */\n static fetch(url, useArrayBuffer) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n useArrayBuffer = Helper_1.Helper.nonNull(useArrayBuffer, false);\n if (useArrayBuffer) {\n xhr.responseType = \"arraybuffer\";\n }\n xhr.onload = function () {\n resolve(new Response(useArrayBuffer ? xhr.response : xhr.responseText, { status: (xhr.status === 0) ? 200 : xhr.status }));\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n static fetchBlob(url) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n xhr.onload = function (e) {\n resolve(xhr.response);\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n xhr.responseType = \"blob\";\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET die angegebene URL und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @param useBasePath\n * @returns {Promise<* | void>}\n */\n static load(url, format, useBasePath) {\n return __awaiter(this, void 0, void 0, function* () {\n format = Helper_1.Helper.nonNull(format, true);\n if (format === true) {\n format = \"json\";\n }\n else if (format === false) {\n format = \"text\";\n }\n else if (format !== \"json\" && format !== \"text\") {\n format = \"raw\";\n }\n useBasePath = Helper_1.Helper.nonNull(useBasePath, true);\n if (useBasePath === true) {\n useBasePath = DataManager._basePath;\n }\n else if (typeof useBasePath !== \"string\") {\n useBasePath = \"\";\n }\n url = DataManager.basePath(url, useBasePath);\n return DataManager.fetch(url, format === \"raw\").catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw new NotOnlineError_1.NotOnlineError(e, url);\n }).then(function (res) {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n if (format === \"json\") {\n return res.json();\n }\n else if (format === \"text\") {\n return res.text();\n }\n else {\n return res;\n }\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET das angegebene Asset und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @returns {Promise<* | void>}\n */\n static loadAsset(url, format) {\n return __awaiter(this, void 0, void 0, function* () {\n let assetPath = DataManager._assetBasePath;\n if (!url.startsWith(\"/\") && assetPath.length > 0 && !assetPath.endsWith(\"/\")) {\n assetPath += \"/\";\n }\n return this.load(url, Helper_1.Helper.nonNull(format, \"text\"), assetPath);\n });\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQuery(values) {\n let queryStrings = [];\n for (let k in values) {\n queryStrings.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(values[k]));\n }\n return \"?\" + queryStrings.join(\"&\");\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQueryWithoutNullValues(values) {\n let queryValues = {};\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(values[k])) {\n queryValues[k] = values[k];\n }\n }\n return this.buildQuery(queryValues);\n }\n static send(url, params) {\n return __awaiter(this, void 0, void 0, function* () {\n url = DataManager.basePath(url);\n let headers = {};\n if (!(params instanceof FormData) && typeof params === \"object\") {\n params = JSON.stringify(params);\n headers = {\n \"Content-Type\": \"application/json\"\n };\n }\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n headers[header] = DataManager._additionalHeaders[header];\n });\n return fetch(url, {\n \"credentials\": \"same-origin\",\n \"method\": \"POST\",\n \"headers\": headers,\n \"body\": params,\n }).then(function (res) {\n return res.json();\n }).catch(function (e) {\n debugger;\n console.error(\"error\", e);\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n return {\n \"success\": false,\n \"errors\": [\n \"not-online\"\n ]\n };\n });\n });\n }\n static basePath(url, basePath) {\n basePath = Helper_1.Helper.nonNull(basePath, DataManager._basePath);\n return basePath + ((url) ? url : \"\");\n }\n static setHeader(header, value) {\n DataManager._additionalHeaders[header] = value;\n }\n}\nexports.DataManager = DataManager;\nDataManager.onlineCallback = null;\nDataManager._additionalHeaders = {};\nDataManager._basePath = \"\";\nDataManager._assetBasePath = \"\";\n//# sourceMappingURL=DataManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst defaultMenuTemplate = require(\"../../html/siteTemplates/menuSite.html\");\nconst NavbarFragment_1 = require(\"./Menu/NavbarFragment\");\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Seite benutzt das menuTemplate, welches das ContainerTemplate includiert.\n *\n * Außerdem beinhaltet die MenuSite ein NavbarFragment, wo Menüelemente hinzugefügt werden können\n */\nclass MenuSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für eine MenuSite\n *\n * @param siteManager\n * @param view\n * @param menuTemplate\n */\n constructor(siteManager, view, menuTemplate) {\n super(siteManager, view, Helper_1.Helper.nonNull(menuTemplate, defaultMenuTemplate), \"#site-content\");\n this._navbarFragment = new NavbarFragment_1.NavbarFragment(this);\n this.addFragment(\"#navbar-fragment\", this._navbarFragment);\n }\n getNavbarFragment() {\n return this._navbarFragment;\n }\n /**\n * Während des onConstructs werden die Menüelemente hinzugefügt => aufrufen des onCreateMenu\n *\n * @param constructParameters\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = yield _super.onConstruct.call(this, constructParameters);\n this.onCreateMenu(this._navbarFragment);\n return res;\n });\n }\n onMenuPressed() {\n this._navbarFragment.openMenu();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._navbarFragment.setScrollWidget(this.findBy(\"#main-content-container\"));\n return res;\n });\n }\n /**\n * Überschreibt updateTtle, um Element in der Statusbar zu setzen\n *\n * @protected\n */\n _updateTitle() {\n super._updateTitle();\n if (this._title.element && this._state === Context_1.Context.STATE_RUNNING) {\n this._navbarFragment.setTitleElement(this._title.element);\n }\n }\n /**\n * Überschreiben durch Kinder-Klassen, um ein Menü zu erstellen\n *\n * @param {NavbarFragment} navbar\n */\n onCreateMenu(navbar) { }\n}\nexports.MenuSite = MenuSite;\n//# sourceMappingURL=MenuSite.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is already started and user tries to run it again.\n */\nvar TransactionAlreadyStartedError = /** @class */ (function (_super) {\n __extends(TransactionAlreadyStartedError, _super);\n function TransactionAlreadyStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionAlreadyStartedError\";\n Object.setPrototypeOf(_this, TransactionAlreadyStartedError.prototype);\n _this.message = \"Transaction already started for the given connection, commit current transaction before starting a new one.\";\n return _this;\n }\n return TransactionAlreadyStartedError;\n}(Error));\nexport { TransactionAlreadyStartedError };\n\n//# sourceMappingURL=TransactionAlreadyStartedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when required driver's package is not installed.\n */\nvar DriverPackageNotInstalledError = /** @class */ (function (_super) {\n __extends(DriverPackageNotInstalledError, _super);\n function DriverPackageNotInstalledError(driverName, packageName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverPackageNotInstalledError\";\n Object.setPrototypeOf(_this, DriverPackageNotInstalledError.prototype);\n _this.message = driverName + \" package has not been found installed. Try to install it: npm install \" + packageName + \" --save\";\n return _this;\n }\n return DriverPackageNotInstalledError;\n}(Error));\nexport { DriverPackageNotInstalledError };\n\n//# sourceMappingURL=DriverPackageNotInstalledError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build a query with RETURNING / OUTPUT statement,\n * but used database does not support it.\n */\nvar ReturningStatementNotSupportedError = /** @class */ (function (_super) {\n __extends(ReturningStatementNotSupportedError, _super);\n function ReturningStatementNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"ReturningStatementNotSupportedError\";\n Object.setPrototypeOf(_this, ReturningStatementNotSupportedError.prototype);\n _this.message = \"OUTPUT or RETURNING clause only supported by Microsoft SQL Server or PostgreSQL databases.\";\n return _this;\n }\n return ReturningStatementNotSupportedError;\n}(Error));\nexport { ReturningStatementNotSupportedError };\n\n//# sourceMappingURL=ReturningStatementNotSupportedError.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nimport { Query } from \"../Query\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar AbstractSqliteQueryRunner = /** @class */ (function (_super) {\n __extends(AbstractSqliteQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteQueryRunner() {\n return _super.call(this) || this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AbstractSqliteQueryRunner.prototype.connect = function () {\n return Promise.resolve(this.driver.databaseConnection);\n };\n /**\n * Releases used database connection.\n * We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.\n */\n AbstractSqliteQueryRunner.prototype.release = function () {\n this.loadedTables = [];\n this.clearSqlMemory();\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n AbstractSqliteQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n if (!isolationLevel) return [3 /*break*/, 4];\n if (isolationLevel !== \"READ UNCOMMITTED\" && isolationLevel !== \"SERIALIZABLE\") {\n throw new Error(\"SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation\");\n }\n if (!(isolationLevel === \"READ UNCOMMITTED\")) return [3 /*break*/, 2];\n return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = true\")];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = false\")];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"BEGIN TRANSACTION\")];\n case 7:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 9];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n AbstractSqliteQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n throw new Error(\"Stream is not supported by sqlite driver.\");\n };\n /**\n * Returns all available database names including system databases.\n */\n AbstractSqliteQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n AbstractSqliteQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"This driver does not support table schemas\");\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n AbstractSqliteQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" = '\" + tableName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n AbstractSqliteQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, columns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"PRAGMA table_info(\\\"\" + tableName + \"\\\")\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n columns = _a.sent();\n return [2 /*return*/, !!columns.find(function (column) { return column[\"name\"] === columnName; })];\n }\n });\n });\n };\n /**\n * Creates a new database.\n */\n AbstractSqliteQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops database.\n */\n AbstractSqliteQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n AbstractSqliteQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops table schema.\n */\n AbstractSqliteQueryRunner.prototype.dropSchema = function (schemaPath, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table.\n */\n AbstractSqliteQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, isTableExist;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _a.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n AbstractSqliteQueryRunner.prototype.dropTable = function (tableOrName, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, table, _a, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(tableOrName)];\n case 1:\n isTableExist = _b.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 3];\n _a = tableOrName;\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 4:\n _a = _b.sent();\n _b.label = 5;\n case 5:\n table = _a;\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n upQueries.push(this.dropTableSql(table, ifExist));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n AbstractSqliteQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n upQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.dropViewSql(view));\n downQueries.push(this.deleteViewDefinitionSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n AbstractSqliteQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _a.sent();\n upQueries = [];\n downQueries = [];\n upQueries.push(this.deleteViewDefinitionSql(view));\n upQueries.push(this.dropViewSql(view));\n downQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var oldTable, _a, newTable, up, down;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n newTable.name = newTableName;\n up = new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTableName + \"\\\"\");\n down = new Query(\"ALTER TABLE \\\"\" + newTableName + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\");\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n // rename old table;\n oldTable.name = newTable.name;\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n foreignKey.name = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n });\n // rename indices\n newTable.indices.forEach(function (index) {\n index.name = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n });\n // recreate table with new constraint names\n return [4 /*yield*/, this.recreateTable(newTable, oldTable)];\n case 5:\n // recreate table with new constraint names\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n return [2 /*return*/, this.addColumns(table, [column])];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) { return changedTable.addColumn(column); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n newColumn = undefined;\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n AbstractSqliteQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n return [4 /*yield*/, this.changeColumns(table, [{ oldColumn: oldColumn, newColumn: newColumn }])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n * Changed column looses all its keys in the db.\n */\n AbstractSqliteQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedColumns.forEach(function (changedColumnSet) {\n if (changedColumnSet.newColumn.name !== changedColumnSet.oldColumn.name) {\n changedTable.findColumnUniques(changedColumnSet.oldColumn).forEach(function (unique) {\n unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n unique.columnNames.push(changedColumnSet.newColumn.name);\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);\n });\n changedTable.findColumnForeignKeys(changedColumnSet.oldColumn).forEach(function (fk) {\n fk.columnNames.splice(fk.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n fk.columnNames.push(changedColumnSet.newColumn.name);\n fk.name = _this.connection.namingStrategy.foreignKeyName(changedTable, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n });\n changedTable.findColumnIndices(changedColumnSet.oldColumn).forEach(function (index) {\n index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n index.columnNames.push(changedColumnSet.newColumn.name);\n index.name = _this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);\n });\n }\n var originalColumn = changedTable.columns.find(function (column) { return column.name === changedColumnSet.oldColumn.name; });\n if (originalColumn)\n changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this.dropColumns(table, [column])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) {\n changedTable.removeColumn(column);\n changedTable.findColumnUniques(column).forEach(function (unique) { return changedTable.removeUniqueConstraint(unique); });\n changedTable.findColumnIndices(column).forEach(function (index) { return changedTable.removeIndex(index); });\n changedTable.findColumnForeignKeys(column).forEach(function (fk) { return changedTable.removeForeignKey(fk); });\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // remove column and its constraints from original table.\n columns.forEach(function (column) {\n table.removeColumn(column);\n table.findColumnUniques(column).forEach(function (unique) { return table.removeUniqueConstraint(unique); });\n table.findColumnIndices(column).forEach(function (index) { return table.removeIndex(index); });\n table.findColumnForeignKeys(column).forEach(function (fk) { return table.removeForeignKey(fk); });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n AbstractSqliteQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark columns as primary in original table\n table.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n AbstractSqliteQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n AbstractSqliteQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark primary columns as non-primary in original table\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createUniqueConstraints(tableOrName, [uniqueConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.addUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropUniqueConstraints(table, [uniqueConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates an unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.removeUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createCheckConstraints(tableOrName, [checkConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.addCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropCheckConstraints(table, [checkConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.removeCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createForeignKeys(tableOrName, [foreignKey])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.addForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n return [4 /*yield*/, this.dropForeignKeys(tableOrName, [foreignKey])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.removeForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n AbstractSqliteQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n AbstractSqliteQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.createIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.dropIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n AbstractSqliteQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"DELETE FROM \\\"\" + tableName + \"\\\"\")];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n AbstractSqliteQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = OFF;\")];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.startTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n _a.trys.push([3, 9, 14, 16]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'view'\";\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 4:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 5:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" != 'sqlite_sequence'\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 6:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 16];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = ON;\")];\n case 15:\n _a.sent();\n return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n AbstractSqliteQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, viewNamesString, query, dbViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n viewNamesString = viewNames.map(function (name) { return \"'\" + name + \"'\"; }).join(\", \");\n query = \"SELECT \\\"t\\\".* FROM \\\"\" + this.getTypeormMetadataTableName() + \"\\\" \\\"t\\\" INNER JOIN \\\"sqlite_master\\\" s ON \\\"s\\\".\\\"name\\\" = \\\"t\\\".\\\"name\\\" AND \\\"s\\\".\\\"type\\\" = 'view' WHERE \\\"t\\\".\\\"type\\\" = 'VIEW'\";\n if (viewNamesString.length > 0)\n query += \" AND \\\"t\\\".\\\"name\\\" IN (\" + viewNamesString + \")\";\n return [4 /*yield*/, this.query(query)];\n case 2:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n view.name = dbView[\"name\"];\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n AbstractSqliteQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var tableNamesString, dbTables, dbIndicesDef;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n tableNamesString = tableNames.map(function (tableName) { return \"'\" + tableName + \"'\"; }).join(\", \");\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" IN (\" + tableNamesString + \")\")];\n case 1:\n dbTables = _a.sent();\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'index' AND \\\"tbl_name\\\" IN (\" + tableNamesString + \")\")];\n case 2:\n dbIndicesDef = _a.sent();\n // if tables were not found in the db, no need to proceed\n if (!dbTables || !dbTables.length)\n return [2 /*return*/, []];\n // create table schemas for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, tableUniquePromises, _b, result, regexp, indicesPromises, indices;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n table = new Table({ name: dbTable[\"name\"] });\n sql = dbTable[\"sql\"];\n return [4 /*yield*/, Promise.all([\n this.query(\"PRAGMA table_info(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA index_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA foreign_key_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n ])];\n case 1:\n _a = __read.apply(void 0, [_c.sent(), 3]), dbColumns = _a[0], dbIndices = _a[1], dbForeignKeys = _a[2];\n autoIncrementColumnName = undefined;\n tableSql = dbTable[\"sql\"];\n autoIncrementIndex = tableSql.toUpperCase().indexOf(\"AUTOINCREMENT\");\n if (autoIncrementIndex !== -1) {\n autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);\n comma = autoIncrementColumnName.lastIndexOf(\",\");\n bracket = autoIncrementColumnName.lastIndexOf(\"(\");\n if (comma !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(comma);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n else if (bracket !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(bracket);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n }\n // create columns from the loaded columns\n table.columns = dbColumns.map(function (dbColumn) {\n var tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"name\"];\n tableColumn.type = dbColumn[\"type\"].toLowerCase();\n tableColumn.default = dbColumn[\"dflt_value\"] !== null && dbColumn[\"dflt_value\"] !== undefined ? dbColumn[\"dflt_value\"] : undefined;\n tableColumn.isNullable = dbColumn[\"notnull\"] === 0;\n // primary keys are numbered starting with 1, columns that aren't primary keys are marked with 0\n tableColumn.isPrimary = dbColumn[\"pk\"] > 0;\n tableColumn.comment = \"\"; // SQLite does not support column comments\n tableColumn.isGenerated = autoIncrementColumnName === dbColumn[\"name\"];\n if (tableColumn.isGenerated) {\n tableColumn.generationStrategy = \"increment\";\n }\n if (tableColumn.type === \"varchar\") {\n // Check if this is an enum\n var enumMatch = sql.match(new RegExp(\"\\\"(\" + tableColumn.name + \")\\\" varchar CHECK\\\\s*\\\\(\\\\s*\\\\1\\\\s+IN\\\\s*\\\\(('[^']+'(?:\\\\s*,\\\\s*'[^']+')+)\\\\s*\\\\)\\\\s*\\\\)\"));\n if (enumMatch) {\n // This is an enum\n tableColumn.enum = enumMatch[2].substr(1, enumMatch[2].length - 2).split(\"','\");\n }\n }\n // parse datatype and attempt to retrieve length, precision and scale\n var pos = tableColumn.type.indexOf(\"(\");\n if (pos !== -1) {\n var fullType = tableColumn.type;\n var dataType_1 = fullType.substr(0, pos);\n if (!!_this.driver.withLengthColumnTypes.find(function (col) { return col === dataType_1; })) {\n var len = parseInt(fullType.substring(pos + 1, fullType.length - 1));\n if (len) {\n tableColumn.length = len.toString();\n tableColumn.type = dataType_1; // remove the length part from the datatype\n }\n }\n if (!!_this.driver.withPrecisionColumnTypes.find(function (col) { return col === dataType_1; })) {\n var re = new RegExp(\"^\" + dataType_1 + \"\\\\((\\\\d+),?\\\\s?(\\\\d+)?\\\\)\");\n var matches = fullType.match(re);\n if (matches && matches[1]) {\n tableColumn.precision = +matches[1];\n }\n if (!!_this.driver.withScaleColumnTypes.find(function (col) { return col === dataType_1; })) {\n if (matches && matches[2]) {\n tableColumn.scale = +matches[2];\n }\n }\n tableColumn.type = dataType_1; // remove the precision/scale part from the datatype\n }\n }\n return tableColumn;\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, function (dbForeignKey) { return dbForeignKey[\"id\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (foreignKey) {\n var ownForeignKeys = dbForeignKeys.filter(function (dbForeignKey) { return dbForeignKey[\"id\"] === foreignKey[\"id\"] && dbForeignKey[\"table\"] === foreignKey[\"table\"]; });\n var columnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"from\"]; });\n var referencedColumnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"to\"]; });\n // build foreign key name, because we can not get it directly.\n var fkName = _this.connection.namingStrategy.foreignKeyName(table, columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n return new TableForeignKey({\n name: fkName,\n columnNames: columnNames,\n referencedTableName: foreignKey[\"table\"],\n referencedColumnNames: referencedColumnNames,\n onDelete: foreignKey[\"on_delete\"],\n onUpdate: foreignKey[\"on_update\"]\n });\n });\n tableUniquePromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"u\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var dbIndex, indexInfos, indexColumns, column;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n if (indexColumns.length === 1) {\n column = table.columns.find(function (column) {\n return !!indexColumns.find(function (indexColumn) { return indexColumn === column.name; });\n });\n if (column)\n column.isUnique = true;\n }\n // Sqlite does not store unique constraint name, so we generate its name manually.\n return [2 /*return*/, new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),\n columnNames: indexColumns\n })];\n }\n });\n }); });\n _b = table;\n return [4 /*yield*/, Promise.all(tableUniquePromises)];\n case 2:\n _b.uniques = (_c.sent());\n regexp = /CONSTRAINT \"([^\"]*)\" CHECK (\\(.*?\\))([,]|[)]$)/g;\n while (((result = regexp.exec(sql)) !== null)) {\n table.checks.push(new TableCheck({ name: result[1], expression: result[2] }));\n }\n indicesPromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"c\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; }) // unqiue\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var indexDef, condition, dbIndex, indexInfos, indexColumns, isUnique;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n indexDef = dbIndicesDef.find(function (dbIndexDef) { return dbIndexDef[\"name\"] === dbIndexName; });\n condition = /WHERE (.*)/.exec(indexDef[\"sql\"]);\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n isUnique = dbIndex[\"unique\"] === \"1\" || dbIndex[\"unique\"] === 1;\n return [2 /*return*/, new TableIndex({\n table: table,\n name: dbIndex[\"name\"],\n columnNames: indexColumns,\n isUnique: isUnique,\n where: condition ? condition[1] : undefined\n })];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(indicesPromises)];\n case 3:\n indices = _c.sent();\n table.indices = indices.filter(function (index) { return !!index; });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n AbstractSqliteQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n var hasAutoIncrement = primaryColumns.find(function (column) { return column.isGenerated && column.generationStrategy === \"increment\"; });\n var skipPrimary = primaryColumns.length > 1;\n if (skipPrimary && hasAutoIncrement)\n throw new Error(\"Sqlite does not support AUTOINCREMENT on composite primary key\");\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(column, skipPrimary); }).join(\", \");\n var sql = \"CREATE TABLE \\\"\" + table.name + \"\\\" (\" + columnDefinitions;\n // need for `addColumn()` method, because it recreates table.\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \\\"\" + fk.referencedTableName + \"\\\" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n if (primaryColumns.length > 1) {\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n var tableMetadata = this.connection.entityMetadatas.find(function (metadata) { return metadata.tableName === table.name; });\n if (tableMetadata && tableMetadata.withoutRowid) {\n sql += \" WITHOUT ROWID\";\n }\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n AbstractSqliteQueryRunner.prototype.dropTableSql = function (tableOrName, ifExist) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var query = ifExist ? \"DROP TABLE IF EXISTS \\\"\" + tableName + \"\\\"\" : \"DROP TABLE \\\"\" + tableName + \"\\\"\";\n return new Query(query);\n };\n AbstractSqliteQueryRunner.prototype.createViewSql = function (view) {\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression(this.connection).getQuery());\n }\n };\n AbstractSqliteQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n var expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n var _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", name: view.name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds drop view sql.\n */\n AbstractSqliteQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n return new Query(\"DROP VIEW \\\"\" + viewName + \"\\\"\");\n };\n /**\n * Builds remove view sql.\n */\n AbstractSqliteQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n var qb = this.connection.createQueryBuilder();\n var _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: viewName })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds create index sql.\n */\n AbstractSqliteQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \\\"\" + table.name + \"\\\" (\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n AbstractSqliteQueryRunner.prototype.dropIndexSql = function (indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n return new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds a query for create column.\n */\n AbstractSqliteQueryRunner.prototype.buildCreateColumnSql = function (column, skipPrimary) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column instanceof ColumnMetadata) {\n c += \" \" + this.driver.normalizeType(column);\n }\n else {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.enum)\n c += \" CHECK( \" + column.name + \" IN (\" + column.enum.map(function (val) { return \"'\" + val + \"'\"; }).join(\",\") + \") )\";\n if (column.isPrimary && !skipPrimary)\n c += \" PRIMARY KEY\";\n if (column.isGenerated === true && column.generationStrategy === \"increment\") // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTOINCREMENT\";\n if (column.collation)\n c += \" COLLATE \" + column.collation;\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT (\" + column.default + \")\";\n return c;\n };\n AbstractSqliteQueryRunner.prototype.recreateTable = function (newTable, oldTable, migrateData) {\n if (migrateData === void 0) { migrateData = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, newColumnNames, oldColumnNames;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n // drop old table indices\n oldTable.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(oldTable, index));\n });\n // change table name into 'temporary_table'\n newTable.name = \"temporary_\" + newTable.name;\n // create new table\n upQueries.push(this.createTableSql(newTable, true));\n downQueries.push(this.dropTableSql(newTable));\n // migrate all data from the old table into new table\n if (migrateData) {\n newColumnNames = newTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n oldColumnNames = oldTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n if (oldTable.columns.length < newTable.columns.length) {\n newColumnNames = newTable.columns.filter(function (column) {\n return oldTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n else if (oldTable.columns.length > newTable.columns.length) {\n oldColumnNames = oldTable.columns.filter(function (column) {\n return newTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n upQueries.push(new Query(\"INSERT INTO \\\"\" + newTable.name + \"\\\"(\" + newColumnNames + \") SELECT \" + oldColumnNames + \" FROM \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"INSERT INTO \\\"\" + oldTable.name + \"\\\"(\" + oldColumnNames + \") SELECT \" + newColumnNames + \" FROM \\\"\" + newTable.name + \"\\\"\"));\n }\n // drop old table\n upQueries.push(this.dropTableSql(oldTable));\n downQueries.push(this.createTableSql(oldTable, true));\n // rename old table\n upQueries.push(new Query(\"ALTER TABLE \\\"\" + newTable.name + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTable.name + \"\\\"\"));\n newTable.name = oldTable.name;\n // recreate table indices\n newTable.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(newTable.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(newTable, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n this.replaceCachedTable(oldTable, newTable);\n return [2 /*return*/];\n }\n });\n });\n };\n return AbstractSqliteQueryRunner;\n}(BaseQueryRunner));\nexport { AbstractSqliteQueryRunner };\n\n//# sourceMappingURL=AbstractSqliteQueryRunner.js.map\n","/**\n * Interface for entity metadata mappings stored inside \"schemas\" instead of models decorated by decorators.\n */\nvar EntitySchema = /** @class */ (function () {\n function EntitySchema(options) {\n this.options = options;\n }\n return EntitySchema;\n}());\nexport { EntitySchema };\n\n//# sourceMappingURL=EntitySchema.js.map\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncBaseModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass EasySyncBaseModel extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this._delegate = null;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.version = 1;\n this.deleted = false;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n obj[attribute] = this[attribute];\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"createdAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"updatedAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"version\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n };\n columns[\"deleted\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN\n };\n return columns;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (shared_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version && jsonObject.version !== 0) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns(entities[index]);\n this._handleRelations(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n static prepareSync(entities) {\n return entities;\n }\n}\nexports.EasySyncBaseModel = EasySyncBaseModel;\nEasySyncBaseModel.delegateClass = null;\nEasySyncBaseModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncBaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractFragment = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Ein Fragment ist ein TeilView einer Ansicht.\n */\nclass AbstractFragment extends Context_1.Context {\n /**\n * Erstellt ein neues Fragment\n *\n * @param site\n * @param view\n */\n constructor(site, view) {\n super(view);\n this._site = site;\n this._viewQuery = null;\n this._active = true;\n }\n /**\n * Gibt die zugehörige Seite zurück\n *\n * @returns\n */\n getSite() {\n if (this._site instanceof AbstractFragment) {\n return this._site.getSite();\n }\n return this._site;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.startSite(site, args);\n });\n }\n /**\n * Gibt zurück, ob das Fragment aktiv ist. Wenn nicht, wird es in der Seite nicht angezeigt\n *\n * @returns {boolean}\n */\n isActive() {\n return this._active;\n }\n setViewQuery(query) {\n this._viewQuery = query;\n }\n getViewQuery() {\n return this._viewQuery;\n }\n setActive(active) {\n this._active = active;\n if (Helper_1.Helper.isNotNull(this._view)) {\n if (active) {\n this._view.classList.remove(\"hidden\");\n }\n else {\n this._view.classList.add(\"hidden\");\n }\n }\n }\n}\nexports.AbstractFragment = AbstractFragment;\n//# sourceMappingURL=AbstractFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuAction = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Container für verschiedene Eigenschaften\n */\nclass MenuAction {\n /**\n * Erstellt eine MenuAction.\n * Außer name und action ist alles mit Default-werten vorbelegt\n *\n * @param name\n * @param action\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(name, action, showFor, order, icon) {\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._copies = [];\n this._menu = null;\n this._name = name;\n this._action = action;\n this._showFor = Helper_1.Helper.nonNull(showFor, MenuAction.SHOW_FOR_MEDIUM);\n this._order = Helper_1.Helper.nonNull(order, 1000);\n this._icon = icon;\n this._id = MenuAction.lastId++;\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._menu = null;\n this._copies = [];\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new MenuAction());\n copiedAction._name = this._name;\n copiedAction._action = this._action;\n copiedAction._showFor = this._showFor;\n copiedAction._order = this._order;\n copiedAction._liClass = this._liClass;\n copiedAction._shouldTranslate = this._shouldTranslate;\n copiedAction._visible = this._visible;\n copiedAction._activated = this._activated;\n copiedAction._icon = this._icon;\n copiedAction._id = MenuAction.lastId++;\n this._copies.push(copiedAction);\n return copiedAction;\n // return new MenuActionSlave(this);\n }\n // _triggerCopies(fn, args){\n // this._copies.forEach(copy => {\n // copy[fn].apply(copy, args);\n // })\n // }\n /**\n * Sorgt dafür, dass die Action neu gezeichnet wird\n */\n redraw() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.redrawAction(this);\n }\n this._copies.forEach(copy => copy.redraw());\n }\n /**\n * Sorgt dafür, dass die ActionElemente geupdatet wird\n */\n update() {\n this._menu.updateAction(this);\n this._copies.forEach(copy => copy.update());\n }\n /**\n * Gibt die Order der MenuAction zurück. Die Order bestimmt die Reihenfolge in der die Elemente angezeigt werden.\n * Je kleiner die Order, desto weiter rechts/oben werden diese angezeigt\n *\n * @returns {*}\n */\n getOrder() {\n return this._order;\n }\n /**\n * Gibt zurück, ob die MenuAction aktiv ist\n *\n * @returns {boolean}\n */\n isActivated() {\n return this._activated;\n }\n /**\n * Gibt an, ob der Name übersetzt werden soll\n *\n * @returns {boolean}\n */\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n setShouldTranslate(shouldTranslate) {\n this._shouldTranslate = (shouldTranslate === true);\n this.redraw();\n }\n setVisibility(visibility) {\n this._visible = visibility;\n this.redraw();\n this._copies.forEach(copy => copy.setVisibility(visibility));\n }\n /**\n * Gibt an, ob die MenuAction sichtbar ist\n *\n * @returns {boolean}\n */\n isVisible() {\n return this._visible;\n }\n /**\n * Gibt den Namen zurück\n *\n * @returns {*}\n */\n getName() {\n return this._name;\n }\n setName(name) {\n this._name = name;\n this.redraw();\n }\n /**\n * Gibt die Action, welche beim Click ausgeführt werden soll zurück\n * @returns {string|function}\n */\n getAction() {\n return this._action;\n }\n /**\n * Gibt die ID der MenuAction zurück\n * @returns {number}\n */\n getId() {\n return this._id;\n }\n /**\n * Gibt das Icon der MenuAction zurück\n * @returns {string|null}\n */\n getIcon() {\n return this._icon;\n }\n setIcon(icon) {\n this._icon = icon;\n this.redraw();\n }\n /**\n * Gibt die View-Klasse der Action zurück\n * @returns {string}\n */\n getShowFor() {\n return this._showFor;\n }\n /**\n * Gibt eine odder mehrere extra Klasse zurück, die dem li-Element der Action hinzugefügt werden kann\n * @returns {string}\n */\n getLiClass() {\n return this._liClass;\n }\n setLiClass(cssClass) {\n this._liClass = cssClass;\n this._copies.forEach(c => c.setLiClass(cssClass));\n this.redraw();\n }\n /**\n * Gibt das zugehörige Menu zurück\n *\n * @returns {null}\n */\n getMenu() {\n return this._menu;\n }\n /**\n * Setzt das zugehörige Menu\n *\n * @param menu\n */\n setMenu(menu) {\n this._menu = menu;\n }\n}\nexports.MenuAction = MenuAction;\n/**\n * Letzte ID, die vergeben wurde. Wird beim Erstellen einer Acton um eins erhöht\n * @type {number}\n */\nMenuAction.lastId = 0;\n/**\n * Die SHOW_ALWAYS-Visibility-Klasse\n * Das Element wird bei jeder Größe in der NavBar angezeigt\n *\n * @type {string}\n */\nMenuAction.SHOW_ALWAYS = \"always\";\n/**\n * Die SHOW_FOR_SMEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"SMedium\" (zwischen Small und Medium) hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_SMEDIUM = \"smedium\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Medium\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_MEDIUM = \"medium\";\n/**\n * Die SHOW_FOR_LARGE-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Large\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_LARGE = \"large\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird nie in der NavBar angezeigt, sondern immer nur im aufklapbaren Menu\n *\n * @type {string}\n */\nMenuAction.SHOW_NEVER = \"never\";\n//# sourceMappingURL=MenuAction.js.map","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dialog = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nclass Dialog {\n constructor(content, title) {\n this._resolver = null;\n this._content = null;\n this._backgroundElement = null;\n this._cancelable = true;\n this._title = Helper_1.Helper.nonNull(title, \"\");\n this._translatable = true;\n this._additionalClasses = \"\";\n this._buttons = [];\n this._result = null;\n this._contentPromise = null;\n this._addedToDomePromise = new Promise(r => {\n this._addedToDomePromiseResolver = r;\n });\n if (Helper_1.Helper.isNotNull(content)) {\n this.setContent(content);\n }\n }\n setTitle(title) {\n this._title = title;\n return this;\n }\n setTranslatable(translatable) {\n this._translatable = translatable;\n }\n setAdditionalClasses(classes) {\n this._additionalClasses = classes;\n }\n getTitle() {\n return this._title;\n }\n setCancelable(cancelable) {\n this._cancelable = (cancelable === true);\n return this;\n }\n setContent(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof content === \"string\" && content.endsWith(\".html\")) {\n content = ViewInflater_1.ViewInflater.getInstance().load(content);\n }\n this._contentPromise = Promise.resolve(content);\n this._content = yield this._contentPromise;\n return this;\n });\n }\n addButton(elementOrText, listenerOrResult, shouldClose) {\n shouldClose = Helper_1.Helper.nonNull(shouldClose, true);\n let button = null;\n if (typeof elementOrText === \"string\") {\n button = document.createElement(\"button\");\n button.classList.add(\"button\");\n button.classList.add(\"right\");\n button.appendChild(Translator_1.Translator.makePersistentTranslation(elementOrText));\n }\n else {\n button = elementOrText;\n }\n let self = this;\n if (typeof listenerOrResult !== \"function\") {\n let result = listenerOrResult;\n listenerOrResult = function () {\n self._result = result;\n };\n }\n let callback = null;\n if (shouldClose) {\n callback = function (e) {\n if (Helper_1.Helper.isNotNull(listenerOrResult)) {\n listenerOrResult(e);\n }\n self.close();\n };\n }\n else {\n callback = listenerOrResult;\n }\n if (Helper_1.Helper.isNotNull(callback)) {\n button.addEventListener(\"click\", callback);\n }\n this._buttons.push(button);\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._contentPromise;\n this._backgroundElement = this.createModalDialogElement();\n this._backgroundElement.addEventListener(\"keyup\", e => {\n if (e.key === \"Escape\" && this._cancelable) {\n this.close();\n }\n });\n document.body.appendChild(this._backgroundElement);\n yield Translator_1.Translator.getInstance().updateTranslations();\n this._addedToDomePromiseResolver();\n return new Promise((resolve) => {\n this._resolver = resolve;\n });\n });\n }\n createModalDialogElement() {\n let titleElement = document.createElement(\"span\");\n titleElement.classList.add(\"title\");\n if (this._translatable && this._title !== \"\") {\n titleElement.appendChild(Translator_1.Translator.makePersistentTranslation(this._title));\n }\n else {\n titleElement.innerHTML = this._title;\n }\n let titleBar = document.createElement(\"div\");\n titleBar.appendChild(titleElement);\n let contentContainer = document.createElement(\"div\");\n contentContainer.classList.add(\"content-container\");\n let modalDialog = document.createElement(\"div\");\n modalDialog.className = this._additionalClasses;\n modalDialog.classList.add(\"modal\");\n modalDialog.appendChild(titleBar);\n modalDialog.appendChild(contentContainer);\n let buttonBar = document.createElement(\"div\");\n buttonBar.classList.add(\"modal-button-container\");\n for (let i = 0, n = this._buttons.length; i < n; i++) {\n buttonBar.appendChild(this._buttons[i]);\n }\n if (!(this._content instanceof Node)) {\n this._content = (this._translatable) ? Translator_1.Translator.makePersistentTranslation(this._content) : document.createTextNode(this._content);\n }\n contentContainer.appendChild(this._content);\n this._backgroundElement = document.createElement(\"div\");\n this._backgroundElement.classList.add(\"background\");\n this._backgroundElement.style.display = \"block\";\n this._backgroundElement.appendChild(modalDialog);\n this._backgroundElement.querySelector(\".modal\").appendChild(buttonBar);\n if (this._cancelable) {\n let closeButton = document.createElement(\"span\");\n closeButton.classList.add(\"close\");\n closeButton.innerHTML = \"×\";\n titleBar.appendChild(closeButton);\n closeButton.addEventListener(\"click\", () => {\n this.close();\n });\n window.addEventListener(\"click\", (e) => {\n if (e.target === this._backgroundElement) {\n this.close();\n }\n });\n }\n return this._backgroundElement;\n }\n waitForAddedToDom() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._addedToDomePromise;\n });\n }\n close() {\n this.waitForAddedToDom().then(() => {\n if (Helper_1.Helper.isNotNull(this._backgroundElement)) {\n this._backgroundElement.style.display = \"none\";\n this._backgroundElement.remove();\n this._backgroundElement = null;\n }\n });\n if (Helper_1.Helper.isNotNull(this._resolver)) {\n this._resolver(this._result);\n }\n }\n}\nexports.Dialog = Dialog;\n//# sourceMappingURL=Dialog.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when selected sql driver does not supports locking.\n */\nvar LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) {\n __extends(LockNotSupportedOnGivenDriverError, _super);\n function LockNotSupportedOnGivenDriverError() {\n var _this = _super.call(this) || this;\n _this.name = \"LockNotSupportedOnGivenDriverError\";\n Object.setPrototypeOf(_this, LockNotSupportedOnGivenDriverError.prototype);\n _this.message = \"Locking not supported on given driver.\";\n return _this;\n }\n return LockNotSupportedOnGivenDriverError;\n}(Error));\nexport { LockNotSupportedOnGivenDriverError };\n\n//# sourceMappingURL=LockNotSupportedOnGivenDriverError.js.map\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenSubmenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Action, welche ein Untermenü öffnet\n */\nclass OpenSubmenuAction extends MenuAction_1.MenuAction {\n /**\n * Bekommt ein submenu anstelle einer Action übergeben.\n * Erstellt automatisch die action zum öffnen/schließen des Menüs\n *\n * @param title\n * @param menu\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(title, menu, showFor, order, icon) {\n //Erstellt die action zum schließen/öffnen des Submenüs\n super(title, action => {\n action.getSubmenu().toggle();\n action.update();\n }, showFor, order, icon);\n this._submenu = menu;\n menu.setParentAction(this);\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n * und das Submenu, welches ebenfalls kopiert wird\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n action = Helper_1.Helper.nonNull(action, new OpenSubmenuAction(null, this._submenu.copy()));\n action = super.copy(action);\n action._submenu.setParentAction(action);\n return action;\n }\n /**\n * Gibt das Submenu zurück\n *\n * @returns {*}\n */\n getSubmenu() {\n return this._submenu;\n }\n}\nexports.OpenSubmenuAction = OpenSubmenuAction;\n//# sourceMappingURL=OpenSubmenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nclass UserManager {\n constructor() {\n this._defaultUserData = {\n id: null,\n loggedIn: false,\n online: false,\n username: null,\n email: null,\n accesses: UserManager.OFFLINE_ACCESSES,\n };\n this._userData = this._defaultUserData;\n this._lastLoginChangeCallbackId = -1;\n this._loginChangeCallbacks = {};\n this._getMePromise = null;\n }\n addLoginChangeCallback(callback, callImmediately) {\n this._lastLoginChangeCallbackId++;\n this._loginChangeCallbacks[this._lastLoginChangeCallbackId] = callback;\n if (client_1.Helper.nonNull(callImmediately, false)) {\n callback(this._userData.loggedIn, this);\n }\n return this._lastLoginChangeCallbackId;\n }\n hasAccess(access) {\n return (this._userData.accesses.indexOf(access) !== -1);\n }\n _checkChangedLogin(before) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._userData.loggedIn !== before.loggedIn || (this._userData.loggedIn === true && this._userData.id !== before.id)) {\n yield this._callLoginChangeCallbacks();\n }\n });\n }\n _callLoginChangeCallbacks() {\n return __awaiter(this, void 0, void 0, function* () {\n yield client_1.Helper.asyncForEach(Object.keys(this._loginChangeCallbacks), callbackId => {\n this._loginChangeCallbacks[callbackId](this._userData.loggedIn, this);\n }, true);\n });\n }\n getUserData() {\n return this._userData;\n }\n getMe() {\n return __awaiter(this, void 0, void 0, function* () {\n this._getMePromise = new Promise((r) => __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doGetMe();\n yield this._checkChangedLogin(before);\n r(res);\n }));\n return this._getMePromise;\n });\n }\n waitForGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._getMePromise === null) {\n this.getMe();\n }\n yield this._getMePromise;\n });\n }\n login(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogin(email, password, saveLogin);\n //do it after the result is returned\n setTimeout(() => {\n this._checkChangedLogin(before);\n }, 1);\n return res;\n });\n }\n logout() {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogout();\n yield this._checkChangedLogin(before);\n if (!this._userData.loggedIn) {\n yield new client_1.Toast(\"goodbye\").show();\n }\n return res;\n });\n }\n register(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doRegister(email, username, password);\n yield this._checkChangedLogin(before);\n return res;\n });\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager.updateHeaders();\n let data = yield client_1.DataManager.load(\"user\");\n if (client_1.Helper.isSet(data, \"userData\")) {\n yield client_1.NativeStoragePromise.setItem(\"user-data\", data.userData);\n this._userData = data.userData;\n }\n else {\n this._userData = this._defaultUserData;\n }\n this._updateAccessClasses();\n if (client_1.Helper.isSet(data, \"token\")) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n if (client_1.Helper.isNotNull(yield client_1.NativeStoragePromise.getItem(\"auth-token\"))) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n }\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/login\", {\n \"email\": email,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n if (saveLogin) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield this._doGetMe();\n return true;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/register\", {\n \"email\": email,\n \"username\": username,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n /**\n * @returns {UserManager}\n */\n static getInstance() {\n if (!UserManager._instance) {\n UserManager._instance = new UserManager();\n }\n return UserManager._instance;\n }\n static updateHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = client_1.Helper.nonNull(sessionStorage.getItem(\"auth-token\"), yield client_1.NativeStoragePromise.getItem(\"auth-token\"));\n if (token) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + token);\n }\n });\n }\n _updateAccessClasses() {\n document.body.classList.forEach(cl => {\n if (cl.startsWith(UserManager.ACCESS_CLASS_PREFIX)) {\n document.body.classList.remove(cl);\n }\n });\n this._userData.accesses.forEach(access => {\n document.body.classList.add(UserManager.ACCESS_CLASS_PREFIX + access);\n });\n }\n hasOfflineAccess(access) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isOnline()) {\n return false;\n }\n let offlineData = client_1.Helper.nonNull(yield client_1.NativeStoragePromise.getItem(\"user-data\"), { accesses: UserManager.OFFLINE_ACCESSES });\n return (offlineData.accesses.indexOf(access) !== -1);\n });\n }\n sendForgotPasswordEmail(email) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW\", { email: email });\n return data.success;\n });\n }\n resetPassword(token, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW/2\", { token: token, password: password });\n return data.success;\n });\n }\n isOnline() {\n return this._userData.online;\n }\n isLoggedIn() {\n return this._userData.loggedIn;\n }\n static syncParamFor(model) {\n return {\n model: model,\n where: {\n user: { id: this.getInstance().getUserData().id }\n }\n };\n }\n static userSyncParam() {\n return {\n model: User_1.User,\n where: {\n id: this.getInstance().getUserData().id\n }\n };\n }\n}\nexports.UserManager = UserManager;\nUserManager.ACCESS_CLASS_PREFIX = \"access-\";\nUserManager.OFFLINE_ACCESSES = [\n \"offline\"\n];\n//# sourceMappingURL=UserManager.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to update using QueryBuilder but do not specify what to update.\n */\nvar UpdateValuesMissingError = /** @class */ (function (_super) {\n __extends(UpdateValuesMissingError, _super);\n function UpdateValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"UpdateValuesMissingError\";\n Object.setPrototypeOf(_this, UpdateValuesMissingError.prototype);\n _this.message = \"Cannot perform update query because update values are not defined. Call \\\"qb.set(...)\\\" method to specify updated values.\";\n return _this;\n }\n return UpdateValuesMissingError;\n}(Error));\nexport { UpdateValuesMissingError };\n\n//# sourceMappingURL=UpdateValuesMissingError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Toast = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ToastManager_1 = require(\"./ToastManager\");\nclass Toast {\n constructor(message, duration, shouldTranslateOrTranslationArgs) {\n this._message = message;\n this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION);\n this._shouldTranslate = shouldTranslateOrTranslationArgs !== false;\n this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []);\n this._id = Toast.LAST_ID++;\n this._toastElement = null;\n }\n getId() {\n return this._id;\n }\n getMessage() {\n return this._message;\n }\n getDuration() {\n return this._duration;\n }\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n getTranslationArgs() {\n return this._translationArgs;\n }\n setToastElement(element) {\n this._toastElement = element;\n }\n getToastElement() {\n return this._toastElement;\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().showToast(this);\n });\n }\n hide() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().hideToast(this);\n });\n }\n}\nexports.Toast = Toast;\nToast.LAST_ID = 0;\nToast.DEFAULT_DURATION = 2500;\n//# sourceMappingURL=Toast.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when an optimistic lock cannot be used in query builder.\n */\nvar OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) {\n __extends(OptimisticLockCanNotBeUsedError, _super);\n function OptimisticLockCanNotBeUsedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockCanNotBeUsedError\";\n Object.setPrototypeOf(_this, OptimisticLockCanNotBeUsedError.prototype);\n _this.message = \"The optimistic lock can be used only with getOne() method.\";\n return _this;\n }\n return OptimisticLockCanNotBeUsedError;\n}(Error));\nexport { OptimisticLockCanNotBeUsedError };\n\n//# sourceMappingURL=OptimisticLockCanNotBeUsedError.js.map\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\n/**\n * Basis-Klasse für Seiten und Fragmente\n */\nclass Context {\n /**\n * Erstellt einen neuen Context. Erwartet den Link zu einem HTML-File, welches vom ViewInflater geladen werden kann.\n * Im Constructor sollten fragmente hinzugefügt werden (nachdem super.constructor(<>) aufgerufen wurde)\n *\n * @param view\n */\n constructor(view) {\n this.onViewLoadedCalled = false;\n this._pauseParameters = [];\n this._view = null;\n this._fragments = [];\n this._state = Context.STATE_CREATED;\n this._viewLoadedPromise = Helper_1.Helper.newPromiseWithResolve();\n this._viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then((siteContent) => {\n this._view = siteContent;\n return siteContent;\n }).catch(e => {\n // @ts-ignore\n this._viewLoadedPromise.reject(e);\n });\n }\n getState() {\n return this._state;\n }\n /**\n * Wird von SiteManager aufgerufen, wenn Klasse erstellt wird. Das ViewPromise ist noch nicht zwangsweise geladen!\n * Gibt ein Promise zurück. onViewLoaded wird erst aufgerufen, wenn onConstruct-Promise und view-Promise fullfilled sind.\n *\n * @param constructParameters, Object|Null\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_CONSTRUCTED;\n this.constructParameters = constructParameters;\n let onConstructPromises = [];\n for (let k in this._fragments) {\n onConstructPromises.push(this._fragments[k].onConstruct.apply(this._fragments[k], [constructParameters]));\n onConstructPromises.push(this._fragments[k]._viewPromise);\n }\n return Promise.all(onConstructPromises);\n });\n }\n callOnViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.onViewLoadedCalled) {\n this.onViewLoadedCalled = true;\n const res = yield this.onViewLoaded();\n // @ts-ignore\n this._viewLoadedPromise.resolve(res);\n }\n return this._viewLoadedPromise;\n });\n }\n /**\n * Methode wird aufgerufen, sobald onConstruct-Promise und view-Promise fullfilled sind.\n * View ist hier noch nicht im Dokument hinzugefügt.\n *\n * Benutze diese Methode, um die View beim starten zu manipulieren.\n */\n onViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_VIEW_LOADED;\n let onViewLoadedPromises = [];\n for (let k in this._fragments) {\n onViewLoadedPromises.push(this._fragments[k]._viewPromise.then(() => this._fragments[k].callOnViewLoaded()).then(() => this._fragments[k]._viewLoadedPromise.resolve()));\n }\n return Promise.all(onViewLoadedPromises);\n });\n }\n /**\n * onViewLoaded-Promise ist erfüllt => View wird dem Document hinzugefügt => onStart wird aufgerufen\n *\n * Seite wird pausiert => onPause wird aufgerufen => View wird aus dem Document entfernt => - etwas passiert -\n * => Seite wird fortgesetzt => View wird dem Document hinzugefügt => onStart wird mit dem Rückgabewert von onPause ausgeführt\n *\n * Zurückgegebenes Promise wird ignoriert!\n * @param pauseArguments, Object|NULL\n */\n onStart(pauseArguments) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_RUNNING;\n for (let k in this._fragments) {\n let fragment = this._fragments[k];\n fragment.onStart.apply(this._fragments[k], [yield this._fragments[k]._pauseParameters]);\n this._fragments[k]._viewPromise.then(function (fragmentView) {\n if (fragment.isActive()) {\n fragmentView.classList.remove(\"hidden\");\n }\n else {\n fragmentView.classList.add(\"hidden\");\n }\n });\n }\n });\n }\n /**\n * Seite wird pausiet => onPause wird ausgeführt => View wird aus dem Document entfernt\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird als Pause-Parameter gespeichert und wird beim Fortsetzen der Seite ausgeführt\n * @returns {Promise}\n */\n onPause(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_PAUSED;\n for (let k in this._fragments) {\n let pauseParameters = this._fragments[k].onPause.apply(this._fragments[k], args);\n this._fragments[k].setPauseParameters(pauseParameters);\n }\n });\n }\n /**\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird ignoriert\n */\n onDestroy(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_DESTROYED;\n for (let k in this._fragments) {\n this._fragments[k].onDestroy.apply(this._fragments[k], args);\n }\n });\n }\n isShowing() {\n return this._state === Context.STATE_RUNNING;\n }\n /**\n * Fügt ein neues Fragment hinzu.\n *\n * @param viewQuery\n * @param fragment\n */\n addFragment(viewQuery, fragment) {\n this._fragments.push(fragment);\n fragment.setViewQuery(viewQuery);\n this._viewPromise = Promise.all([this._viewPromise, fragment._viewPromise]).then(res => {\n res[0].querySelector(viewQuery).appendChild(res[1]);\n return res[0];\n }).catch(e => console.error(e));\n if (this._state >= Context.STATE_CONSTRUCTED) {\n fragment.onConstruct(this.constructParameters);\n }\n if (this._state >= Context.STATE_VIEW_LOADED) {\n Promise.all([this._viewLoadedPromise, fragment.getViewPromise()]).then(() => fragment.callOnViewLoaded());\n }\n if (this._state >= Context.STATE_RUNNING) {\n fragment._viewLoadedPromise.then(() => {\n if (this._state >= Context.STATE_RUNNING) {\n fragment.onStart();\n }\n });\n }\n }\n /**\n * Entfernt ein Fragment.\n *\n * @param fragment\n */\n removeFragment(fragment) {\n const index = this._fragments.indexOf(fragment);\n if (index !== -1) {\n this._fragments.splice(index, 1);\n }\n fragment._viewPromise.then(res => res.remove());\n this._fragments.push(fragment);\n if (this._state < Context.STATE_PAUSED) {\n fragment.onPause();\n }\n if (this._state < Context.STATE_DESTROYING) {\n fragment.onDestroy();\n }\n }\n /**\n * Findet ein Element anhand eines Selectors\n *\n * Wenn all = true, werden alle gefundenen Elemente zurückgegeben\n *\n * Wenn asPromise = true, wird das Ergebnis als Promise zurückgegeben. Hier wird gewartet, bis das _viewPromise fullfilled ist\n * Nutze das, um die View in onConstruct zu manipulieren. Evtl entfernen\n *\n * @param query\n * @param all\n * @param asPromise\n * @returns {*}\n */\n findBy(query, all, asPromise) {\n all = Helper_1.Helper.nonNull(all, false);\n asPromise = Helper_1.Helper.nonNull(asPromise, false);\n let getVal = function (root) {\n let res = null;\n if (all) {\n res = root.querySelectorAll(query);\n if (root.matches(query)) {\n res.push(root);\n }\n }\n else {\n if (root.matches(query)) {\n res = root;\n }\n else {\n res = root.querySelector(query);\n }\n }\n return res;\n };\n if (asPromise) {\n return this._viewPromise.then(function (rootView) {\n return getVal(rootView);\n });\n }\n return getVal(this._view);\n }\n find(selector) {\n if (this._view.matches(selector)) {\n return this._view;\n }\n else {\n return this._view.querySelector(selector);\n }\n }\n findAll(selector) {\n const res = this._view.querySelectorAll(selector);\n if (this._view.matches(selector)) {\n res.push(this._view);\n }\n return res;\n }\n /**\n * Setzt die PauseParameters\n * @param pauseParameters\n */\n setPauseParameters(pauseParameters) {\n this._pauseParameters = pauseParameters;\n }\n /**\n * Gibt das ViewPromise zurück\n * @returns {*}\n */\n getViewPromise() {\n return this._viewPromise;\n }\n}\nexports.Context = Context;\nContext.STATE_CREATED = 0;\nContext.STATE_CONSTRUCTED = 1;\nContext.STATE_VIEW_LOADED = 2;\nContext.STATE_RUNNING = 3;\nContext.STATE_PAUSED = 4;\nContext.STATE_DESTROYING = 5;\nContext.STATE_DESTROYED = 6;\n//# sourceMappingURL=Context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Role_1 = require(\"./Role\");\nclass User extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.username = null;\n this.email = null;\n this.password = null;\n this.roles = null;\n this.activated = false;\n this.blocked = false;\n this.salt = null;\n }\n toJSON() {\n return {\n id: this.id,\n username: this.username,\n };\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"username\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"email\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"password\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"activated\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"blocked\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"salt\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"roles\"] = {\n target: Role_1.Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"userRole\"\n },\n cascade: false\n };\n return relations;\n }\n static prepareSync(entities) {\n let jsonEntities = [];\n entities.forEach(entity => {\n let jsonEntity = {};\n jsonEntity.id = entity.id;\n jsonEntity.createdAt = new Date();\n jsonEntity.updatedAt = new Date();\n jsonEntity.username = \"\";\n jsonEntity.email = \"\";\n jsonEntity.password = \"\";\n jsonEntity.salt = \"\";\n jsonEntity.activated = 1;\n jsonEntity.blocked = 1;\n jsonEntity.version = 1;\n jsonEntity.deleted = 0;\n jsonEntities.push(jsonEntity);\n });\n return jsonEntities;\n }\n}\nexports.User = User;\ncordova_sites_database_1.BaseDatabase.addModel(User);\n//# sourceMappingURL=User.js.map","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when no result could be found in methods which are not allowed to return undefined or an empty set.\n */\nvar EntityNotFoundError = /** @class */ (function (_super) {\n __extends(EntityNotFoundError, _super);\n function EntityNotFoundError(entityClass, criteria) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityNotFound\";\n Object.setPrototypeOf(_this, EntityNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n var criteriaString = _this.stringifyCriteria(criteria);\n _this.message = \"Could not find any entity of type \\\"\" + targetName + \"\\\" matching: \" + criteriaString;\n return _this;\n }\n EntityNotFoundError.prototype.stringifyCriteria = function (criteria) {\n try {\n return JSON.stringify(criteria, null, 4);\n }\n catch (e) { }\n return \"\" + criteria;\n };\n return EntityNotFoundError;\n}(Error));\nexport { EntityNotFoundError };\n\n//# sourceMappingURL=EntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n *\n */\nvar EntityColumnNotFound = /** @class */ (function (_super) {\n __extends(EntityColumnNotFound, _super);\n function EntityColumnNotFound(propertyPath) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityColumnNotFound\";\n Object.setPrototypeOf(_this, EntityColumnNotFound.prototype);\n _this.message = \"No entity column \\\"\" + propertyPath + \"\\\" was found.\";\n return _this;\n }\n return EntityColumnNotFound;\n}(Error));\nexport { EntityColumnNotFound };\n\n//# sourceMappingURL=EntityColumnNotFound.js.map\n","/**\n * Result object returned by UpdateQueryBuilder execution.\n */\nvar UpdateResult = /** @class */ (function () {\n function UpdateResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n // identifier: ObjectLiteral[] = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return UpdateResult;\n}());\nexport { UpdateResult };\n\n//# sourceMappingURL=UpdateResult.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build an UPDATE query with LIMIT but the database does not support it.\n*/\nvar LimitOnUpdateNotSupportedError = /** @class */ (function (_super) {\n __extends(LimitOnUpdateNotSupportedError, _super);\n function LimitOnUpdateNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"LimitOnUpdateNotSupportedError\";\n Object.setPrototypeOf(_this, LimitOnUpdateNotSupportedError.prototype);\n _this.message = \"Your database does not support LIMIT on UPDATE statements.\";\n return _this;\n }\n return LimitOnUpdateNotSupportedError;\n}(Error));\nexport { LimitOnUpdateNotSupportedError };\n\n//# sourceMappingURL=LimitOnUpdateNotSupportedError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection, queryRunner, relationIdAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationIdAttributes = relationIdAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n promises = this.relationIdAttributes.map(function (relationIdAttr) { return __awaiter(_this, void 0, void 0, function () {\n var duplicates_1, results, relation_1, joinColumns_1, table, tableName, tableAlias_1, duplicates_2, parameters_1, condition, qb_1, results, relation, joinColumns_2, inverseJoinColumns_1, junctionAlias_1, inverseSideTableName, inverseSideTableAlias_1, junctionTableName, mappedColumns, parameters_2, duplicates_3, joinColumnConditions, inverseJoinColumnCondition_1, condition, qb_2, results;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner)) return [3 /*break*/, 1];\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n if (relationIdAttr.queryBuilderFactory)\n throw new Error(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n duplicates_1 = [];\n results = rawEntities.map(function (rawEntity) {\n var result = {};\n var duplicateParts = [];\n relationIdAttr.relation.joinColumns.forEach(function (joinColumn) {\n result[joinColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn);\n var duplicatePart = joinColumn.databaseName + \":\" + result[joinColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n result[primaryColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n var duplicatePart = primaryColumn.databaseName + \":\" + result[primaryColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_1.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates_1.push(duplicate);\n return result;\n }).filter(function (v) { return v; });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 1:\n if (!(relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner)) return [3 /*break*/, 3];\n relation_1 = relationIdAttr.relation;\n joinColumns_1 = relation_1.isOwning ? relation_1.joinColumns : relation_1.inverseRelation.joinColumns;\n table = relation_1.inverseEntityMetadata.target;\n tableName = relation_1.inverseEntityMetadata.tableName;\n tableAlias_1 = relationIdAttr.alias || tableName;\n duplicates_2 = [];\n parameters_1 = {};\n condition = rawEntities.map(function (rawEntity, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = joinColumns_1.map(function (joinColumn) {\n var parameterName = joinColumn.databaseName + index;\n var parameterValue = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n var duplicatePart = tableAlias_1 + \":\" + joinColumn.propertyPath + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias_1 + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(function (v) { return v; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_2.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_2.push(duplicate);\n Object.assign(parameters_1, parameterParts);\n return queryPart;\n }).filter(function (v) { return v; }).map(function (condition) { return \"(\" + condition + \")\"; })\n .join(\" OR \");\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n qb_1 = this.connection.createQueryBuilder(this.queryRunner);\n joinColumns_1.forEach(function (joinColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n qb_1.from(table, tableAlias_1)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters_1);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_1);\n return [4 /*yield*/, qb_1.getRawMany()];\n case 2:\n results = _a.sent();\n results.forEach(function (result) {\n joinColumns_1.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 3:\n relation = relationIdAttr.relation;\n joinColumns_2 = relation.isOwning ? relation.joinColumns : relation.inverseRelation.inverseJoinColumns;\n inverseJoinColumns_1 = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation.joinColumns;\n junctionAlias_1 = relationIdAttr.junctionAlias;\n inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias_1 = relationIdAttr.alias || inverseSideTableName;\n junctionTableName = relation.isOwning ? relation.junctionEntityMetadata.tableName : relation.inverseRelation.junctionEntityMetadata.tableName;\n mappedColumns = rawEntities.map(function (rawEntity) {\n return joinColumns_2.reduce(function (map, joinColumn) {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n return map;\n }, {});\n });\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n parameters_2 = {};\n duplicates_3 = [];\n joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = Object.keys(mappedColumn).map(function (key) {\n var parameterName = key + index;\n var parameterValue = mappedColumn[key];\n var duplicatePart = junctionAlias_1 + \":\" + key + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias_1 + \".\" + key + \" = :\" + parameterName;\n }).filter(function (s) { return s; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_3.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_3.push(duplicate);\n Object.assign(parameters_2, parameterParts);\n return queryPart;\n }).filter(function (s) { return s; });\n inverseJoinColumnCondition_1 = inverseJoinColumns_1.map(function (joinColumn) {\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias_1 + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n condition = joinColumnConditions.map(function (condition) {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition_1 + \")\";\n }).join(\" OR \");\n qb_2 = this.connection.createQueryBuilder(this.queryRunner);\n inverseJoinColumns_1.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n joinColumns_2.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n qb_2.from(inverseSideTableName, inverseSideTableAlias_1)\n .innerJoin(junctionTableName, junctionAlias_1, condition)\n .setParameters(parameters_2);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_2);\n return [4 /*yield*/, qb_2.getRawMany()];\n case 4:\n results = _a.sent();\n results.forEach(function (result) {\n __spreadArray(__spreadArray([], __read(joinColumns_2)), __read(inverseJoinColumns_1)).forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { RelationIdAttribute } from \"./RelationIdAttribute\";\nvar RelationIdMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation id:\n // @RelationId(post => post.categories) categoryIds\n // category has relation id\n // @RelationId(category => category.images) imageIds\n // we load post and join category\n // we expect post.categoryIds and post.category.imageIds to have relation ids\n var _this = this;\n // first create relation id attributes for all relation id metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n }\n // second create relation id attributes for all relation id metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation id can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationId) {\n return new RelationIdAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationId.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationId.propertyName,\n alias: relationId.alias,\n queryBuilderFactory: relationId.queryBuilderFactory\n });\n };\n return RelationIdMetadataToAttributeTransformer;\n}());\nexport { RelationIdMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationIdMetadataToAttributeTransformer.js.map\n","import { __awaiter, __generator } from \"tslib\";\nvar RelationCountLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountLoader(connection, queryRunner, relationCountAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationCountAttributes = relationCountAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var onlyUnique, promises;\n var _this = this;\n return __generator(this, function (_a) {\n onlyUnique = function (value, index, self) {\n return self.indexOf(value) === index;\n };\n promises = this.relationCountAttributes.map(function (relationCountAttr) { return __awaiter(_this, void 0, void 0, function () {\n var relation, inverseRelation, referenceColumnName_1, inverseSideTable, inverseSideTableName, inverseSideTableAlias, inverseSidePropertyName, referenceColumnValues, qb, joinTableColumnName_1, inverseJoinColumnName, firstJunctionColumn, secondJunctionColumn, referenceColumnValues, junctionAlias, inverseSideTableName, inverseSideTableAlias, junctionTableName, condition, qb;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!relationCountAttr.relation.isOneToMany) return [3 /*break*/, 2];\n relation = relationCountAttr.relation;\n inverseRelation = relation.inverseRelation;\n referenceColumnName_1 = inverseRelation.joinColumns[0].referencedColumn.propertyName;\n inverseSideTable = relation.inverseEntityMetadata.target;\n inverseSideTableName = relation.inverseEntityMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n inverseSidePropertyName = inverseRelation.propertyName;\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + referenceColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(inverseSideTableAlias + \".\" + inverseSidePropertyName, \"parentId\")\n .addSelect(\"COUNT(*)\", \"cnt\")\n .from(inverseSideTable, inverseSideTableAlias)\n .where(inverseSideTableAlias + \".\" + inverseSidePropertyName + \" IN (:...ids)\")\n .addGroupBy(inverseSideTableAlias + \".\" + inverseSidePropertyName)\n .setParameter(\"ids\", referenceColumnValues);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _a = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 1: return [2 /*return*/, (_a.results = _c.sent(),\n _a)];\n case 2:\n inverseJoinColumnName = void 0;\n firstJunctionColumn = void 0;\n secondJunctionColumn = void 0;\n if (relationCountAttr.relation.isOwning) { // todo fix joinColumns[0] and inverseJoinColumns[0].\n joinTableColumnName_1 = relationCountAttr.relation.joinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n }\n else {\n joinTableColumnName_1 = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n }\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + joinTableColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n junctionAlias = relationCountAttr.junctionAlias;\n inverseSideTableName = relationCountAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n junctionTableName = relationCountAttr.relation.junctionEntityMetadata.tableName;\n condition = junctionAlias + \".\" + firstJunctionColumn.propertyName + \" IN (\" + referenceColumnValues.map(function (vals) { return isNaN(vals) ? \"'\" + vals + \"'\" : vals; }) + \")\" +\n \" AND \" + junctionAlias + \".\" + secondJunctionColumn.propertyName + \" = \" + inverseSideTableAlias + \".\" + inverseJoinColumnName;\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(junctionAlias + \".\" + firstJunctionColumn.propertyName, \"parentId\")\n .addSelect(\"COUNT(\" + qb.escape(inverseSideTableAlias) + \".\" + qb.escape(inverseJoinColumnName) + \")\", \"cnt\")\n .from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .addGroupBy(junctionAlias + \".\" + firstJunctionColumn.propertyName);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _b = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 3: return [2 /*return*/, (_b.results = _c.sent(),\n _b)];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationCountLoader;\n}());\nexport { RelationCountLoader };\n\n//# sourceMappingURL=RelationCountLoader.js.map\n","import { RelationCountAttribute } from \"./RelationCountAttribute\";\nvar RelationCountMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation count:\n // @RelationCount(post => post.categories) categoryCount\n // category has relation count\n // @RelationCount(category => category.images) imageCount\n // we load post and join category\n // we expect post.categoryCount and post.category.imageCount to have relation counts\n var _this = this;\n // first create relation count attributes for all relation count metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n }\n // second create relation count attributes for all relation count metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation count can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationCount) {\n return new RelationCountAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationCount.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationCount.propertyName,\n alias: relationCount.alias,\n queryBuilderFactory: relationCount.queryBuilderFactory\n });\n };\n return RelationCountMetadataToAttributeTransformer;\n}());\nexport { RelationCountMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationCountMetadataToAttributeTransformer.js.map\n","import { __awaiter, __extends, __generator, __read, __spreadArray } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { RawSqlResultsToEntityTransformer } from \"./transformer/RawSqlResultsToEntityTransformer\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PessimisticLockTransactionRequiredError } from \"../error/PessimisticLockTransactionRequiredError\";\nimport { NoVersionOrUpdateDateColumnError } from \"../error/NoVersionOrUpdateDateColumnError\";\nimport { OptimisticLockVersionMismatchError } from \"../error/OptimisticLockVersionMismatchError\";\nimport { OptimisticLockCanNotBeUsedError } from \"../error/OptimisticLockCanNotBeUsedError\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\nimport { RelationIdLoader } from \"./relation-id/RelationIdLoader\";\nimport { RelationIdMetadataToAttributeTransformer } from \"./relation-id/RelationIdMetadataToAttributeTransformer\";\nimport { RelationCountLoader } from \"./relation-count/RelationCountLoader\";\nimport { RelationCountMetadataToAttributeTransformer } from \"./relation-count/RelationCountMetadataToAttributeTransformer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { LockNotSupportedOnGivenDriverError } from \"../error/LockNotSupportedOnGivenDriverError\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { OffsetWithoutLimitNotSupportedError } from \"../error/OffsetWithoutLimitNotSupportedError\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SelectQueryBuilder = /** @class */ (function (_super) {\n __extends(SelectQueryBuilder, _super);\n function SelectQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SelectQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createSelectExpression();\n sql += this.createJoinExpression();\n sql += this.createWhereExpression();\n sql += this.createGroupByExpression();\n sql += this.createHavingExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitOffsetExpression();\n sql += this.createLockExpression();\n sql = sql.trim();\n if (this.expressionMap.subQuery)\n sql = \"(\" + sql + \")\";\n return sql;\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a subquery - query that can be used inside other queries.\n */\n SelectQueryBuilder.prototype.subQuery = function () {\n var qb = this.createQueryBuilder();\n qb.expressionMap.subQuery = true;\n qb.expressionMap.parentQueryBuilder = this;\n return qb;\n };\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n SelectQueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n return this;\n };\n /**\n * Adds new selection to the SELECT query.\n */\n SelectQueryBuilder.prototype.addSelect = function (selection, selectionAliasName) {\n if (!selection)\n return this;\n if (Array.isArray(selection)) {\n this.expressionMap.selects = this.expressionMap.selects.concat(selection.map(function (selection) { return ({ selection: selection }); }));\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects.push({ selection: selection, aliasName: selectionAliasName });\n }\n return this;\n };\n /**\n * Sets whether the selection is DISTINCT.\n */\n SelectQueryBuilder.prototype.distinct = function (distinct) {\n if (distinct === void 0) { distinct = true; }\n this.expressionMap.selectDistinct = distinct;\n return this;\n };\n /**\n * Sets the distinct on clause for Postgres.\n */\n SelectQueryBuilder.prototype.distinctOn = function (distinctOn) {\n this.expressionMap.selectDistinctOn = distinctOn;\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n * Removes all previously set from-s.\n */\n SelectQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SelectQueryBuilder.prototype.addFrom = function (entityTarget, aliasName) {\n var alias = this.createFromAlias(entityTarget, aliasName);\n if (!this.expressionMap.mainAlias)\n this.expressionMap.setMainAlias(alias);\n return this;\n };\n /**\n * INNER JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.innerJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.leftJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs relation id and maps it into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationIdAndMap = function (mapToProperty, relationName, aliasNameOrOptions, queryBuilderFactory) {\n var relationIdAttribute = new RelationIdAttribute(this.expressionMap);\n relationIdAttribute.mapToProperty = mapToProperty;\n relationIdAttribute.relationName = relationName;\n if (typeof aliasNameOrOptions === \"string\")\n relationIdAttribute.alias = aliasNameOrOptions;\n if (aliasNameOrOptions instanceof Object && aliasNameOrOptions.disableMixedMap)\n relationIdAttribute.disableMixedMap = true;\n relationIdAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationIdAttributes.push(relationIdAttribute);\n if (relationIdAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationIdAttribute.junctionAlias,\n metadata: relationIdAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Counts number of entities of entity's relation and maps the value into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationCountAndMap = function (mapToProperty, relationName, aliasName, queryBuilderFactory) {\n var relationCountAttribute = new RelationCountAttribute(this.expressionMap);\n relationCountAttribute.mapToProperty = mapToProperty;\n relationCountAttribute.relationName = relationName;\n relationCountAttribute.alias = aliasName;\n relationCountAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationCountAttributes.push(relationCountAttribute);\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias\n });\n if (relationCountAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias,\n metadata: relationCountAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Loads all relation ids for all relations of the selected entity.\n * All relation ids will be mapped to relation property themself.\n * If array of strings is given then loads only relation ids of the given properties.\n */\n SelectQueryBuilder.prototype.loadAllRelationIds = function (options) {\n var _this = this;\n this.expressionMap.mainAlias.metadata.relations.forEach(function (relation) {\n if (options !== undefined && options.relations !== undefined && options.relations.indexOf(relation.propertyPath) === -1)\n return;\n _this.loadRelationIdAndMap(_this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, _this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, options);\n });\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Sets HAVING condition in the query builder.\n * If you had previously HAVING expression defined,\n * calling this function will override previously set HAVING conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.having = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"simple\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"and\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"or\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Sets GROUP BY condition in the query builder.\n * If you had previously GROUP BY expression defined,\n * calling this function will override previously set GROUP BY conditions.\n */\n SelectQueryBuilder.prototype.groupBy = function (groupBy) {\n if (groupBy) {\n this.expressionMap.groupBys = [groupBy];\n }\n else {\n this.expressionMap.groupBys = [];\n }\n return this;\n };\n /**\n * Adds GROUP BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addGroupBy = function (groupBy) {\n this.expressionMap.groupBys.push(groupBy);\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SelectQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Set's LIMIT - maximum number of rows to be selected.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead take method instead.\n */\n SelectQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = this.normalizeNumber(limit);\n if (this.expressionMap.limit !== undefined && isNaN(this.expressionMap.limit))\n throw new Error(\"Provided \\\"limit\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Set's OFFSET - selection offset.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead skip method instead.\n */\n SelectQueryBuilder.prototype.offset = function (offset) {\n this.expressionMap.offset = this.normalizeNumber(offset);\n if (this.expressionMap.offset !== undefined && isNaN(this.expressionMap.offset))\n throw new Error(\"Provided \\\"offset\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets maximal number of entities to take.\n */\n SelectQueryBuilder.prototype.take = function (take) {\n this.expressionMap.take = this.normalizeNumber(take);\n if (this.expressionMap.take !== undefined && isNaN(this.expressionMap.take))\n throw new Error(\"Provided \\\"take\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets number of entities to skip.\n */\n SelectQueryBuilder.prototype.skip = function (skip) {\n this.expressionMap.skip = this.normalizeNumber(skip);\n if (this.expressionMap.skip !== undefined && isNaN(this.expressionMap.skip))\n throw new Error(\"Provided \\\"skip\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets locking mode.\n */\n SelectQueryBuilder.prototype.setLock = function (lockMode, lockVersion, lockTables) {\n this.expressionMap.lockMode = lockMode;\n this.expressionMap.lockVersion = lockVersion;\n this.expressionMap.lockTables = lockTables;\n return this;\n };\n /**\n * Disables the global condition of \"non-deleted\" for the entity with delete date columns.\n */\n SelectQueryBuilder.prototype.withDeleted = function () {\n this.expressionMap.withDeleted = true;\n return this;\n };\n /**\n * Gets first raw result returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawMany()];\n case 1: return [2 /*return*/, (_a.sent())[0]];\n }\n });\n });\n };\n /**\n * Gets all raw results returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n this.expressionMap.queryEntity = false;\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_1 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_1;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.getRawAndEntities = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_2;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets single entity returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results, result, metadata, actualVersion, actualVersion;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n result = results.entities[0];\n if (result && this.expressionMap.lockMode === \"optimistic\" && this.expressionMap.lockVersion) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (this.expressionMap.lockVersion instanceof Date) {\n actualVersion = metadata.updateDateColumn.getEntityValue(result);\n if (actualVersion.getTime() !== this.expressionMap.lockVersion.getTime())\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n else {\n actualVersion = metadata.versionColumn.getEntityValue(result);\n if (actualVersion !== this.expressionMap.lockVersion)\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Gets the first entity returned by execution of generated query builder sql or rejects the returned promise on error.\n */\n SelectQueryBuilder.prototype.getOneOrFail = function () {\n return __awaiter(this, void 0, void 0, function () {\n var entity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getOne()];\n case 1:\n entity = _a.sent();\n if (!entity) {\n throw new EntityNotFoundError(this.expressionMap.mainAlias.target, this);\n }\n return [2 /*return*/, entity];\n }\n });\n });\n };\n /**\n * Gets entities returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n return [2 /*return*/, results.entities];\n }\n });\n });\n };\n /**\n * Gets count - number of entities selected by sql generated by this query builder.\n * Count excludes all limitations set by setFirstResult and setMaxResults methods call.\n */\n SelectQueryBuilder.prototype.getCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_3, rollbackError_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_3 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_3 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_3;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns entities and overall entities count (without limitation).\n * This method is useful to build pagination.\n */\n SelectQueryBuilder.prototype.getManyAndCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, entitiesAndRaw, count, results, error_4, rollbackError_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n entitiesAndRaw = _a.sent();\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 5:\n count = _a.sent();\n results = [entitiesAndRaw.entities, count];\n if (!transactionStartedByUs) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/, results];\n case 8:\n error_4 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_4 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw error_4;\n case 13:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns raw data stream.\n */\n SelectQueryBuilder.prototype.stream = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, releaseFn, results, error_5, rollbackError_5;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.expressionMap.queryEntity = false;\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, , 11]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n releaseFn = function () {\n if (queryRunner !== _this.queryRunner) // means we created our own query runner\n return queryRunner.release();\n return;\n };\n results = queryRunner.stream(sql, parameters, releaseFn, releaseFn);\n if (!transactionStartedByUs) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n case 6:\n error_5 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n _b.label = 7;\n case 7:\n _b.trys.push([7, 9, , 10]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 8:\n _b.sent();\n return [3 /*break*/, 10];\n case 9:\n rollbackError_5 = _b.sent();\n return [3 /*break*/, 10];\n case 10: throw error_5;\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Enables or disables query result caching.\n */\n SelectQueryBuilder.prototype.cache = function (enabledOrMillisecondsOrId, maybeMilliseconds) {\n if (typeof enabledOrMillisecondsOrId === \"boolean\") {\n this.expressionMap.cache = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheDuration = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"string\" || typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheId = enabledOrMillisecondsOrId;\n }\n if (maybeMilliseconds) {\n this.expressionMap.cacheDuration = maybeMilliseconds;\n }\n return this;\n };\n /**\n * Sets extra options that can be used to configure how query builder works.\n */\n SelectQueryBuilder.prototype.setOption = function (option) {\n this.expressionMap.options.push(option);\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n SelectQueryBuilder.prototype.join = function (direction, entityOrProperty, aliasName, condition, parameters, mapToProperty, isMappingMany) {\n this.setParameters(parameters || {});\n var joinAttribute = new JoinAttribute(this.connection, this.expressionMap);\n joinAttribute.direction = direction;\n joinAttribute.mapToProperty = mapToProperty;\n joinAttribute.isMappingMany = isMappingMany;\n joinAttribute.entityOrProperty = entityOrProperty; // relationName\n joinAttribute.condition = condition; // joinInverseSideCondition\n // joinAttribute.junctionAlias = joinAttribute.relation.isOwning ? parentAlias + \"_\" + destinationTableAlias : destinationTableAlias + \"_\" + parentAlias;\n this.expressionMap.joinAttributes.push(joinAttribute);\n if (joinAttribute.metadata) {\n if (joinAttribute.metadata.deleteDateColumn && !this.expressionMap.withDeleted) {\n var conditionDeleteColumn = aliasName + \".\" + joinAttribute.metadata.deleteDateColumn.propertyName + \" IS NULL\";\n joinAttribute.condition += joinAttribute.condition ? \" AND \" + conditionDeleteColumn : \"\" + conditionDeleteColumn;\n }\n // todo: find and set metadata right there?\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n metadata: joinAttribute.metadata\n });\n if (joinAttribute.relation && joinAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"join\",\n name: joinAttribute.junctionAlias,\n metadata: joinAttribute.relation.junctionEntityMetadata\n });\n }\n }\n else {\n var subQuery = \"\";\n if (entityOrProperty instanceof Function) {\n var subQueryBuilder = entityOrProperty(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n subQuery = subQueryBuilder.getQuery();\n }\n else {\n subQuery = entityOrProperty;\n }\n var isSubQuery = entityOrProperty instanceof Function || entityOrProperty.substr(0, 1) === \"(\" && entityOrProperty.substr(-1) === \")\";\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n tablePath: isSubQuery === false ? entityOrProperty : undefined,\n subQuery: isSubQuery === true ? subQuery : undefined,\n });\n }\n };\n /**\n * Creates \"SELECT FROM\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectExpression = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Cannot build query because main alias is not set (call qb#from method)\");\n // todo throw exception if selects or from is missing\n var allSelects = [];\n var excludedSelects = [];\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n allSelects.push.apply(allSelects, __spreadArray([], __read(this.buildEscapedEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(this.findEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n }\n // add selects from joins\n this.expressionMap.joinAttributes\n .forEach(function (join) {\n if (join.metadata) {\n allSelects.push.apply(allSelects, __spreadArray([], __read(_this.buildEscapedEntityColumnSelects(join.alias.name, join.metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(_this.findEntityColumnSelects(join.alias.name, join.metadata))));\n }\n else {\n var hasMainAlias = _this.expressionMap.selects.some(function (select) { return select.selection === join.alias.name; });\n if (hasMainAlias) {\n allSelects.push({ selection: _this.escape(join.alias.name) + \".*\" });\n var excludedSelect = _this.expressionMap.selects.find(function (select) { return select.selection === join.alias.name; });\n excludedSelects.push(excludedSelect);\n }\n }\n });\n // add all other selects\n this.expressionMap.selects\n .filter(function (select) { return excludedSelects.indexOf(select) === -1; })\n .forEach(function (select) { return allSelects.push({ selection: _this.replacePropertyNames(select.selection), aliasName: select.aliasName }); });\n // if still selection is empty, then simply set it to all (*)\n if (allSelects.length === 0)\n allSelects.push({ selection: \"*\" });\n var lock = \"\";\n if (this.connection.driver instanceof SqlServerDriver) {\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n lock = \" WITH (HOLDLOCK, ROWLOCK)\";\n break;\n case \"pessimistic_write\":\n lock = \" WITH (UPDLOCK, ROWLOCK)\";\n break;\n case \"dirty_read\":\n lock = \" WITH (NOLOCK)\";\n break;\n }\n }\n // create a selection query\n var froms = this.expressionMap.aliases\n .filter(function (alias) { return alias.type === \"from\" && (alias.tablePath || alias.subQuery); })\n .map(function (alias) {\n if (alias.subQuery)\n return alias.subQuery + \" \" + _this.escape(alias.name);\n return _this.getTableName(alias.tablePath) + \" \" + _this.escape(alias.name);\n });\n var select = this.createSelectDistinctExpression();\n var selection = allSelects.map(function (select) { return select.selection + (select.aliasName ? \" AS \" + _this.escape(select.aliasName) : \"\"); }).join(\", \");\n return select + selection + \" FROM \" + froms.join(\", \") + lock;\n };\n /**\n * Creates select | select distinct part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectDistinctExpression = function () {\n var _this = this;\n var _a = this.expressionMap, selectDistinct = _a.selectDistinct, selectDistinctOn = _a.selectDistinctOn;\n var driver = this.connection.driver;\n var select = \"SELECT \";\n if (driver instanceof PostgresDriver && selectDistinctOn.length > 0) {\n var selectDistinctOnMap = selectDistinctOn.map(function (on) { return _this.replacePropertyNames(on); }).join(\", \");\n select = \"SELECT DISTINCT ON (\" + selectDistinctOnMap + \") \";\n }\n else if (selectDistinct) {\n select = \"SELECT DISTINCT \";\n }\n return select;\n };\n /**\n * Creates \"JOIN\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createJoinExpression = function () {\n // examples:\n // select from owning side\n // qb.select(\"post\")\n // .leftJoinAndSelect(\"post.category\", \"category\");\n // select from non-owning side\n // qb.select(\"category\")\n // .leftJoinAndSelect(\"category.post\", \"post\");\n var _this = this;\n var joins = this.expressionMap.joinAttributes.map(function (joinAttr) {\n var relation = joinAttr.relation;\n var destinationTableName = joinAttr.tablePath;\n var destinationTableAlias = joinAttr.alias.name;\n var appendedCondition = joinAttr.condition ? \" AND (\" + joinAttr.condition + \")\" : \"\";\n var parentAlias = joinAttr.parentAlias;\n // if join was build without relation (e.g. without \"post.category\") then it means that we have direct\n // table to join, without junction table involved. This means we simply join direct table.\n if (!parentAlias || !relation) {\n var destinationJoin = joinAttr.alias.subQuery ? joinAttr.alias.subQuery : _this.getTableName(destinationTableName);\n return \" \" + joinAttr.direction + \" JOIN \" + destinationJoin + \" \" + _this.escape(destinationTableAlias) +\n (joinAttr.condition ? \" ON \" + _this.replacePropertyNames(joinAttr.condition) : \"\");\n }\n // if real entity relation is involved\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n // JOIN `category` `category` ON `category`.`id` = `post`.`categoryId`\n var condition = relation.joinColumns.map(function (joinColumn) {\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n // JOIN `post` `post` ON `post`.`categoryId` = `category`.`id`\n var condition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n if (relation.inverseEntityMetadata.tableType === \"entity-child\" && relation.inverseEntityMetadata.discriminatorColumn) {\n appendedCondition += \" AND \" + destinationTableAlias + \".\" + relation.inverseEntityMetadata.discriminatorColumn.databaseName + \"='\" + relation.inverseEntityMetadata.discriminatorValue + \"'\";\n }\n return destinationTableAlias + \".\" + relation.inverseRelation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else { // means many-to-many\n var junctionTableName = relation.junctionEntityMetadata.tablePath;\n var junctionAlias_1 = joinAttr.junctionAlias;\n var junctionCondition = \"\", destinationCondition = \"\";\n if (relation.isOwning) {\n junctionCondition = relation.joinColumns.map(function (joinColumn) {\n // `post_category`.`postId` = `post`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseJoinColumns.map(function (joinColumn) {\n // `category`.`id` = `post_category`.`categoryId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n else {\n junctionCondition = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) {\n // `post_category`.`categoryId` = `category`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n // `post`.`id` = `post_category`.`postId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(junctionTableName) + \" \" + _this.escape(junctionAlias_1) + \" ON \" + _this.replacePropertyNames(junctionCondition) +\n \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(destinationCondition + appendedCondition);\n }\n });\n return joins.join(\" \");\n };\n /**\n * Creates \"GROUP BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createGroupByExpression = function () {\n if (!this.expressionMap.groupBys || !this.expressionMap.groupBys.length)\n return \"\";\n return \" GROUP BY \" + this.replacePropertyNames(this.expressionMap.groupBys.join(\", \"));\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.allOrderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" and \"OFFSET\" parts of SQL query.\n */\n SelectQueryBuilder.prototype.createLimitOffsetExpression = function () {\n // in the case if nothing is joined in the query builder we don't need to make two requests to get paginated results\n // we can use regular limit / offset, that's why we add offset and limit construction here based on skip and take values\n var offset = this.expressionMap.offset, limit = this.expressionMap.limit;\n if (!offset && !limit && this.expressionMap.joinAttributes.length === 0) {\n offset = this.expressionMap.skip;\n limit = this.expressionMap.take;\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // Due to a limitation in SQL Server's parser implementation it does not support using\n // OFFSET or FETCH NEXT without an ORDER BY clause being provided. In cases where the\n // user does not request one we insert a dummy ORDER BY that does nothing and should\n // have no effect on the query planner or on the order of the results returned.\n // https://dba.stackexchange.com/a/193799\n var prefix = \"\";\n if ((limit || offset) && Object.keys(this.expressionMap.allOrderBys).length <= 0) {\n prefix = \" ORDER BY (SELECT NULL)\";\n }\n if (limit && offset)\n return prefix + \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return prefix + \" OFFSET 0 ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return prefix + \" OFFSET \" + offset + \" ROWS\";\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n throw new OffsetWithoutLimitNotSupportedError();\n }\n else if (this.connection.driver instanceof AbstractSqliteDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" LIMIT -1 OFFSET \" + offset;\n }\n else if (this.connection.driver instanceof OracleDriver) {\n if (limit && offset)\n return \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return \" FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return \" OFFSET \" + offset + \" ROWS\";\n }\n else {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" OFFSET \" + offset;\n }\n return \"\";\n };\n /**\n * Creates \"LOCK\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createLockExpression = function () {\n var driver = this.connection.driver;\n var lockTablesClause = \"\";\n if (this.expressionMap.lockTables) {\n if (!(driver instanceof PostgresDriver)) {\n throw new Error(\"Lock tables not supported in selected driver\");\n }\n if (this.expressionMap.lockTables.length < 1) {\n throw new Error(\"lockTables cannot be an empty array\");\n }\n lockTablesClause = \" OF \" + this.expressionMap.lockTables.join(\", \");\n }\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n return \" LOCK IN SHARE MODE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR SHARE\" + lockTablesClause;\n }\n else if (driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver || driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause;\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_partial_write\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" SKIP LOCKED\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE SKIP LOCKED\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write_or_fail\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" NOWAIT\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE NOWAIT\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"for_no_key_update\":\n if (driver instanceof PostgresDriver) {\n return \" FOR NO KEY UPDATE\" + lockTablesClause;\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n default:\n return \"\";\n }\n };\n /**\n * Creates \"HAVING\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createHavingExpression = function () {\n var _this = this;\n if (!this.expressionMap.havings || !this.expressionMap.havings.length)\n return \"\";\n var conditions = this.expressionMap.havings.map(function (having, index) {\n switch (having.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(having.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(having.condition);\n default:\n return _this.replacePropertyNames(having.condition);\n }\n }).join(\" \");\n if (!conditions.length)\n return \"\";\n return \" HAVING \" + conditions;\n };\n SelectQueryBuilder.prototype.buildEscapedEntityColumnSelects = function (aliasName, metadata) {\n var _this = this;\n var hasMainAlias = this.expressionMap.selects.some(function (select) { return select.selection === aliasName; });\n var columns = [];\n if (hasMainAlias) {\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) { return column.isSelect === true; }))));\n }\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) {\n return _this.expressionMap.selects.some(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n }))));\n // if user used partial selection and did not select some primary columns which are required to be selected\n // we select those primary columns and mark them as \"virtual\". Later virtual column values will be removed from final entity\n // to make entity contain exactly what user selected\n if (columns.length === 0) // however not in the case when nothing (even partial) was selected from this target (for example joins without selection)\n return [];\n var nonSelectedPrimaryColumns = this.expressionMap.queryEntity ? metadata.primaryColumns.filter(function (primaryColumn) { return columns.indexOf(primaryColumn) === -1; }) : [];\n var allColumns = __spreadArray(__spreadArray([], __read(columns)), __read(nonSelectedPrimaryColumns));\n return allColumns.map(function (column) {\n var selection = _this.expressionMap.selects.find(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n var selectionPath = _this.escape(aliasName) + \".\" + _this.escape(column.databaseName);\n if (_this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var asText = useLegacy ? \"AsText\" : \"ST_AsText\";\n selectionPath = asText + \"(\" + selectionPath + \")\";\n }\n if (_this.connection.driver instanceof PostgresDriver)\n // cast to JSON to trigger parsing in the driver\n if (column.precision) {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \", \" + column.precision + \")::json\";\n }\n else {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \")::json\";\n }\n if (_this.connection.driver instanceof SqlServerDriver)\n selectionPath = selectionPath + \".ToString()\";\n }\n return {\n selection: selectionPath,\n aliasName: selection && selection.aliasName ? selection.aliasName : DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName),\n // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!\n virtual: selection ? selection.virtual === true : (hasMainAlias ? false : true),\n };\n });\n };\n SelectQueryBuilder.prototype.findEntityColumnSelects = function (aliasName, metadata) {\n var mainSelect = this.expressionMap.selects.find(function (select) { return select.selection === aliasName; });\n if (mainSelect)\n return [mainSelect];\n return this.expressionMap.selects.filter(function (select) {\n return metadata.columns.some(function (column) { return select.selection === aliasName + \".\" + column.propertyPath; });\n });\n };\n SelectQueryBuilder.prototype.computeCountExpression = function () {\n var _this = this;\n var mainAlias = this.expressionMap.mainAlias.name; // todo: will this work with \"fromTableName\"?\n var metadata = this.expressionMap.mainAlias.metadata;\n var primaryColumns = metadata.primaryColumns;\n var distinctAlias = this.escape(mainAlias);\n // If we aren't doing anything that will create a join, we can use a simpler `COUNT` instead\n // so we prevent poor query patterns in the most likely cases\n if (this.expressionMap.joinAttributes.length === 0 &&\n this.expressionMap.relationIdAttributes.length === 0 &&\n this.expressionMap.relationCountAttributes.length === 0) {\n return \"COUNT(1)\";\n }\n // For everything else, we'll need to do some hackery to get the correct count values.\n if (this.connection.driver instanceof CockroachDriver || this.connection.driver instanceof PostgresDriver) {\n // Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function\n // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \"))\";\n }\n if (this.connection.driver instanceof MysqlDriver) {\n // MySQL & MariaDB can pass multiple parameters to the `DISTINCT` language construct\n // https://mariadb.com/kb/en/count-distinct/\n return \"COUNT(DISTINCT \" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \")\";\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // SQL Server has gotta be different from everyone else. They don't support\n // distinct counting multiple columns & they don't have the same operator\n // characteristic for concatenating, so we gotta use the `CONCAT` function.\n // However, If it's exactly 1 column we can omit the `CONCAT` for better performance.\n var columnsExpression = primaryColumns.map(function (primaryColumn) { return distinctAlias + \".\" + _this.escape(primaryColumn.databaseName); }).join(\", '|;|', \");\n if (primaryColumns.length === 1) {\n return \"COUNT(DISTINCT(\" + columnsExpression + \"))\";\n }\n return \"COUNT(DISTINCT(CONCAT(\" + columnsExpression + \")))\";\n }\n // If all else fails, fall back to a `COUNT` and `DISTINCT` across all the primary columns concatenated.\n // Per the SQL spec, this is the canonical string concatenation mechanism which is most\n // likely to work across servers implementing the SQL standard.\n // Please note, if there is only one primary column that the concatenation does not occur in this\n // query and the query is a standard `COUNT DISTINCT` in that case.\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\" || '|;|' || \") +\n \"))\";\n };\n SelectQueryBuilder.prototype.executeCountQuery = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var countSql, results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n countSql = this.computeCountExpression();\n return [4 /*yield*/, this.clone()\n .orderBy()\n .groupBy()\n .offset(undefined)\n .limit(undefined)\n .skip(undefined)\n .take(undefined)\n .select(countSql, \"cnt\")\n .setOption(\"disable-global-order\")\n .loadRawResults(queryRunner)];\n case 1:\n results = _a.sent();\n if (!results || !results[0] || !results[0][\"cnt\"])\n return [2 /*return*/, 0];\n return [2 /*return*/, parseInt(results[0][\"cnt\"])];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.executeEntitiesAndRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, relationIdLoader, relationCountLoader, relationIdMetadataTransformer, relationCountMetadataTransformer, rawResults, entities, _a, selects, orderBys_1, metadata_1, mainAliasName_1, querySelects, condition, parameters_1, alias_1, ids, areAllNumbers, rawRelationIdResults, rawRelationCountResults, transformer, broadcastResult;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Alias is not set. Use \\\"from\\\" method to set an alias.\");\n if ((this.expressionMap.lockMode === \"pessimistic_read\" || this.expressionMap.lockMode === \"pessimistic_write\" || this.expressionMap.lockMode === \"pessimistic_partial_write\" || this.expressionMap.lockMode === \"pessimistic_write_or_fail\" || this.expressionMap.lockMode === \"for_no_key_update\") && !queryRunner.isTransactionActive)\n throw new PessimisticLockTransactionRequiredError();\n if (this.expressionMap.lockMode === \"optimistic\") {\n metadata = this.expressionMap.mainAlias.metadata;\n if (!metadata.versionColumn && !metadata.updateDateColumn)\n throw new NoVersionOrUpdateDateColumnError(metadata.name);\n }\n relationIdLoader = new RelationIdLoader(this.connection, queryRunner, this.expressionMap.relationIdAttributes);\n relationCountLoader = new RelationCountLoader(this.connection, queryRunner, this.expressionMap.relationCountAttributes);\n relationIdMetadataTransformer = new RelationIdMetadataToAttributeTransformer(this.expressionMap);\n relationIdMetadataTransformer.transform();\n relationCountMetadataTransformer = new RelationCountMetadataToAttributeTransformer(this.expressionMap);\n relationCountMetadataTransformer.transform();\n rawResults = [], entities = [];\n if (!((this.expressionMap.skip || this.expressionMap.take) && this.expressionMap.joinAttributes.length > 0)) return [3 /*break*/, 4];\n _a = __read(this.createOrderByCombinedWithSelectExpression(\"distinctAlias\"), 2), selects = _a[0], orderBys_1 = _a[1];\n metadata_1 = this.expressionMap.mainAlias.metadata;\n mainAliasName_1 = this.expressionMap.mainAlias.name;\n querySelects = metadata_1.primaryColumns.map(function (primaryColumn) {\n var distinctAlias = _this.escape(\"distinctAlias\");\n var columnAlias = _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, mainAliasName_1, primaryColumn.databaseName));\n if (!orderBys_1[columnAlias]) // make sure we aren't overriding user-defined order in inverse direction\n orderBys_1[columnAlias] = \"ASC\";\n var alias = DriverUtils.buildColumnAlias(_this.connection.driver, \"ids_\" + mainAliasName_1, primaryColumn.databaseName);\n return distinctAlias + \".\" + columnAlias + \" as \\\"\" + alias + \"\\\"\";\n });\n return [4 /*yield*/, new SelectQueryBuilder(this.connection, queryRunner)\n .select(\"DISTINCT \" + querySelects.join(\", \"))\n .addSelect(selects)\n .from(\"(\" + this.clone().orderBy().getQuery() + \")\", \"distinctAlias\")\n .offset(this.expressionMap.skip)\n .limit(this.expressionMap.take)\n .orderBy(orderBys_1)\n .cache(this.expressionMap.cache ? this.expressionMap.cache : this.expressionMap.cacheId, this.expressionMap.cacheDuration)\n .setParameters(this.getParameters())\n .setNativeParameters(this.expressionMap.nativeParameters)\n .getRawMany()];\n case 1:\n rawResults = _b.sent();\n if (!(rawResults.length > 0)) return [3 /*break*/, 3];\n condition = \"\";\n parameters_1 = {};\n if (metadata_1.hasMultiplePrimaryKeys) {\n condition = rawResults.map(function (result, index) {\n return metadata_1.primaryColumns.map(function (primaryColumn) {\n var paramKey = \"orm_distinct_ids_\" + index + \"_\" + primaryColumn.databaseName;\n parameters_1[paramKey] = result[\"ids_\" + mainAliasName_1 + \"_\" + primaryColumn.databaseName];\n return mainAliasName_1 + \".\" + primaryColumn.propertyPath + \"=:\" + paramKey;\n }).join(\" AND \");\n }).join(\" OR \");\n }\n else {\n alias_1 = DriverUtils.buildColumnAlias(this.connection.driver, \"ids_\" + mainAliasName_1, metadata_1.primaryColumns[0].databaseName);\n ids = rawResults.map(function (result) { return result[alias_1]; });\n areAllNumbers = ids.every(function (id) { return typeof id === \"number\"; });\n if (areAllNumbers) {\n // fixes #190. if all numbers then its safe to perform query without parameter\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (\" + ids.join(\", \") + \")\";\n }\n else {\n parameters_1[\"orm_distinct_ids\"] = ids;\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (:...orm_distinct_ids)\";\n }\n }\n return [4 /*yield*/, this.clone()\n .mergeExpressionMap({ extraAppendedAndWhereCondition: condition })\n .setParameters(parameters_1)\n .loadRawResults(queryRunner)];\n case 2:\n rawResults = _b.sent();\n _b.label = 3;\n case 3: return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 5:\n rawResults = _b.sent();\n _b.label = 6;\n case 6:\n if (!(rawResults.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, relationIdLoader.load(rawResults)];\n case 7:\n rawRelationIdResults = _b.sent();\n return [4 /*yield*/, relationCountLoader.load(rawResults)];\n case 8:\n rawRelationCountResults = _b.sent();\n transformer = new RawSqlResultsToEntityTransformer(this.expressionMap, this.connection.driver, rawRelationIdResults, rawRelationCountResults, this.queryRunner);\n entities = transformer.transform(rawResults, this.expressionMap.mainAlias);\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastLoadEventsForAll(broadcastResult, this.expressionMap.mainAlias.metadata, entities);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, {\n raw: rawResults,\n entities: entities,\n }];\n }\n });\n });\n };\n SelectQueryBuilder.prototype.createOrderByCombinedWithSelectExpression = function (parentAlias) {\n var _this = this;\n // if table has a default order then apply it\n var orderBys = this.expressionMap.allOrderBys;\n var selectString = Object.keys(orderBys)\n .map(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n return _this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName));\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; }))\n return _this.escape(parentAlias) + \".\" + orderCriteria;\n return \"\";\n }\n })\n .join(\", \");\n var orderByObject = {};\n Object.keys(orderBys).forEach(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n orderByObject[_this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName))] = orderBys[orderCriteria];\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; })) {\n orderByObject[_this.escape(parentAlias) + \".\" + orderCriteria] = orderBys[orderCriteria];\n }\n else {\n orderByObject[orderCriteria] = orderBys[orderCriteria];\n }\n }\n });\n return [selectString, orderByObject];\n };\n /**\n * Loads raw results from the database.\n */\n SelectQueryBuilder.prototype.loadRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryId, cacheOptions, savedQueryResultCacheOptions, results;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryId = sql + \" -- PARAMETERS: \" + JSON.stringify(parameters);\n cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n savedQueryResultCacheOptions = undefined;\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.queryResultCache.getFromCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000\n }, queryRunner)];\n case 1:\n savedQueryResultCacheOptions = _b.sent();\n if (savedQueryResultCacheOptions && !this.connection.queryResultCache.isExpired(savedQueryResultCacheOptions))\n return [2 /*return*/, JSON.parse(savedQueryResultCacheOptions.result)];\n _b.label = 2;\n case 2: return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 3:\n results = _b.sent();\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 5];\n return [4 /*yield*/, this.connection.queryResultCache.storeInCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n time: new Date().getTime(),\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000,\n result: JSON.stringify(results)\n }, savedQueryResultCacheOptions, queryRunner)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n }\n });\n });\n };\n /**\n * Merges into expression map given expression map properties.\n */\n SelectQueryBuilder.prototype.mergeExpressionMap = function (expressionMap) {\n ObjectUtils.assign(this.expressionMap, expressionMap);\n return this;\n };\n /**\n * Normalizes a give number - converts to int if possible.\n */\n SelectQueryBuilder.prototype.normalizeNumber = function (num) {\n if (typeof num === \"number\" || num === undefined || num === null)\n return num;\n return Number(num);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n SelectQueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner(\"slave\");\n };\n return SelectQueryBuilder;\n}(QueryBuilder));\nexport { SelectQueryBuilder };\n\n//# sourceMappingURL=SelectQueryBuilder.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\n/**\n * Stores all join relation id attributes which will be used to build a JOIN query.\n */\nvar RelationIdAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdAttribute(queryExpressionMap, relationIdAttribute) {\n this.queryExpressionMap = queryExpressionMap;\n /**\n * Indicates if relation id should NOT be loaded as id map.\n */\n this.disableMixedMap = false;\n ObjectUtils.assign(this, relationIdAttribute || {});\n }\n Object.defineProperty(RelationIdAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(0, this.relationName.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(this.relationName.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n var relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + this.relationPropertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rid\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionMetadata\", {\n /**\n * Metadata of the joined entity.\n * If extra condition without entity was joined, then it will return undefined.\n */\n get: function () {\n return this.relation.junctionEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n return this.mapToProperty.substr(0, this.mapToProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyPropertyPath\", {\n get: function () {\n return this.mapToProperty.substr(this.mapToProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n return RelationIdAttribute;\n}());\nexport { RelationIdAttribute };\n\n//# sourceMappingURL=RelationIdAttribute.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\nvar RelationCountAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountAttribute(expressionMap, relationCountAttribute) {\n this.expressionMap = expressionMap;\n ObjectUtils.assign(this, relationCountAttribute || {});\n }\n Object.defineProperty(RelationCountAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relationProperty\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n return this.relationName.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"junctionAlias\", {\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rc\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], propertyPath = _a[1];\n var relationOwnerSelection = this.expressionMap.findAliasByName(parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + propertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var parentAlias = this.relationName.split(\".\")[0];\n var selection = this.expressionMap.findAliasByName(parentAlias);\n return selection.metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return RelationCountAttribute;\n}());\nexport { RelationCountAttribute };\n\n//# sourceMappingURL=RelationCountAttribute.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Updates entity with returning results in the entity insert and update operations.\n */\nvar ReturningResultsEntityUpdator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReturningResultsEntityUpdator(queryRunner, expressionMap) {\n this.queryRunner = queryRunner;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates entities with a special columns after updation query execution.\n */\n ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return __awaiter(_this, void 0, void 0, function () {\n var result, returningColumns, updationColumns, entityId, loadedReturningColumns;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 /*break*/, 1];\n if (this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(updateResult.raw) && this.expressionMap.extraReturningColumns.length > 0) {\n updateResult.raw = updateResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n result = Array.isArray(updateResult.raw) ? updateResult.raw[entityIndex] : updateResult.raw;\n returningColumns = this.queryRunner.connection.driver.createGeneratedMap(metadata, result);\n if (returningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, returningColumns);\n updateResult.generatedMaps.push(returningColumns);\n }\n return [3 /*break*/, 3];\n case 1:\n updationColumns = this.getUpdationReturningColumns();\n if (!(updationColumns.length > 0)) return [3 /*break*/, 3];\n entityId = this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(this.getUpdationReturningColumns().map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityId)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getOne()];\n case 2:\n loadedReturningColumns = _a.sent();\n if (loadedReturningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, loadedReturningColumns);\n updateResult.generatedMaps.push(loadedReturningColumns);\n }\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates entities with a special columns after insertion query execution.\n */\n ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, insertionColumns, generatedMaps, entityIds, returningResult_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n insertionColumns = this.getInsertionReturningColumns();\n generatedMaps = entities.map(function (entity, entityIndex) {\n if (_this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(insertResult.raw) && _this.expressionMap.extraReturningColumns.length > 0) {\n insertResult.raw = insertResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n // get all values generated by a database for us\n var result = Array.isArray(insertResult.raw) ? insertResult.raw[entityIndex] : insertResult.raw;\n var generatedMap = _this.queryRunner.connection.driver.createGeneratedMap(metadata, result, entityIndex, entities.length) || {};\n // if database does not support uuid generation we need to get uuid values\n // generated by orm and set them to the generatedMap\n if (_this.queryRunner.connection.driver.isUUIDGenerationSupported() === false) {\n metadata.generatedColumns.forEach(function (generatedColumn) {\n if (generatedColumn.generationStrategy === \"uuid\") {\n // uuid can be defined by user in a model, that's why first we get it\n var uuid = generatedColumn.getEntityValue(entity);\n if (!uuid) // if it was not defined by a user then InsertQueryBuilder generates it by its own, get this generated uuid value\n uuid = _this.expressionMap.nativeParameters[\"uuid_\" + generatedColumn.databaseName + entityIndex];\n OrmUtils.mergeDeep(generatedMap, generatedColumn.createValueMap(uuid));\n }\n });\n }\n _this.queryRunner.manager.merge(metadata.target, entity, generatedMap); // todo: this should not be here, but problem with below line\n return generatedMap;\n });\n if (!(this.queryRunner.connection.driver.isReturningSqlSupported() === false && insertionColumns.length > 0)) return [3 /*break*/, 2];\n entityIds = entities.map(function (entity) {\n var entityId = metadata.getEntityIdMap(entity);\n // We have to check for an empty `entityId` - if we don't, the query against the database\n // effectively drops the `where` clause entirely and the first record will be returned -\n // not what we want at all.\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return entityId;\n });\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(insertionColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityIds)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getMany()];\n case 1:\n returningResult_1 = _a.sent();\n entities.forEach(function (entity, entityIndex) {\n _this.queryRunner.manager.merge(metadata.target, generatedMaps[entityIndex], returningResult_1[entityIndex]);\n });\n _a.label = 2;\n case 2:\n entities.forEach(function (entity, entityIndex) {\n var entityId = metadata.getEntityIdMap(entity);\n insertResult.identifiers.push(entityId);\n insertResult.generatedMaps.push(generatedMaps[entityIndex]);\n _this.queryRunner.manager.merge(_this.expressionMap.mainAlias.metadata.target, entity, generatedMaps[entityIndex], generatedMaps[entityIndex]); // todo: why twice?!\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Columns we need to be returned from the database when we insert entity.\n */\n ReturningResultsEntityUpdator.prototype.getInsertionReturningColumns = function () {\n // for databases which support returning statement we need to return extra columns like id\n // for other databases we don't need to return id column since its returned by a driver already\n var needToCheckGenerated = this.queryRunner.connection.driver.isReturningSqlSupported();\n // filter out the columns of which we need database inserted values to update our entity\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.default !== undefined ||\n (needToCheckGenerated && column.isGenerated) ||\n column.isCreateDate ||\n column.isUpdateDate ||\n column.isDeleteDate ||\n column.isVersion;\n });\n };\n /**\n * Columns we need to be returned from the database when we update entity.\n */\n ReturningResultsEntityUpdator.prototype.getUpdationReturningColumns = function () {\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.isUpdateDate || column.isVersion;\n });\n };\n return ReturningResultsEntityUpdator;\n}());\nexport { ReturningResultsEntityUpdator };\n\n//# sourceMappingURL=ReturningResultsEntityUpdator.js.map\n","var TableUtils = /** @class */ (function () {\n function TableUtils() {\n }\n TableUtils.createTableColumnOptions = function (columnMetadata, driver) {\n return {\n name: columnMetadata.databaseName,\n length: columnMetadata.length,\n width: columnMetadata.width,\n charset: columnMetadata.charset,\n collation: columnMetadata.collation,\n precision: columnMetadata.precision,\n scale: columnMetadata.scale,\n zerofill: columnMetadata.zerofill,\n unsigned: columnMetadata.unsigned,\n asExpression: columnMetadata.asExpression,\n generatedType: columnMetadata.generatedType,\n default: driver.normalizeDefault(columnMetadata),\n onUpdate: columnMetadata.onUpdate,\n comment: columnMetadata.comment,\n isGenerated: columnMetadata.isGenerated,\n generationStrategy: columnMetadata.generationStrategy,\n isNullable: columnMetadata.isNullable,\n type: driver.normalizeType(columnMetadata),\n isPrimary: columnMetadata.isPrimary,\n isUnique: driver.normalizeIsUnique(columnMetadata),\n isArray: columnMetadata.isArray || false,\n enum: columnMetadata.enum ? columnMetadata.enum.map(function (val) { return val + \"\"; }) : columnMetadata.enum,\n enumName: columnMetadata.enumName,\n spatialFeatureType: columnMetadata.spatialFeatureType,\n srid: columnMetadata.srid\n };\n };\n return TableUtils;\n}());\nexport { TableUtils };\n\n//# sourceMappingURL=TableUtils.js.map\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSite = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"../Site/LoginSite\");\nconst NotAllowedSite_1 = require(\"../Site/NotAllowedSite\");\nclass UserSite extends client_1.DelegateSite {\n constructor(site, access, allowOfflineAccess) {\n super(site);\n this._access = access;\n this._allowOfflineAccess = shared_1.Helper.nonNull(allowOfflineAccess, false);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().waitForGetMe();\n if (yield this._checkRights()) {\n let res = yield _super.onConstruct.call(this, constructParameters);\n UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => __awaiter(this, void 0, void 0, function* () {\n yield this._checkRights();\n }), false);\n return res;\n }\n });\n }\n _checkRights() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(UserManager_1.UserManager.getInstance().hasAccess(this._access) || (this._allowOfflineAccess && (yield UserManager_1.UserManager.getInstance().hasOfflineAccess(this._access))))) {\n // if (this.isShowing() && !this.isDestroying()) {\n // await this.startSite(NotAllowedSite);\n // }\n if (UserManager_1.UserManager.getInstance().isOnline() && !UserManager_1.UserManager.getInstance().isLoggedIn() && !(this._site instanceof LoginSite_1.LoginSite)) {\n this.startSite(LoginSite_1.LoginSite, {\n deepLink: this._site._siteManager.getDeepLinkFor(this._site),\n args: this._site.getParameters()\n });\n }\n else if (this._site._siteManager.getCurrentSite() === this._site && !this.isDestroying()) {\n new client_1.Toast(\"wrong rights\").show();\n yield this.startSite(NotAllowedSite_1.NotAllowedSite);\n }\n if (!this.isDestroying()) {\n yield this.finish();\n }\n return false;\n }\n return true;\n });\n }\n onStart(args) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield this._checkRights()) {\n yield _super.onStart.call(this, args);\n }\n });\n }\n}\nexports.UserSite = UserSite;\n//# sourceMappingURL=UserSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Translator\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncClientDb = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst ClientModel_1 = require(\"./ClientModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst ClientPartialModel_1 = require(\"./ClientPartialModel\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass EasySyncClientDb extends cordova_sites_database_1.BaseDatabase {\n constructor(dbName) {\n super(dbName || \"EasySync\");\n }\n _createConnectionOptions(database) {\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel, ClientModel_1.ClientModel);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel, ClientPartialModel_1.ClientPartialModel);\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel.prototype, ClientModel_1.ClientModel.prototype);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel.prototype, ClientPartialModel_1.ClientPartialModel.prototype);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium, ClientFileMedium_1.ClientFileMedium);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium.prototype, ClientFileMedium_1.ClientFileMedium.prototype);\n let options = super._createConnectionOptions(database);\n options[\"migrationsTableName\"] = \"migrations\";\n return options;\n }\n}\nexports.EasySyncClientDb = EasySyncClientDb;\nEasySyncClientDb.BASE_MODEL = null;\nclient_1.App.addInitialization(() => __awaiter(void 0, void 0, void 0, function* () {\n yield EasySyncClientDb.getInstance()._connectionPromise.catch(function (e) {\n if (typeof EasySyncClientDb.errorListener === \"function\") {\n return EasySyncClientDb.errorListener(...arguments);\n }\n else {\n throw (e);\n }\n });\n}));\n//# sourceMappingURL=EasySyncClientDb.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LastSyncDates = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass LastSyncDates extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this.model = \"\";\n this.lastSynced = 0;\n this.where = {};\n }\n getModel() {\n return this.model;\n }\n setModel(model) {\n this.model = model;\n }\n getLastSynced() {\n return this.lastSynced;\n }\n setLastSynced(lastSynced) {\n this.lastSynced = lastSynced;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"model\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, nullable: true };\n columns[\"lastSynced\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER, nullable: true };\n columns[\"where\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON };\n return columns;\n }\n}\nexports.LastSyncDates = LastSyncDates;\nLastSyncDates.SCHEMA_NAME = \"easy-sync-last-sync-dates\";\ncordova_sites_database_1.BaseDatabase.addModel(LastSyncDates);\n//# sourceMappingURL=LastSyncDates.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when a version check on an object that uses optimistic locking through a version field fails.\n */\nvar OptimisticLockVersionMismatchError = /** @class */ (function (_super) {\n __extends(OptimisticLockVersionMismatchError, _super);\n function OptimisticLockVersionMismatchError(entity, expectedVersion, actualVersion) {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockVersionMismatchError\";\n Object.setPrototypeOf(_this, OptimisticLockVersionMismatchError.prototype);\n _this.message = \"The optimistic lock on entity \" + entity + \" failed, version \" + expectedVersion + \" was expected, but is actually \" + actualVersion + \".\";\n return _this;\n }\n return OptimisticLockVersionMismatchError;\n}(Error));\nexport { OptimisticLockVersionMismatchError };\n\n//# sourceMappingURL=OptimisticLockVersionMismatchError.js.map\n","/**\n * Result object returned by InsertQueryBuilder execution.\n */\nvar InsertResult = /** @class */ (function () {\n function InsertResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n this.identifiers = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return InsertResult;\n}());\nexport { InsertResult };\n\n//# sourceMappingURL=InsertResult.js.map\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractSite = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Basisklasse für eine Seite\n */\nclass AbstractSite extends Context_1.Context {\n /**\n * Construktor für eine Seite, sollte überladen werden und view sollte definiert werden. Seitenkonstruktoren bekommen NUR den siteManager übergebn\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(view);\n this._isDestroying = false;\n this._isDestroying = false;\n //Promise und Resolver, welches erfüllt wird, wenn Seite beendet wird\n this._finishPromiseResolver = {\n resolve: null,\n reject: null\n };\n this._finishPromise = new Promise((resolve, reject) => {\n this._finishPromiseResolver = { resolve: resolve, reject: reject };\n });\n //Promise, welches erfüllt wird, wenn onConstruct-Promsise erfüllt wurde. Wird für onDestroy gebraucht\n this._onConstructPromise = null;\n this._parameters = {};\n this._result = null;\n this._siteManager = siteManager;\n this._title = {\n element: null,\n text: null\n };\n this._loadingSymbol = null;\n //Wird zum speichern der zugehörigen HistoryID genutzt\n this._historyId = null;\n }\n getTitle() {\n return this._title;\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n this.setParameters(Helper_1.Helper.nonNull(constructParameters, {}));\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_CONSTRUCT, {\n site: this, params: constructParameters\n });\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n this._updateTitle();\n this.updateUrl(this._parameters);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_START, {\n site: this, params: pauseArguments\n });\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_VIEW_LOADED, {\n site: this\n });\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_PAUSE, {\n site: this\n });\n return res;\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onDestroy.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_DESTROY, {\n site: this\n });\n return res;\n });\n }\n /**\n * Setzt den Titel der Website\n *\n * @param titleElement\n * @param title\n */\n setTitle(titleElement, title) {\n if (typeof titleElement === \"string\") {\n let args = title;\n title = titleElement;\n titleElement = Translator_1.Translator.makePersistentTranslation(title, args);\n }\n title = Helper_1.Helper.nonNull(title, titleElement.textContent);\n this._title = {\n element: titleElement,\n text: title\n };\n this._updateTitle();\n }\n setParameter(name, value) {\n this._parameters[name] = value;\n this.updateUrl(this._parameters);\n }\n setParameters(parameters) {\n this._parameters = parameters;\n this.updateUrl(this._parameters);\n }\n getParameters() {\n return this._parameters;\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._loadingSymbol)) {\n this._loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n let view = yield this.getViewPromise();\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n view.appendChild(this._loadingSymbol);\n }\n }\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n this._loadingSymbol.remove();\n this._loadingSymbol = null;\n }\n });\n }\n onBeforeUnload(e) {\n return null;\n }\n /**\n * Updatet den Title der Webseite\n * @protected\n */\n _updateTitle() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateTitle(this._title.text);\n }\n }\n updateUrl(args) {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateUrl(this, args);\n }\n }\n /**\n * Startet eine andere Seite mit den angegebenen Parametern\n *\n * @param site\n * @param args\n * @returns {*|Promise<*>}\n */\n startSite(site, args) {\n return this._siteManager.startSite(site, args);\n }\n /**\n * Alias für\n * this.startSite(...);\n * this.finish(...);\n *\n * @param site\n * @param args\n * @param result\n * @returns {*|Promise<*>}\n */\n finishAndStartSite(site, args, result) {\n let res = this.startSite(site, args);\n this.finish(result);\n return res;\n }\n /**\n * Beendet die aktuelle Seite. Kann ein Ergebnis setzen\n *\n * @param result\n */\n finish(result) {\n if (!(this._isDestroying || this._state === Context_1.Context.STATE_DESTROYED)) {\n this._isDestroying = true;\n if (Helper_1.Helper.isNotNull(result)) {\n this.setResult(result);\n }\n return this._siteManager.endSite(this);\n }\n }\n goBack() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.goBack();\n }\n }\n /**\n * Wird aufgerufen, falls zurück gedrückt wird. Gib false zurück, um das beenden der Seite zu verhindern\n */\n onBackPressed() {\n }\n /**\n * TODO Einbauen\n */\n onMenuPressed() {\n }\n /**\n * TODO Einbauen\n */\n onSearchPressed() {\n }\n /**\n * Gibt das FinishPromise zurück\n * @returns {Promise}\n */\n getFinishPromise() {\n return this._finishPromise;\n }\n /**\n * Setzt das Resultat. Letztes Setzen gilt\n * @param result\n */\n setResult(result) {\n this._result = result;\n }\n /**\n * Gibt den FinishResolver zurück. Genutzt, um FinishPromise zu resolven order rejecten\n * @returns {*}\n */\n getFinishResolver() {\n return this._finishPromiseResolver;\n }\n addEventListener(siteEvent, listener) {\n return EventManager_1.EventManager.getInstance().addListener(siteEvent, data => {\n if (data.site && data.site instanceof this.constructor) {\n listener(data);\n }\n });\n }\n isDestroying() {\n return this._isDestroying;\n }\n}\nexports.AbstractSite = AbstractSite;\nAbstractSite.EVENT = {\n ON_CONSTRUCT: \"abstract-site-on-construct\",\n ON_VIEW_LOADED: \"abstract-site-on-view-loaded\",\n ON_START: \"abstract-site-on-start\",\n ON_PAUSE: \"abstract-site-on-pause\",\n ON_DESTROY: \"abstract-site-on-destroy\"\n};\n//# sourceMappingURL=AbstractSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _typeorm = require(\"typeorm\");\nlet typeorm = _typeorm;\nclass BaseDatabase {\n constructor(database) {\n let options = this._createConnectionOptions(database);\n this._connectionPromise = this._createConnection(options);\n }\n _createConnection(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options.type === \"sqljs\") {\n //wait for SQL to be initialized\n window[\"SQL\"] = yield window[\"initSqlJs\"]();\n }\n return typeorm.createConnection(options).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n });\n }\n _createConnectionOptions(database) {\n let options = BaseDatabase.CONNECTION_OPTIONS;\n if (typeof device === \"undefined\" || device.platform !== \"browser\") {\n options.type = \"cordova\";\n options.database = database;\n }\n else {\n let saveTimeout = null;\n options.type = \"sqljs\";\n options.location = database;\n options.autoSave = true;\n options.useLocalForage = true;\n //Deactivated delay of saving since PRAGMA foreign_keys = ON is not saved with delay (why ever!)\n // options.autoSaveCallback = function () {\n // clearTimeout(saveTimeout);\n // saveTimeout = setTimeout(() => {\n // typeorm.getSqljsManager().saveDatabase();\n // }, 150);\n // }\n }\n options.entities = this.getEntityDefinitions();\n // options.migrations = this.constructor._migrations;\n return options;\n }\n getEntityDefinitions() {\n let entities = [];\n Object.keys(BaseDatabase._models).forEach(modelName => {\n BaseDatabase._models[modelName]._database = this;\n entities.push(new typeorm.EntitySchema(BaseDatabase._models[modelName].getSchemaDefinition()));\n });\n // console.log(\"entities\", entities);\n return entities;\n }\n saveEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = null;\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n repository = yield this._getRepository(entity[0].constructor);\n }\n else {\n repository = yield this._getRepository(entity.constructor);\n }\n return repository.save(entity);\n });\n }\n static _buildQuery(where, order, limit, offset, relations) {\n let query = {};\n if (where) {\n query[\"where\"] = where;\n }\n if (order) {\n query[\"order\"] = order;\n }\n if (limit) {\n query[\"take\"] = limit;\n }\n if (offset) {\n query[\"skip\"] = offset;\n }\n if (relations) {\n query[\"relations\"] = relations;\n }\n return query;\n }\n static _setLoaded(models) {\n return __awaiter(this, void 0, void 0, function* () {\n models = yield models;\n if (models === null || models === undefined) {\n return null;\n }\n let isArray = Array.isArray(models);\n if (!isArray) {\n models = [models];\n }\n models.forEach(models => models.setLoaded(true));\n return (isArray) ? models : models[0];\n });\n }\n findEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.find(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findAndCountEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findAndCount(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findOneEntity(model, where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(BaseDatabase._buildQuery(where, order, undefined, offset, relations)));\n });\n }\n findById(model, id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(id, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n findByIds(model, ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findByIds(ids, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n clearModel(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return repository.clear();\n });\n }\n _getRepository(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.getRepository(model);\n });\n }\n createQueryBuilder(model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (model) {\n let repo = yield this._getRepository(model);\n return repo.createQueryBuilder(model.getSchemaName());\n }\n else {\n let connection = yield this._connectionPromise;\n return connection.createQueryBuilder();\n }\n });\n }\n createQueryRunner() {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.createQueryRunner();\n });\n }\n deleteEntity(entity, model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n if (!model) {\n model = entity[0].constructor;\n }\n if (typeof entity[0] !== \"number\") {\n let ids = [];\n entity.forEach(ent => ids.push(ent.id));\n entity = ids;\n }\n }\n else {\n if (!model) {\n model = entity.constructor;\n }\n if (typeof entity !== \"number\") {\n entity = entity.id;\n }\n }\n let repository = yield this._getRepository(model);\n return repository.delete(entity);\n });\n }\n rawQuery(sql, params) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this._connectionPromise).query(sql, params);\n });\n }\n waitForConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._connectionPromise;\n });\n }\n /**\n * @return {BaseDatabase}\n */\n static getInstance() {\n if (!this.instance) {\n this.instance = new this();\n }\n return this.instance;\n }\n static addModel(model) {\n BaseDatabase._models[model.getSchemaName()] = model;\n }\n static getModel(modelName) {\n if (modelName) {\n return this._models[modelName];\n }\n else {\n return this._models;\n }\n }\n}\nexports.BaseDatabase = BaseDatabase;\nBaseDatabase._models = {};\nBaseDatabase.CONNECTION_OPTIONS = {\n location: \"default\",\n // autoSave: true,\n logging: [\"error\", \"warn\"],\n synchronize: true,\n};\nBaseDatabase.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\",\n};\n//# sourceMappingURL=BaseDatabase.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LoginSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/loginSite.html\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst ForgotPasswordSite_1 = require(\"./ForgotPasswordSite\");\nclass LoginSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#login-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n // await this.showLoadingSymbol();\n if (yield UserManager_1.UserManager.getInstance().login(data[\"email\"], data[\"password\"], client_1.Helper.isNotNull(data[\"saveLogin\"]))) {\n new client_1.Toast(\"welcome back\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email or password is wrong\"\n });\n // await this.removeLoadingSymbol();\n }\n }));\n let listener = () => form.clearErrors();\n this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#forgot-pw\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.startSite(ForgotPasswordSite_1.ForgotPasswordSite);\n }));\n return res;\n });\n }\n}\nexports.LoginSite = LoginSite;\nLoginSite.ACCESS = \"loggedOut\";\nLoginSite.LOGOUT_ACCESS = \"loggedIn\";\nLoginSite.ADD_LOGIN_ACTION = true;\nLoginSite.ADD_LOGOUT_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (LoginSite.ADD_LOGIN_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"login\", LoginSite.ACCESS, LoginSite));\n }\n if (LoginSite.ADD_LOGOUT_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"logout\", LoginSite.LOGOUT_ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().logout();\n })));\n }\n app.addDeepLink(\"login\", LoginSite);\n});\n//# sourceMappingURL=LoginSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserMenuAction = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass UserMenuAction extends client_1.MenuAction {\n constructor(name, access, action, showFor, order, icon) {\n super(name, action, showFor, order, icon);\n this._access = access;\n this._loginChangedCallbackId = UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => {\n this.redraw();\n });\n }\n isVisible() {\n return (super.isVisible() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n isActivated() {\n return (super.isActivated() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new UserMenuAction());\n copiedAction._access = this._access;\n return super.copy(copiedAction);\n }\n}\nexports.UserMenuAction = UserMenuAction;\n//# sourceMappingURL=UserMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientFileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst FileTransferPromise_1 = require(\"./FileWriter/FileTransferPromise\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FileWriter/FilePromise\");\nclass ClientFileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n setLoaded(isLoaded) {\n // @ts-ignore\n super.setLoaded(isLoaded);\n this._isDownloaded = true;\n FilePromise_1.FilePromise.open(this.src, { create: false }).then(() => this._isDownloaded = true).catch(e => {\n console.log(\"not downloaded, yet!\");\n this._isDownloaded = false;\n ClientFileMedium._handleImages(this);\n });\n }\n save() {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(this);\n return _super.save.call(this);\n });\n }\n static saveMany(entities) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(entities);\n return _super.saveMany.call(this, entities);\n });\n }\n static _handleImages(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n let isArray = Array.isArray(entities);\n if (!isArray) {\n entities = [entities];\n }\n yield Helper_1.Helper.asyncForEach(entities, (entity) => __awaiter(this, void 0, void 0, function* () {\n if (entity.saveOffline && device.platform !== \"browser\" && !entity.src.startsWith(\"data\") && !entity.src.startsWith(\"http\") && !entity.src.startsWith(\"//\")) {\n yield new FileTransferPromise_1.FileTransferPromise(entity.getServerUrl(false), entity.src).download().catch(e => console.log(e));\n entity._isDownloaded = true;\n }\n }), true);\n });\n }\n}\nexports.ClientFileMedium = ClientFileMedium;\n//# sourceMappingURL=ClientFileMedium.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to create entity id map from the mixed id value,\n * but id value is a single value when entity requires multiple values.\n */\nvar CannotCreateEntityIdMapError = /** @class */ (function (_super) {\n __extends(CannotCreateEntityIdMapError, _super);\n function CannotCreateEntityIdMapError(metadata, id) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotCreateEntityIdMapError\";\n Object.setPrototypeOf(_this, CannotCreateEntityIdMapError.prototype);\n var objectExample = metadata.primaryColumns.reduce(function (object, column, index) {\n column.setEntityValue(object, index + 1);\n return object;\n }, {});\n _this.message = \"Cannot use given entity id \\\"\" + id + \"\\\" because \\\"\" + metadata.targetName + \"\\\" contains multiple primary columns, you must provide object in following form: \" + JSON.stringify(objectExample) + \" as an id.\";\n return _this;\n }\n return CannotCreateEntityIdMapError;\n}(Error));\nexport { CannotCreateEntityIdMapError };\n\n//# sourceMappingURL=CannotCreateEntityIdMapError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when a transaction is required for the current operation, but there is none open.\n */\nvar PessimisticLockTransactionRequiredError = /** @class */ (function (_super) {\n __extends(PessimisticLockTransactionRequiredError, _super);\n function PessimisticLockTransactionRequiredError() {\n var _this = _super.call(this) || this;\n _this.name = \"PessimisticLockTransactionRequiredError\";\n Object.setPrototypeOf(_this, PessimisticLockTransactionRequiredError.prototype);\n _this.message = \"An open transaction is required for pessimistic lock.\";\n return _this;\n }\n return PessimisticLockTransactionRequiredError;\n}(Error));\nexport { PessimisticLockTransactionRequiredError };\n\n//# sourceMappingURL=PessimisticLockTransactionRequiredError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an entity does not have no version and no update date column.\n */\nvar NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) {\n __extends(NoVersionOrUpdateDateColumnError, _super);\n function NoVersionOrUpdateDateColumnError(entity) {\n var _this = _super.call(this) || this;\n _this.name = \"NoVersionOrUpdateDateColumnError\";\n Object.setPrototypeOf(_this, NoVersionOrUpdateDateColumnError.prototype);\n _this.message = \"Entity \" + entity + \" does not have version or update date columns.\";\n return _this;\n }\n return NoVersionOrUpdateDateColumnError;\n}(Error));\nexport { NoVersionOrUpdateDateColumnError };\n\n//# sourceMappingURL=NoVersionOrUpdateDateColumnError.js.map\n","/**\n * Syntax sugar.\n * Allows to use brackets in WHERE expressions for better syntax.\n */\nvar Brackets = /** @class */ (function () {\n /**\n * Given WHERE query builder that will build a WHERE expression that will be taken into brackets.\n */\n function Brackets(whereFactory) {\n this.whereFactory = whereFactory;\n }\n return Brackets;\n}());\nexport { Brackets };\n\n//# sourceMappingURL=Brackets.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: In([...]) }\n */\nexport function In(value) {\n return new FindOperator(\"in\", value, true, true);\n}\n\n//# sourceMappingURL=In.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to insert using QueryBuilder but do not specify what to insert.\n */\nvar InsertValuesMissingError = /** @class */ (function (_super) {\n __extends(InsertValuesMissingError, _super);\n function InsertValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"InsertValuesMissingError\";\n Object.setPrototypeOf(_this, InsertValuesMissingError.prototype);\n _this.message = \"Cannot perform insert query because values are not defined. Call \\\"qb.values(...)\\\" method to specify inserted values.\";\n return _this;\n }\n return InsertValuesMissingError;\n}(Error));\nexport { InsertValuesMissingError };\n\n//# sourceMappingURL=InsertValuesMissingError.js.map\n","/**\n * Result object returned by DeleteQueryBuilder execution.\n */\nvar DeleteResult = /** @class */ (function () {\n function DeleteResult() {\n }\n return DeleteResult;\n}());\nexport { DeleteResult };\n\n//# sourceMappingURL=DeleteResult.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingDeleteDateColumnError = /** @class */ (function (_super) {\n __extends(MissingDeleteDateColumnError, _super);\n function MissingDeleteDateColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDeleteDateColumnError\";\n Object.setPrototypeOf(_this, MissingDeleteDateColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have delete date columns.\";\n return _this;\n }\n return MissingDeleteDateColumnError;\n}(Error));\nexport { MissingDeleteDateColumnError };\n\n//# sourceMappingURL=MissingDeleteDateColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build SELECT query using OFFSET without LIMIT applied but database does not support it.\n*/\nvar OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) {\n __extends(OffsetWithoutLimitNotSupportedError, _super);\n function OffsetWithoutLimitNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OffsetWithoutLimitNotSupportedError\";\n Object.setPrototypeOf(_this, OffsetWithoutLimitNotSupportedError.prototype);\n _this.message = \"RDBMS does not support OFFSET without LIMIT in SELECT statements. You must use limit in conjunction with offset function (or take in conjunction with skip function if you are using pagination).\";\n return _this;\n }\n return OffsetWithoutLimitNotSupportedError;\n}(Error));\nexport { OffsetWithoutLimitNotSupportedError };\n\n//# sourceMappingURL=OffsetWithoutLimitNotSupportedError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NavbarFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultViewNavbar = require(\"../../../html/siteTemplates/navbar.html\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Context_1 = require(\"../Context\");\nconst Menu_1 = require(\"./Menu\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\nconst DropdownRenderer_1 = require(\"./Renderer/DropdownRenderer\");\nconst AccordionRenderer_1 = require(\"./Renderer/AccordionRenderer\");\nconst ColorIndicator_1 = require(\"../../ColorIndicator/ColorIndicator\");\nconst App_1 = require(\"../../App\");\n/**\n * Fragment, welches ein Menü in der Navbar anzeigt und hinzufügt.\n *\n * Technisch gesehen wird das gleiche Menü zwei mal gerendert und hinzugefügt. Einmal das Menü in der Navbar, welches\n * immer sichtbar ist und einmal das versteckte Menü, welches durch einen Toggle-Button angezeigt werden kann.\n * Dabei hat jede MenuAction eine Sichtbarkeitsklasse. Anhand der Sichtbarkeitsklasse und der Bildschirmgröße wird\n * entweder das eine oder das andere Element sichtbar, jedoch niemals beide.\n */\nclass NavbarFragment extends AbstractFragment_1.AbstractFragment {\n /**\n * Erstellt das Fragment\n * @param site\n * @param {string|Node|null} viewNavbar\n */\n constructor(site, viewNavbar) {\n super(site, Helper_1.Helper.nonNull(viewNavbar, defaultViewNavbar));\n this._menu = null;\n this._responsiveMenu = null;\n this._backgroundImage = \"\";\n this._menuActions = [];\n NavbarFragment.defaultActions.forEach(action => {\n this._menuActions.push(action.copy());\n });\n this._scrollWidget = null;\n this._canGoBack = true;\n this._logo = App_1.App.getLogo();\n }\n setLogo(logo) {\n this._logo = logo;\n if (this._view) {\n if (Helper_1.Helper.isNotNull(this._logo)) {\n this.findBy(\".logo\").classList.remove(\"hidden\");\n this.findBy(\".logo-img\").src = this._logo;\n }\n else {\n this.findBy(\".logo\").classList.add(\"hidden\");\n }\n }\n }\n setCanGoBack(canGoBack) {\n this._canGoBack = canGoBack;\n if (this._view) {\n if (this._canGoBack) {\n this.findBy(\".back-button\").classList.remove(\"hidden\");\n }\n else {\n this.findBy(\".back-button\").classList.add(\"hidden\");\n }\n }\n }\n setScrollWidget(scrollWidget) {\n this._scrollWidget = scrollWidget;\n if (this._view && this._scrollWidget) {\n let nav = this.findBy(\".top-bar > span\");\n let background = this.findBy(\".background-img\");\n let listener = () => {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (nav.getBoundingClientRect().bottom >= background.getBoundingClientRect().bottom) {\n navbarElem.classList.add(\"solid\");\n }\n else {\n navbarElem.classList.remove(\"solid\");\n }\n };\n background.addEventListener(\"load\", listener);\n scrollWidget.addEventListener(\"scroll\", listener);\n requestAnimationFrame(listener);\n }\n }\n setBackgroundImage(backgroundImage) {\n this._backgroundImage = backgroundImage;\n if (this._view) {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (Helper_1.Helper.isNotNull(this._backgroundImage)) {\n let imgElem = this.findBy(\".background-img\");\n let colorIndicator = ColorIndicator_1.ColorIndicator.getInstance();\n // navbarElem.classList.add(\"color-black\");\n imgElem.addEventListener(\"load\", () => {\n if (this._backgroundImage !== \"\") {\n let color = (colorIndicator.getAverageImgColor(imgElem, undefined, 150));\n let textColor = colorIndicator.invertColorBW(color);\n if (textColor.r === 0 && textColor.g === 0 && textColor.b === 0) {\n navbarElem.classList.remove(\"color-white\");\n navbarElem.classList.add(\"color-black\");\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.add(\"color-white\");\n }\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.remove(\"color-white\");\n }\n });\n requestAnimationFrame(() => {\n let heightElement = navbarElem.querySelector(\".grid-container\");\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.borderBoxSize) {\n navbarElem.style = \"min-height:\" + entry.borderBoxSize[0].blockSize + \"px\";\n }\n else if (entry.contentRect) {\n navbarElem.style = \"min-height:\" + entry.contentRect.height + \"px\";\n }\n else {\n console.log(\"entry\", entry);\n }\n });\n });\n resizeObserver.observe(heightElement);\n }\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 500);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1000);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1500);\n });\n imgElem.src = this._backgroundImage;\n navbarElem.classList.add(\"with-image\");\n }\n else {\n navbarElem.classList.remove(\"with-image\");\n }\n }\n }\n /**\n * Wird aufgerufen, sobald die View geladen ist\n * @returns {Promise<*>}\n */\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.setTitleElement(document.createTextNode(NavbarFragment.title));\n //Erstelle die Renderers und das Menü\n let renderers = [];\n renderers.push(new DropdownRenderer_1.DropdownRenderer(this.findBy(\"#navbar-menu-visible\")));\n renderers.push(new AccordionRenderer_1.AccordionRenderer(this.findBy(\"#navbar-menu-hidden\")));\n this._menu = new Menu_1.Menu(renderers, this._menuActions);\n this._closeListenerContainer = this.findBy(\"#navbar-close-listener-container\");\n //Falls im visible-submenu eine Submenu-Action zu sehen ist\n this._menu.setOpenSubmenuListener(() => {\n this._showCloseListener();\n });\n //Falls ein Element im Menü angeklickt wird, sollte das Menü geschlossen werden,\n //außer dadurch wird ein Untermenü geöffnet/geschlossen\n let oldListener = this._menu.getOnClickListener();\n this._menu.setOnClickListener(e => {\n if (!(oldListener(e) instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.closeMenu();\n }\n });\n //Fügt close/open-Listener für den Toggle-Button hinzu\n this._responsiveMenu = this.findBy(\"#responsive-menu\");\n this.findBy(\"#responsive-menu-toggle\").onclick = () => {\n if (this._responsiveMenu.classList.contains(\"visible\")) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n };\n //Wenn das \"versteckte\" Menü geöffnet ist, sollte jeder Click nicht auf das Menü dieses wieder schließen\n //Dazu gibt es den navbar-close-listener der sich vor allen (außer dem Menü) befindet. Er wird nur angezeigt,\n //wenn das Menü offen ist\n let navbarFragment = this;\n this.findBy(\"#navbar-close-listener\").addEventListener(\"click\", function (e) {\n if (e.target === this) {\n navbarFragment.closeMenu();\n }\n });\n //Wenn die größe des Fenster geändert wird, muss nachgeschaut werden, ob der Menü-Button für das hidden-Menü noch angezeigt werden muss\n window.addEventListener('resize', () => {\n //Reicht aus, wenn Seite im Vordergrund, da bei jedem Start (durch onStart) der toggleButton geupdatet wird\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this.updateToggleButton();\n }\n });\n //Rendere das Menü\n this.drawMenu();\n this.findBy(\".back-button\").addEventListener(\"click\", () => {\n this.goBack();\n });\n this.findBy(\".logo\").addEventListener(\"click\", () => {\n if (NavbarFragment.onLogoClickListener) {\n NavbarFragment.onLogoClickListener(this.getSite());\n }\n });\n this.setCanGoBack(this._canGoBack);\n this.setBackgroundImage(this._backgroundImage);\n this.setScrollWidget(this._scrollWidget);\n this.setLogo(this._logo);\n return res;\n });\n }\n goBack() {\n if (this._canGoBack) {\n this.getSite().goBack();\n }\n }\n /**\n * Jedes mal, wenn die Seite startet, update den toggleButton\n *\n * @param pauseArguments\n * @returns {Promise}\n */\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n _super.onStart.call(this, pauseArguments);\n this.updateToggleButton();\n });\n }\n _showCloseListener() {\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'block';\n }\n }\n /**\n * Schließe das Menü\n */\n closeMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n this._responsiveMenu.classList.remove(\"visible\");\n this._view.classList.remove(\"navbar-is-open\");\n }\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'none';\n }\n if (this._menu) {\n this._menu.close();\n }\n }\n /**\n * Öffne das Menü\n */\n openMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n // this._responsiveMenu.style.display = 'block';\n this._responsiveMenu.classList.add(\"visible\");\n this._view.classList.add(\"navbar-is-open\");\n }\n this._showCloseListener();\n }\n /**\n * rendere das Menü\n */\n drawMenu() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.draw();\n }\n }\n /**\n * Update die Sichtbarkeit des MenüButtons für das \"versteckte\" Menü\n */\n updateToggleButton() {\n //Bekomme die aktuelle Bildschirm-größe als Foundation-Klasse\n let size = NavbarFragment._getCurrentSize();\n //schaue hier nach den enthaltenen Elementen. Evtl sollte das direkt an den MenüActions gemacht werden\n let firstParentElement = this.findBy(\"#navbar-menu-visible\");\n if (\n //Es existieren Elemente für large und Bildschirmgröße ist kleiner large => ToggleButton muss angezeigt werden\n (size === \"medium\" || size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_LARGE + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für medium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_MEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für smedium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_SMEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente, welche nie angezeigt werden sollen => ToggleButton muss angezeigt werden\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_NEVER + \":not(.hidden)\").length > 0) {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'block';\n }\n else {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'none';\n //schließe Menü, falls es offen war\n this.closeMenu();\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param action\n */\n addAction(action) {\n this._menuActions.push(action);\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.addAction(action);\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param redraw\n */\n removeAllActions(redraw) {\n this._menuActions = [];\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.removeAllActions(redraw);\n }\n }\n /**\n * Updatet das Title-Element\n * @param titleElement\n */\n setTitleElement(titleElement) {\n Helper_1.Helper.removeAllChildren(this.findBy(\"#title-element-container\")).appendChild(titleElement);\n }\n /**\n * Gibt die aktuelle Size zurück\n *\n * @returns {*}\n * @private\n */\n static _getCurrentSize() {\n let matched;\n //Queries sind paare von css-selektoren auf die Mindest-Breite und Namen\n //Queries sind so geordnet, dass größter zum schluss kommt\n let queries = NavbarFragment._getViewQueries();\n for (let i = 0; i < queries.length; i++) {\n let query = queries[i];\n //Letzter sollte matchen, daher noch nicht breaken\n if (matchMedia(query._value).matches) {\n matched = query;\n }\n }\n if (typeof matched === 'object') {\n return matched._name;\n }\n else {\n return matched;\n }\n }\n /**\n * Gibt die ViewQueries zurück, triggert die Berechnung der ViewQueries, falls das noch nicht geschehen ist\n *\n * @returns {Array}\n * @private\n */\n static _getViewQueries() {\n if (NavbarFragment.queries.length === 0) {\n NavbarFragment.queries = NavbarFragment._calculateViewQueries();\n }\n return NavbarFragment.queries;\n }\n /**\n * Berechnet die ViewQueries, bzw liest diese aus Foundation/CSS ein\n * Eine Veränderung der Werte in SASS, verändert daher auch hier die Werte\n *\n * @returns {*}\n * @private\n */\n static _calculateViewQueries() {\n //Hilfs-Funktion zum Parsen der Bildschirmgröße\n function parseStyleToObject(str) {\n let styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n const parts = param.replace(/\\+/g, ' ').split('=');\n let key = parts[0];\n let val = parts[1];\n key = decodeURIComponent(key);\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = val === undefined ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n }\n else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n }\n else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n }\n //die Font-Family ist reiner Text. Daher übergibt Foundation die Bildchirmgröße mit den dazugehörigen Namen als\n // Font-Family in einem Element im Head\n let cssStyle = document.getElementsByClassName('foundation-mq');\n if (cssStyle.length === 0) {\n return;\n }\n let queries = [];\n //Lade Bildschirmgrößen und speichere diese als Query in einem Array\n let cssStyleElements = parseStyleToObject(window.getComputedStyle(cssStyle[0]).getPropertyValue('font-family'));\n for (let key in cssStyleElements) {\n if (cssStyleElements.hasOwnProperty(key)) {\n //Erstelle aus der Bildschirmgröße die Queries\n queries.push({\n _name: key,\n _value: 'only screen and (min-width: ' + cssStyleElements[key] + ')'\n });\n }\n }\n return queries;\n }\n /**\n * Setzt den Listener, welcher ausgeführt wird, wenn auf das Logo geklickt wird\n *\n * @param listener\n */\n static setOnLogoClickListener(listener) {\n this.onLogoClickListener = listener;\n }\n}\nexports.NavbarFragment = NavbarFragment;\nNavbarFragment.queries = [];\nNavbarFragment.onLogoClickListener = () => App_1.App.addInitialization(app => app.startStartingSite());\nNavbarFragment.title = \"MeinBerufBau\";\nNavbarFragment.defaultActions = [];\n//# sourceMappingURL=NavbarFragment.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"./DataManager\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"./Translator\");\nconst Toast_1 = require(\"./Toast/Toast\");\nclass Form {\n constructor(formElem, urlOrCallback, method) {\n this._formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this._formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this._formElem.elements[k].type && (this._formElem.elements[k].type === \"checkbox\" || this._formElem.elements[k].type === \"radio\")) {\n this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k];\n }\n else if (this._formElem.elements[k].type && this._formElem.elements[k].type === \"file\") {\n if (this._formElem.elements[k + \"-hidden\"]) {\n this._formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this._formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this._formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this._formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this._formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this._formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this._formElem.elements).forEach(elemKey => {\n this._formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) {\n this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this._formElem && this._formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this._formElem.classList.add(\"sending\");\n }\n else {\n this._formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this._formElem && !this._formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this._formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","import { __values } from \"tslib\";\nimport { QueryBuilderUtils } from \"./QueryBuilderUtils\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nvar JoinAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JoinAttribute(connection, queryExpressionMap, joinAttribute) {\n this.connection = connection;\n this.queryExpressionMap = queryExpressionMap;\n this.isSelectedEvaluated = false;\n this.relationEvaluated = false;\n ObjectUtils.assign(this, joinAttribute || {});\n }\n Object.defineProperty(JoinAttribute.prototype, \"isMany\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"isSelected\", {\n /**\n * Indicates if this join is selected.\n */\n get: function () {\n var _this = this;\n if (!this.isSelectedEvaluated) {\n var getValue = function () {\n var e_1, _a;\n var _loop_1 = function (select) {\n if (select.selection === _this.alias.name)\n return { value: true };\n if (_this.metadata && !!_this.metadata.columns.find(function (column) { return select.selection === _this.alias.name + \".\" + column.propertyPath; }))\n return { value: true };\n };\n try {\n for (var _b = __values(_this.queryExpressionMap.selects), _c = _b.next(); !_c.done; _c = _b.next()) {\n var select = _c.value;\n var state_1 = _loop_1(select);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"tablePath\", {\n /**\n * Name of the table which we should join.\n */\n get: function () {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get: function () {\n var _this = this;\n if (!this.relationEvaluated) {\n var getValue = function () {\n if (!QueryBuilderUtils.isAliasProperty(_this.entityOrProperty))\n return undefined;\n var relationOwnerSelection = _this.queryExpressionMap.findAliasByName(_this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n }\n throw new Error(\"Relation with property path \" + _this.relationPropertyPath + \" in entity was not found.\");\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n return undefined;\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n \n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n \n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n if (!this.relation)\n throw new Error(\"Cannot get junction table for join without relation.\");\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return JoinAttribute;\n}());\nexport { JoinAttribute };\n\n//# sourceMappingURL=JoinAttribute.js.map\n","/**\n * This class stores up and down queries needed for migrations functionality.\n */\nvar SqlInMemory = /** @class */ (function () {\n function SqlInMemory() {\n this.upQueries = [];\n this.downQueries = [];\n }\n return SqlInMemory;\n}());\nexport { SqlInMemory };\n\n//# sourceMappingURL=SqlInMemory.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { Query } from \"../driver/Query\";\nimport { SqlInMemory } from \"../driver/SqlInMemory\";\nvar BaseQueryRunner = /** @class */ (function () {\n function BaseQueryRunner() {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n this.isReleased = false;\n /**\n * Indicates if transaction is in progress.\n */\n this.isTransactionActive = false;\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n this.data = {};\n /**\n * All synchronized tables in the database.\n */\n this.loadedTables = [];\n /**\n * All synchronized views in the database.\n */\n this.loadedViews = [];\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n this.sqlMemoryMode = false;\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n this.sqlInMemory = new SqlInMemory();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads given table's data from the database.\n */\n BaseQueryRunner.prototype.getTable = function (tablePath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables([tablePath])];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables.length > 0 ? this.loadedTables[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database.\n */\n BaseQueryRunner.prototype.getTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables(tableNames)];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getView = function (viewPath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews([viewPath])];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews.length > 0 ? this.loadedViews[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getViews = function (viewPaths) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews(viewPaths)];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews];\n }\n });\n });\n };\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n BaseQueryRunner.prototype.enableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n };\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n BaseQueryRunner.prototype.disableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n };\n /**\n * Flushes all memorized sqls.\n */\n BaseQueryRunner.prototype.clearSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n };\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n BaseQueryRunner.prototype.getMemorySql = function () {\n return this.sqlInMemory;\n };\n /**\n * Executes up sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryUpSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_1_1;\n var e_1, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.upQueries), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes down sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryDownSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.downQueries.reverse()), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedView = function (viewName) {\n return __awaiter(this, void 0, void 0, function () {\n var view, foundViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n view = this.loadedViews.find(function (view) { return view.name === viewName; });\n if (view)\n return [2 /*return*/, view];\n return [4 /*yield*/, this.loadViews([viewName])];\n case 1:\n foundViews = _a.sent();\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return [2 /*return*/, foundViews[0]];\n }\n else {\n throw new Error(\"View \\\"\" + viewName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, foundTables;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.loadedTables.find(function (table) { return table.name === tableName; });\n if (table)\n return [2 /*return*/, table];\n return [4 /*yield*/, this.loadTables([tableName])];\n case 1:\n foundTables = _a.sent();\n if (foundTables.length > 0) {\n this.loadedTables.push(foundTables[0]);\n return [2 /*return*/, foundTables[0]];\n }\n else {\n throw new Error(\"Table \\\"\" + tableName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Replaces loaded table with given changed table.\n */\n BaseQueryRunner.prototype.replaceCachedTable = function (table, changedTable) {\n var foundTable = this.loadedTables.find(function (loadedTable) { return loadedTable.name === table.name; });\n if (foundTable) {\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n };\n BaseQueryRunner.prototype.getTypeormMetadataTableName = function () {\n var options = this.connection.driver.options;\n return this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n };\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n BaseQueryRunner.prototype.isColumnChanged = function (oldColumn, newColumn, checkDefault, checkComment) {\n // this logs need to debug issues in column change detection. Do not delete it!\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(oldColumn.enum !== newColumn.enum);\n // console.log(oldColumn.enum, newColumn.enum);\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || oldColumn.enum !== newColumn.enum;\n };\n /**\n * Checks if column length is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnLength = function (table, column, length) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.length)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length.toString() === length.toString();\n }\n return false;\n };\n /**\n * Checks if column precision is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnPrecision = function (table, column, precision) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n return false;\n };\n /**\n * Checks if column scale is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnScale = function (table, column, scale) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n return false;\n };\n /**\n * Executes sql used special for schema build.\n */\n BaseQueryRunner.prototype.executeQueries = function (upQueries, downQueries) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries_1, upQueries_1_1, _a, query, parameters, e_3_1;\n var _b, _c, e_3, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n (_b = this.sqlInMemory.upQueries).push.apply(_b, __spreadArray([], __read(upQueries)));\n (_c = this.sqlInMemory.downQueries).push.apply(_c, __spreadArray([], __read(downQueries)));\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return [2 /*return*/, Promise.resolve()];\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n upQueries_1 = __values(upQueries), upQueries_1_1 = upQueries_1.next();\n _e.label = 2;\n case 2:\n if (!!upQueries_1_1.done) return [3 /*break*/, 5];\n _a = upQueries_1_1.value, query = _a.query, parameters = _a.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 3:\n _e.sent();\n _e.label = 4;\n case 4:\n upQueries_1_1 = upQueries_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _e.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (upQueries_1_1 && !upQueries_1_1.done && (_d = upQueries_1.return)) _d.call(upQueries_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n return BaseQueryRunner;\n}());\nexport { BaseQueryRunner };\n\n//# sourceMappingURL=BaseQueryRunner.js.map\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass JsonHelper {\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n // array deepEqual\n if (a instanceof Array && b instanceof Array && a.length === b.length) {\n return a[\"every\"]((obj, i) => {\n return JsonHelper.deepEqual(obj, b[i]);\n });\n }\n //date deepEqual\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n // object deep copy\n if (typeof a === \"object\" && typeof b === \"object\") {\n let aKeys = Object.keys(a);\n let bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys[\"every\"]((key) => {\n return Helper_1.Helper.isNotNull(b[key]) && JsonHelper.deepEqual(a[key], b[key]);\n });\n }\n //else is false (or not handled)\n return false;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static deepCopy(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper_1.Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneO;\n }\n static deepAssign(...objects) {\n if (objects.length > 0 && Array.isArray(objects)) {\n const result = [];\n objects.forEach(arr => result.push(...arr));\n return result;\n }\n const resultObj = {};\n objects.forEach(obj => {\n for (let i in obj) {\n if (resultObj[i] && typeof obj[i] === \"object\" && typeof resultObj[i] === \"object\") {\n resultObj[i] = JsonHelper.deepAssign(resultObj[i], obj[i]);\n }\n else {\n resultObj[i] = obj[i];\n }\n }\n });\n return resultObj;\n }\n static getDiff(a, b) {\n const result = {\n changed: {},\n added: {},\n removed: [],\n };\n // if (Array.isArray(a) && Array.isArray(b)){\n // const lengthA = a.length;\n // const lengthB = b.length;\n //\n // const minLength = Math.min(lengthA, lengthB);\n // for (let i = 0; i < minLength; i++){\n // const\n // }\n // }\n if ((typeof a !== \"object\" || typeof b !== \"object\")\n && (!Array.isArray(a) && !Array.isArray(b))) {\n if (a === b) {\n return null;\n }\n else {\n return { value: b };\n }\n }\n let hasChanged = false;\n let hasRemoved = false;\n let hasAdded = false;\n for (let i in a) {\n if (i in b) {\n const newVal = JsonHelper.getDiff(a[i], b[i]);\n if (newVal !== null) {\n result.changed[i] = newVal;\n hasChanged = true;\n }\n }\n else {\n result.removed.push(i);\n hasRemoved = true;\n }\n }\n for (let i in b) {\n if (!(i in a)) {\n result.added[i] = b[i];\n hasAdded = true;\n }\n }\n if (hasRemoved || hasAdded || hasChanged) {\n return result;\n }\n else {\n return null;\n }\n }\n static applyDiff(obj, diff) {\n if (!Array.isArray(diff.removed)) {\n debugger;\n }\n Object.keys(diff.changed).forEach(key => {\n if (\"value\" in diff.changed[key]) {\n obj[key] = diff.changed[key].value;\n }\n else {\n obj[key] = JsonHelper.applyDiff(obj[key], diff.changed[key]);\n }\n });\n Object.keys(diff.added).forEach(key => obj[key] = diff.added[key]);\n if (Array.isArray(obj)) {\n diff.removed.sort((a, b) => (parseInt(b) - parseInt(a))).forEach(index => {\n obj.splice(parseInt(index), 1);\n });\n }\n else {\n diff.removed.forEach(rem => delete obj[rem]);\n }\n return obj;\n }\n}\nexports.JsonHelper = JsonHelper;\n//# sourceMappingURL=JsonHelper.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { InsertResult } from \"./result/InsertResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { InsertValuesMissingError } from \"../error/InsertValuesMissingError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar InsertQueryBuilder = /** @class */ (function (_super) {\n __extends(InsertQueryBuilder, _super);\n function InsertQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n InsertQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n InsertQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var valueSets, queryRunner, transactionStartedByUs, broadcastResult_1, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, insertSql, parameters, insertResult, statements, _b, broadcastResult_2, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n valueSets = this.getValueSets();\n // console.timeEnd(\".value sets\");\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return [2 /*return*/, new InsertResult()];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult_1 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult_1, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_1.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult_1.promises)];\n case 4:\n _c.sent();\n _c.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), insertSql = _a[0], parameters = _a[1];\n insertResult = new InsertResult();\n statements = [declareSql, insertSql, selectOutputSql];\n _b = insertResult;\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n _b.raw = _c.sent();\n if (!(this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n // console.time(\".updating entity\");\n return [4 /*yield*/, returningResultsEntityUpdator.insert(insertResult, valueSets)];\n case 7:\n // console.time(\".updating entity\");\n _c.sent();\n _c.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult_2 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult_2, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_2.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult_2.promises)];\n case 9:\n _c.sent();\n _c.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _c.sent();\n _c.label = 12;\n case 12: \n // console.timeEnd(\".commit\");\n return [2 /*return*/, insertResult];\n case 13:\n error_1 = _c.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _c.label = 14;\n case 14:\n _c.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _c.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _c.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _c.sent();\n _c.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _c.sent();\n _c.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n InsertQueryBuilder.prototype.into = function (entityTarget, columns) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return this;\n };\n /**\n * Values needs to be inserted into table.\n */\n InsertQueryBuilder.prototype.values = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n InsertQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n */\n InsertQueryBuilder.prototype.onConflict = function (statement) {\n this.expressionMap.onConflict = statement;\n return this;\n };\n /**\n * Adds additional ignore statement supported in databases.\n */\n InsertQueryBuilder.prototype.orIgnore = function (statement) {\n if (statement === void 0) { statement = true; }\n this.expressionMap.onIgnore = statement;\n return this;\n };\n /**\n * Adds additional update statement supported in databases.\n */\n InsertQueryBuilder.prototype.orUpdate = function (statement) {\n var _this = this;\n this.expressionMap.onUpdate = {};\n if (statement && Array.isArray(statement.conflict_target))\n this.expressionMap.onUpdate.conflict = \" ( \" + statement.conflict_target.map(function (columnName) { return _this.escape(columnName); }).join(\", \") + \" ) \";\n if (statement && typeof statement.conflict_target === \"string\")\n this.expressionMap.onUpdate.conflict = \" ON CONSTRAINT \" + this.escape(statement.conflict_target) + \" \";\n if (statement && Array.isArray(statement.columns))\n this.expressionMap.onUpdate.columns = statement.columns.map(function (column) { return _this.escape(column) + \" = :\" + column; }).join(\", \");\n if (statement && Array.isArray(statement.overwrite)) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return column + \" = VALUES(\" + column + \")\"; }).join(\", \");\n }\n else if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return _this.escape(column) + \" = EXCLUDED.\" + _this.escape(column); }).join(\", \");\n }\n }\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates INSERT express used to perform insert query.\n */\n InsertQueryBuilder.prototype.createInsertExpression = function () {\n var _this = this;\n var tableName = this.getTableName(this.getMainTableName());\n var valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n var returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n var columnsExpression = this.createColumnNamesExpression();\n var query = \"INSERT \";\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" IGNORE \" : \"\");\n }\n query += \"INTO \" + tableName;\n // add columns expression\n if (columnsExpression) {\n query += \"(\" + columnsExpression + \")\";\n }\n else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += \" OUTPUT \" + returningExpression;\n }\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += \" \" + valuesExpression;\n }\n else {\n query += \" VALUES \" + valuesExpression;\n }\n }\n else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n }\n else {\n query += \" DEFAULT VALUES\";\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" ON CONFLICT DO NOTHING \" : \"\");\n query += \"\" + (this.expressionMap.onConflict ? \" ON CONFLICT \" + this.expressionMap.onConflict : \"\");\n if (this.expressionMap.onUpdate) {\n var _a = this.expressionMap.onUpdate, overwrite = _a.overwrite, columns = _a.columns, conflict = _a.conflict;\n query += \"\" + (columns ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + overwrite : \"\");\n }\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n var _b = this.expressionMap.onUpdate, overwrite = _b.overwrite, columns = _b.columns;\n query += \"\" + (columns ? \" ON DUPLICATE KEY UPDATE \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON DUPLICATE KEY UPDATE \" + overwrite : \"\");\n }\n }\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += \" RETURNING \" + returningExpression;\n }\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias.hasMetadata\n && this.expressionMap.mainAlias.metadata.columns\n .filter(function (column) { return _this.expressionMap.insertColumns.length > 0 ? _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert; })\n .some(function (column) { return _this.isOverridingAutoIncrementBehavior(column); })) {\n query = \"SET IDENTITY_INSERT \" + tableName + \" ON; \" + query + \"; SET IDENTITY_INSERT \" + tableName + \" OFF\";\n }\n return query;\n };\n /**\n * Gets list of columns where values must be inserted to.\n */\n InsertQueryBuilder.prototype.getInsertedColumns = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n return [];\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n // if user specified list of columns he wants to insert to, then we filter only them\n if (_this.expressionMap.insertColumns.length)\n return _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n // skip columns the user doesn't want included by default\n if (!column.isInsert) {\n return false;\n }\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(_this.connection.driver instanceof OracleDriver)\n && !(_this.connection.driver instanceof AbstractSqliteDriver)\n && !(_this.connection.driver instanceof MysqlDriver)\n && !(_this.connection.driver instanceof AuroraDataApiDriver)\n && !(_this.connection.driver instanceof SqlServerDriver && _this.isOverridingAutoIncrementBehavior(column)))\n return false;\n return true;\n });\n };\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n InsertQueryBuilder.prototype.createColumnNamesExpression = function () {\n var _this = this;\n var columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(function (column) { return _this.escape(column.databaseName); }).join(\", \");\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias.hasMetadata && !this.expressionMap.insertColumns.length) {\n var valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n }\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n };\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n InsertQueryBuilder.prototype.createValuesExpression = function () {\n var _this = this;\n var valueSets = this.getValueSets();\n var columns = this.getInsertedColumns();\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n var expression_1 = \"\";\n var parametersCount_1 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, valueSetIndex) {\n columns.forEach(function (column, columnIndex) {\n if (columnIndex === 0) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" SELECT \";\n }\n else {\n expression_1 += \"(\";\n }\n }\n var paramName = \"i\" + valueSetIndex + \"_\" + column.databaseName;\n // extract real value from the entity\n var value = column.getEntityValue(valueSet);\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression_1 += \"1\";\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n }\n else if (column.isDiscriminator) {\n _this.expressionMap.nativeParameters[\"discriminator_value_\" + parametersCount_1] = _this.expressionMap.mainAlias.metadata.discriminatorValue;\n expression_1 += _this.connection.driver.createParameter(\"discriminator_value_\" + parametersCount_1, parametersCount_1);\n parametersCount_1++;\n // return \"1\";\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n }\n else if (column.isGenerated && column.generationStrategy === \"uuid\" && !_this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n var paramName_1 = \"uuid_\" + column.databaseName + valueSetIndex;\n value = RandomGenerator.uuid4();\n _this.expressionMap.nativeParameters[paramName_1] = value;\n expression_1 += _this.connection.driver.createParameter(paramName_1, parametersCount_1);\n parametersCount_1++;\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if ((_this.connection.driver instanceof OracleDriver && valueSets.length > 1) || _this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression_1 += _this.connection.driver.normalizeDefault(column);\n }\n else {\n expression_1 += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n }\n else {\n expression_1 += \"DEFAULT\";\n }\n // support for SQL expressions in queries\n }\n else if (value instanceof Function) {\n expression_1 += value();\n // just any other regular value\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver)\n value = _this.connection.driver.parametrizeValue(column, value);\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n _this.expressionMap.nativeParameters[paramName] = value;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + column.srid + \")\";\n }\n else {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression_1 += \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression_1 += \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression_1 += column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression_1 += _this.connection.driver.createParameter(paramName, parametersCount_1);\n }\n parametersCount_1++;\n }\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL \";\n }\n else {\n expression_1 += \")\";\n }\n }\n else {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL UNION ALL \";\n }\n else {\n expression_1 += \"), \";\n }\n }\n }\n else {\n expression_1 += \", \";\n }\n });\n });\n if (expression_1 === \"()\")\n return \"\";\n return expression_1;\n }\n else { // for tables without metadata\n // get values needs to be inserted\n var expression_2 = \"\";\n var parametersCount_2 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, insertionIndex) {\n var columns = Object.keys(valueSet);\n columns.forEach(function (columnName, columnIndex) {\n if (columnIndex === 0) {\n expression_2 += \"(\";\n }\n var paramName = \"i\" + insertionIndex + \"_\" + columnName;\n var value = valueSet[columnName];\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression_2 += value();\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if (_this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) {\n expression_2 += \"NULL\";\n }\n else {\n expression_2 += \"DEFAULT\";\n }\n // just any other regular value\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n expression_2 += _this.connection.driver.createParameter(paramName, parametersCount_2);\n parametersCount_2++;\n }\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression_2 += \")\";\n }\n else {\n expression_2 += \"), \";\n }\n }\n else {\n expression_2 += \", \";\n }\n });\n });\n if (expression_2 === \"()\")\n return \"\";\n return expression_2;\n }\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n InsertQueryBuilder.prototype.getValueSets = function () {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n throw new InsertValuesMissingError();\n };\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n InsertQueryBuilder.prototype.isOverridingAutoIncrementBehavior = function (column) {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some(function (valueSet) {\n return column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null;\n });\n };\n return InsertQueryBuilder;\n}(QueryBuilder));\nexport { InsertQueryBuilder };\n\n//# sourceMappingURL=InsertQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar UpdateQueryBuilder = /** @class */ (function (_super) {\n __extends(UpdateQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function UpdateQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n UpdateQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n UpdateQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, updateSql, parameters, updateResult, statements, result, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata, this.expressionMap.valuesSet);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), updateSql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n statements = [declareSql, updateSql, selectOutputSql];\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n result = _b.sent();\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof AuroraDataApiDriver) {\n updateResult.raw = result;\n updateResult.affected = result.numberOfRecordsUpdated;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Values needs to be updated.\n */\n UpdateQueryBuilder.prototype.set = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n UpdateQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n UpdateQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n UpdateQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n UpdateQueryBuilder.prototype.createUpdateExpression = function () {\n var _this = this;\n var valuesSet = this.getValueSet();\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var updatedColumns = [];\n var newParameters = {};\n var parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(function (propertyPath) {\n // todo: make this and other query builder to work with properly with tables without metadata\n var columns = metadata.findColumnsWithPropertyPath(propertyPath);\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n columns.forEach(function (column) {\n if (!column.isUpdate) {\n return;\n }\n updatedColumns.push(column);\n var paramName = \"upd_\" + column.databaseName;\n //\n var value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = NULL\");\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver) {\n value = _this.connection.driver.parametrizeValue(column, value);\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n }\n var expression = null;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + column.srid + \")\";\n }\n else {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression = \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression = _this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n }\n else {\n Object.keys(valuesSet).map(function (key) {\n var value = valuesSet[key];\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(key) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(key) + \" = NULL\");\n }\n else {\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n }\n else {\n _this.expressionMap.nativeParameters[key] = value;\n }\n updateColumnAndValues.push(_this.escape(key) + \" = \" + _this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n UpdateQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n UpdateQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n UpdateQueryBuilder.prototype.getValueSet = function () {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n throw new UpdateValuesMissingError();\n };\n return UpdateQueryBuilder;\n}(QueryBuilder));\nexport { UpdateQueryBuilder };\n\n//# sourceMappingURL=UpdateQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { DeleteResult } from \"./result/DeleteResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../index\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar DeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(DeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n DeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n DeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, broadcastResult, deleteResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 11, 16, 21]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n deleteResult = new DeleteResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof MysqlDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.affectedRows;\n }\n else if (driver instanceof AuroraDataApiDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.numberOfRecordsUpdated;\n }\n else if (driver instanceof SqlServerDriver || driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n deleteResult.raw = result[0] ? result[0] : null;\n // don't return 0 because it could confuse. null means that we did not receive this value\n deleteResult.affected = typeof result[1] === \"number\" ? result[1] : null;\n }\n else if (driver instanceof OracleDriver) {\n deleteResult.affected = result;\n }\n else if (driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n deleteResult.raw = result;\n deleteResult.affected = result.changes;\n }\n else {\n deleteResult.raw = result;\n }\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, deleteResult];\n case 11:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 15];\n _b.label = 12;\n case 12:\n _b.trys.push([12, 14, , 15]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 13:\n _b.sent();\n return [3 /*break*/, 15];\n case 14:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 15];\n case 15: throw error_1;\n case 16:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 18];\n return [4 /*yield*/, queryRunner.release()];\n case 17:\n _b.sent();\n _b.label = 18;\n case 18:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 20];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20: return [7 /*endfinally*/];\n case 21: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n DeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates DELETE express used to perform query.\n */\n DeleteQueryBuilder.prototype.createDeleteExpression = function () {\n var tableName = this.getTableName(this.getMainTableName());\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"DELETE FROM \" + tableName + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return \"DELETE FROM \" + tableName + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"DELETE FROM \" + tableName + whereExpression;\n }\n };\n return DeleteQueryBuilder;\n}(QueryBuilder));\nexport { DeleteQueryBuilder };\n\n//# sourceMappingURL=DeleteQueryBuilder.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/Dragger/DragHelper\"), exports);\n__exportStar(require(\"./client/Dragger/DraggedElement\"), exports);\n__exportStar(require(\"./client/HotkeyManager\"), exports);\n__exportStar(require(\"./client/InputSelect\"), exports);\n__exportStar(require(\"./client/ViewHelper\"), exports);\n//# sourceMappingURL=client.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst cs_event_manager_1 = require(\"cs-event-manager\");\nclass EventManager extends cs_event_manager_1.EventManager {\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=EventManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TemplateSite = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst MasterSite_1 = require(\"./Delegate/MasterSite\");\n/**\n * Die Seite bekommt ein Template übergeben und ersetzt in diesem Template das mit dem Selector gefundene\n * Element mit der angebenen View\n */\nclass TemplateSite extends MasterSite_1.MasterSite {\n /**\n * Constructor für eine TemplateSite\n *\n * @param siteManager\n * @param view\n * @param template\n * @param selectorToReplace\n */\n constructor(siteManager, view, template, selectorToReplace) {\n super(siteManager, template);\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(selectorToReplace).replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n}\nexports.TemplateSite = TemplateSite;\n//# sourceMappingURL=TemplateSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = void 0;\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist\n * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind\n */\nclass Menu {\n /**\n * Setzt die Renderer und die initialen Actions\n *\n * @param renderer\n * @param actions\n */\n constructor(renderer, actions) {\n this._actions = [];\n this._renderers = [];\n this._submenus = [];\n if (Array.isArray(renderer)) {\n this._renderers = renderer;\n }\n else {\n this._renderers = [renderer];\n }\n //Initialisiert onClickListener\n this._onClickListener = this._generateOnClickListener();\n //Setze die Actions so, um einzelne Actions noch zu überprüfen\n Helper_1.Helper.nonNull(actions, []).forEach(action => {\n this.addAction(action, false);\n });\n this._openSubmenuListener = null;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n * @param menu\n * @return {Menu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Menu());\n menu._actions = [];\n this._actions.forEach(action => {\n menu.addAction(action.copy());\n });\n menu._renderers = this._renderers;\n menu._onClickListener = this._onClickListener;\n return menu;\n }\n /**\n * Schließt das Menü, hauptsächlich hier zum Schließen der Submenüs.\n * Zum öffnen wird nicht so eine Funktion gebraucht, da beim öffnen nicht die untermenüs geöffnet werden sollen\n */\n close() {\n this._submenus.forEach(submenu => {\n submenu.close();\n });\n }\n /**\n * Fügt eine Action dem Menü hinzu\n *\n * @param action\n * @param redraw\n */\n addAction(action, redraw) {\n //Überprüfung, ob es die richtige Klasse ist und ob die Action nicht schon hinzugefügt wurde\n if (action instanceof MenuAction_1.MenuAction && this._actions.indexOf(action) === -1) {\n //Falls es sich um ein Submenu handelt, füge dieses hinzu\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._submenus.push(action.getSubmenu());\n }\n this._actions.push(action);\n action.setMenu(this);\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n }\n removeAllActions(redraw) {\n this._actions.forEach(action => action.setMenu(null));\n this._actions = [];\n this._submenus = [];\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n /**\n * Sortiert die Actions und sagt danach den Renderern, dass diese das Menü zeuchnen sollen\n */\n draw() {\n try {\n this.sortActions();\n this._renderers.forEach(renderer => {\n renderer.render(this);\n });\n }\n catch (e) {\n console.error(e);\n }\n }\n /**\n * Sortiert die Actions der Order nach\n */\n sortActions() {\n this._actions = this._actions.sort(function (first, second) {\n return first.getOrder() - second.getOrder();\n });\n }\n openSubmenu(submenu) {\n if (this._openSubmenuListener) {\n this._openSubmenuListener(submenu);\n }\n }\n setOpenSubmenuListener(listener) {\n this._openSubmenuListener = listener;\n }\n /**\n * Generiert den defaultmäßigen onclick-listener.\n * @returns {Function}\n * @private\n */\n _generateOnClickListener() {\n return (event) => {\n let _element = event.target;\n //Falls es eine Action oder ein Unterlement einer Action war...\n if (_element.matches('li') || _element.matches('li *')) {\n //...finde das zugehörige Element und lese ID aus\n _element = _element.closest(\"li\");\n let actionId = parseInt(_element.dataset[\"id\"]);\n //Schaue nach, welche Action angeklickt wurde\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n //Falls action eine Funktion (und kein Link), sowie aktiv ist, führe action aus\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n //Gebe gefundene Action zurück\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n }\n return null;\n };\n }\n /**\n * Setzt den OnClickListener\n *\n * @param listener\n */\n setOnClickListener(listener) {\n this._onClickListener = listener;\n }\n /**\n * Gibt den OnClickListener zurück\n *\n * @returns {*}\n */\n getOnClickListener() {\n return this._onClickListener;\n }\n /**\n * Gibt die Actions zurück\n * @returns {Array}\n */\n getActions() {\n return this._actions;\n }\n /**\n * Triggert ein neues Rendern für eine Action. Das entsprechende ActionElement wird ausgetauscht\n * @param action\n */\n redrawAction(action) {\n this._renderers.forEach(renderer => {\n renderer._triggerRenderAction(action);\n });\n }\n /**\n * Updated das entsprechende ActionElement abhängig vom Renderer. Das Element wird nicht ausgetauscht\n * @param action\n */\n updateAction(action) {\n this._renderers.forEach(renderer => {\n renderer.updateAction(action);\n });\n }\n /**\n * alias für draw\n */\n redraw() {\n this.draw();\n }\n}\nexports.Menu = Menu;\n//# sourceMappingURL=Menu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccordionRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst MenuRenderer_1 = require(\"./MenuRenderer\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst Translator_1 = require(\"../../../Translator\");\n/**\n * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist\n */\nclass AccordionRenderer extends MenuRenderer_1.MenuRenderer {\n /**\n * Rendert eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderAction(action) {\n let linkElement = this.renderLinkElement(action);\n let liElement = this.renderLiElement(action);\n liElement.insertBefore(linkElement, liElement.firstChild);\n return liElement;\n }\n /**\n * Rendert das AnchorElement für eine Action\n * @param action\n * @returns {HTMLAnchorElement}\n */\n renderLinkElement(action) {\n let aElement = document.createElement(\"a\");\n if (typeof action.getAction() === 'string') {\n aElement.href = action.getAction();\n }\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n let iconElement = document.createElement(\"img\");\n iconElement.src = action.getIcon();\n iconElement.classList.add('action-image');\n if (action.isShouldTranslate()) {\n iconElement.dataset[\"translationTitle\"] = action.getName();\n iconElement.classList.add(Translator_1.Translator.getInstance().getTranslationClass());\n }\n else {\n iconElement.title = action.getName();\n }\n aElement.appendChild(iconElement);\n }\n let name = action.getName();\n // debugger;\n if (action.isShouldTranslate()) {\n name = Translator_1.Translator.makePersistentTranslation(name);\n }\n else {\n name = document.createTextNode(name);\n }\n aElement.appendChild(name);\n return aElement;\n }\n /**\n * Render das LI-Element für eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderLiElement(action) {\n let liElement = document.createElement(\"li\");\n if (action.getLiClass().trim() !== \"\") {\n liElement.classList.add(...action.getLiClass().split(\" \"));\n }\n // liElement.appendChild(aElement);\n liElement.dataset[\"id\"] = action.getId();\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n liElement.classList.add(\"img\");\n }\n if (!action.isVisible()) {\n liElement.classList.add(\"hidden\");\n }\n liElement.classList.add(action.getShowFor());\n return liElement;\n }\n /**\n * Da abgeleitet von DropdownRenderer, muss eine Klasse wieder entfernt werden\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.remove('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('is-accordion-submenu-parent');\n return submenuActionElement;\n }\n /**\n * erstellt ein SubmenuParent für Accordion\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-accordion-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet ein ActionElement\n * @param action\n */\n updateAction(action) {\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n this.getElementForAction(action).setAttribute(\"aria-expanded\", true);\n submenuElement.classList.add(\"js-active\");\n submenuElement.style = \"\";\n }\n else {\n this.getElementForAction(action).removeAttribute(\"aria-expanded\");\n submenuElement.classList.remove(\"js-activ\");\n submenuElement.style = \"display:none;\";\n }\n }\n }\n}\nexports.AccordionRenderer = AccordionRenderer;\n//# sourceMappingURL=AccordionRenderer.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst _typeorm = require(\"typeorm\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst XSSHelper_1 = require(\"js-helper/dist/shared/XSSHelper\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nlet typeorm = _typeorm;\n// if (typeorm.default) {\n// typeorm = typeorm.default;\n// }\nclass EasySyncPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.find({\n \"id\": typeorm.In(ids)\n }, null, null, null, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.findOne({\n \"id\": id\n }, null, null, relations);\n });\n }\n static findByClientId(id, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, id, relations);\n });\n }\n static findByClientIds(ids, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, ids, relations);\n });\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (Helper_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns_(entities[index]);\n this._handleRelations_(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations_(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns_(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n}\nexports.EasySyncPartialModel = EasySyncPartialModel;\nEasySyncPartialModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass FileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"src\"] = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[\"saveOffline\"] = { type: BaseDatabase_1.BaseDatabase.TYPES.BOOLEAN, default: 1 };\n return columns;\n }\n getServerUrl(appendDate) {\n appendDate = Helper_1.Helper.nonNull(appendDate, true);\n if (!this.src.startsWith(\"http\") && !this.src.startsWith(\"//\") && !this.src.startsWith(\"data\")) {\n let path = FileMedium.PUBLIC_PATH + this.src;\n if (appendDate) {\n path += \"?t=\" + new Date(this.updatedAt).getTime();\n }\n return path;\n }\n return this.src;\n }\n getUrl() {\n if (device.platform !== \"browser\" && this.saveOffline && this._isDownloaded && Helper_1.Helper.isNotNull(this.id) && !this.src.startsWith(\"data\") && !this.src.startsWith(\"http\")) {\n return \"cdvfile://localhost/persistent/\" + this.src;\n }\n else {\n return this.getServerUrl();\n }\n }\n toString() {\n console.warn(\"to string called on FileMedium. Only for dependency. Please look inside your sourcecode\");\n return this.getUrl();\n }\n}\nexports.FileMedium = FileMedium;\nFileMedium.PUBLIC_PATH = \"./\";\nFileMedium.SCHEMA_NAME = \"FileMedium\";\nBaseDatabase_1.BaseDatabase.addModel(FileMedium);\n//# sourceMappingURL=FileMedium.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Role = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Access_1 = require(\"./Access\");\nclass Role extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n this.accesses = null;\n this.parents = null;\n this.children = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"accesses\"] = {\n target: Access_1.Access.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleAccess\"\n },\n cascade: false\n };\n relations[\"parents\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n relations[\"children\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n return relations;\n }\n}\nexports.Role = Role;\nRole.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Role);\n//# sourceMappingURL=Role.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartUserSiteMenuAction = void 0;\nconst UserMenuAction_1 = require(\"./UserMenuAction\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nclass StartUserSiteMenuAction extends UserMenuAction_1.UserMenuAction {\n constructor(name, access, site, showFor, order, icon) {\n super(name, access, () => {\n if (client_1.StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n client_1.StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n client_1.StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartUserSiteMenuAction = StartUserSiteMenuAction;\n//# sourceMappingURL=StartUserSiteMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FilePromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FileWriterPromise_1 = require(\"./FileWriterPromise\");\nclass FilePromise {\n constructor(fileEntry) {\n this.fileEntry = fileEntry;\n }\n createWriter() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res) => {\n this.fileEntry.createWriter(writer => {\n res(new FileWriterPromise_1.FileWriterPromise(writer));\n });\n });\n });\n }\n static open(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n options = Helper_1.Helper.nonNull(options, { create: true, exclusive: false });\n return new Promise((r, rej) => {\n window[\"resolveLocalFileSystemURL\"](\"cdvfile://localhost/persistent/\", dirEntry => {\n dirEntry.getFile(file, options, fileEntry => {\n r(new FilePromise(fileEntry));\n }, rej);\n }, rej);\n });\n });\n }\n}\nexports.FilePromise = FilePromise;\n//# sourceMappingURL=FilePromise.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationUpdater = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationUpdater(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs set or add operation on a relation.\n */\n RelationUpdater.prototype.update = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updateSet, updateSet_1, ofs, parameters_1, conditions_1, condition, of_1, updateSet, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, bulkInserted_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!(relation.isManyToOne || relation.isOneToOneOwner)) return [3 /*break*/, 2];\n updateSet = relation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = value instanceof Object ? joinColumn.referencedColumn.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 10];\n case 2:\n if (!((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null)) return [3 /*break*/, 4];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n conditions_1.push(column.propertyPath + \" = :\" + parameterName);\n });\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 10];\n case 4:\n if (!(relation.isOneToOneNotOwner || relation.isOneToMany)) return [3 /*break*/, 6];\n if (Array.isArray(this.expressionMap.of))\n throw new Error(\"You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.\");\n of_1 = this.expressionMap.of;\n updateSet = relation.inverseRelation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = of_1 instanceof Object ? joinColumn.referencedColumn.getEntityValue(of_1) : of_1;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!value || (Array.isArray(value) && !value.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute()];\n case 5:\n _a.sent();\n return [3 /*break*/, 10];\n case 6:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n bulkInserted_1 = [];\n firstColumnValues.forEach(function (firstColumnVal) {\n secondColumnValues_1.forEach(function (secondColumnVal) {\n var inserted = {};\n junctionMetadata_1.ownerColumns.forEach(function (column) {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata_1.inverseColumns.forEach(function (column) {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted_1.push(inserted);\n });\n });\n if (!bulkInserted_1.length)\n return [2 /*return*/];\n if (!(this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(bulkInserted_1.map(function (value) {\n return _this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(value)\n .execute();\n }))];\n case 7:\n _a.sent();\n return [3 /*break*/, 10];\n case 8: return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(bulkInserted_1)\n .execute()];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n return RelationUpdater;\n}());\nexport { RelationUpdater };\n\n//# sourceMappingURL=RelationUpdater.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationRemover = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationRemover(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs remove operation on a relation.\n */\n RelationRemover.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, ofs, values_1, updateSet_1, parameters_1, conditions_1, condition, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, parameters_2, conditions_2, condition;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!relation.isOneToMany) return [3 /*break*/, 2];\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values_1 = Array.isArray(value) ? value : [value];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n conditions_1.push.apply(conditions_1, __spreadArray([], __read(values_1.map(function (value, valueIndex) {\n return __spreadArray(__spreadArray([], __read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n return column.propertyPath + \" = :\" + parameterName;\n }))), __read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return column.propertyPath + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n parameters_2 = {};\n conditions_2 = [];\n firstColumnValues.forEach(function (firstColumnVal, firstColumnValIndex) {\n conditions_2.push.apply(conditions_2, __spreadArray([], __read(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {\n return __spreadArray(__spreadArray([], __read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {\n var parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))), __read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {\n var parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_2.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata_1.tableName)\n .where(condition)\n .setParameters(parameters_2)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return RelationRemover;\n}());\nexport { RelationRemover };\n\n//# sourceMappingURL=RelationRemover.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { RelationUpdater } from \"./RelationUpdater\";\nimport { RelationRemover } from \"./RelationRemover\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationQueryBuilder = /** @class */ (function (_super) {\n __extends(RelationQueryBuilder, _super);\n function RelationQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n RelationQueryBuilder.prototype.getQuery = function () {\n return \"\";\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sets entity (target) which relations will be updated.\n */\n RelationQueryBuilder.prototype.of = function (entity) {\n this.expressionMap.of = entity;\n return this;\n };\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n RelationQueryBuilder.prototype.set = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToMany || relation.isOneToMany)\n throw new Error(\"Set operation is only supported for many-to-one and one-to-one relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .add() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.add = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, remover;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set(null) method instead.\");\n remover = new RelationRemover(this, this.expressionMap);\n return [2 /*return*/, remover.remove(value)];\n });\n });\n };\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.addAndRemove = function (added, removed) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.remove(removed)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.add(added)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets entity's relation id.\n async getId(): Promise {\n\n }*/\n /**\n * Gets entity's relation ids.\n async getIds(): Promise {\n return [];\n }*/\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n RelationQueryBuilder.prototype.loadOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.loadMany().then(function (results) { return results[0]; })];\n });\n });\n };\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n RelationQueryBuilder.prototype.loadMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var of, metadata;\n return __generator(this, function (_a) {\n of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new Error(\"Cannot load entity because only one primary key was specified, however entity contains multiple primary keys\");\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n return [2 /*return*/, this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner)];\n });\n });\n };\n return RelationQueryBuilder;\n}(QueryBuilder));\nexport { RelationQueryBuilder };\n\n//# sourceMappingURL=RelationQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareManager = void 0;\nconst ShareDialog_1 = require(\"./ShareDialog\");\nclass ShareManager {\n share(text) {\n if (device.platform === \"browser\") {\n this._shareBrowser(text);\n }\n else {\n this._shareMobile(text);\n }\n }\n _shareMobile(text) {\n navigator[\"share\"](text);\n }\n _shareBrowser(text) {\n new ShareDialog_1.ShareDialog(text).show();\n }\n}\nexports.ShareManager = ShareManager;\n//# sourceMappingURL=ShareManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseDatabase_1 = require(\"./BaseDatabase\");\nclass BaseModel {\n constructor() {\n this.id = null;\n this._isLoaded = false;\n }\n getId() {\n return this.id;\n }\n setId(id) {\n this.id = id;\n }\n static getColumnDefinitions() {\n return {\n id: {\n primary: true,\n type: BaseDatabase_1.BaseDatabase.TYPES.INTEGER,\n generated: true\n },\n };\n }\n static getRelationDefinitions() {\n return {};\n }\n static getRelations() {\n return Object.keys(this.getRelationDefinitions());\n }\n static getSchemaDefinition() {\n let columns = this.getColumnDefinitions();\n Object.keys(columns).forEach(column => {\n if (typeof columns[column] === \"string\") {\n columns[column] = { type: columns[column] };\n }\n if (columns[column].type === BaseDatabase_1.BaseDatabase.TYPES.MY_JSON && !columns[column].transformer) {\n columns[column].type = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[column].transformer = {\n from: text => {\n return (text ? JSON.parse(text) : null);\n },\n to: json => {\n return (json ? JSON.stringify(json) : \"\");\n }\n };\n }\n });\n return {\n name: this.getSchemaName(),\n target: this,\n columns: columns,\n relations: this.getRelationDefinitions()\n };\n }\n static getSchemaName() {\n if (!this.SCHEMA_NAME) {\n this.SCHEMA_NAME = this.name;\n }\n return this.SCHEMA_NAME;\n }\n setLoaded(isLoaded) {\n this._isLoaded = isLoaded;\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.saveEntity(this);\n });\n }\n delete() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.deleteEntity(this);\n });\n }\n static deleteMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.deleteEntity(entities);\n });\n }\n static saveMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.saveEntity(entities);\n });\n }\n static find(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findEntities(this, where, order, limit, offset, relations);\n });\n }\n static findAndCount(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findAndCountEntities(this, where, order, limit, offset, relations);\n });\n }\n static findOne(where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findOneEntity(this, where, order, offset, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findById(this, id, relations);\n });\n }\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findByIds(this, ids, relations);\n });\n }\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.clearModel(this);\n });\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.every((subA, index) => {\n this.equals(subA, b[index]);\n });\n }\n else if (a instanceof this && b instanceof this) {\n return a.constructor === b.constructor && a.getId() === b.getId();\n }\n }\n}\nexports.BaseModel = BaseModel;\n/**\n * @type {null | BaseDatabase}\n * @private\n */\nBaseModel._database = null;\nBaseModel.RELATION = {\n MANY_TO_MANY: \"many-to-many\",\n MANY_TO_ONE: \"many-to-one\",\n ONE_TO_MANY: \"one-to-many\",\n ONE_TO_ONE: \"one-to-one\"\n};\n//# sourceMappingURL=BaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nclass SyncJob {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromise = Promise.resolve();\n this._queryRunner = null;\n this._finalRes = {};\n this._manyToManyRelations = {};\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (Object.keys(this._lastSyncDates).length === 0) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n yield this._doRuns(requestQueries);\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //disabled in doRuns. Cannot be reenabled sooner, but since lastSyncDates should not have any relations, it should be okay\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().rawQuery(\"PRAGMA foreign_keys = ON;\");\n if (this._finalRes[\"FileMedium\"] && this._finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(yield FileMedium_1.FileMedium.findByIds(this._finalRes[\"FileMedium\"][\"changed\"]));\n }\n return this._finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n //startTransaction maybe allow read, but not write?\n this._queryRunner = yield EasySyncClientDb_1.EasySyncClientDb.getInstance().createQueryRunner();\n this._savePromise = this._queryRunner.query(\"PRAGMA foreign_keys = OFF;\").then(() => {\n return this._queryRunner.startTransaction();\n });\n //Ask for next run until no more runs needed\n let shouldAskAgain;\n do {\n shouldAskAgain = false;\n response = yield SyncJob._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query and save changes\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (res && res.shouldAskAgain) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n //Extract entities\n this._extractEntities(res);\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n yield this._handleManyToManyRelations();\n //wait for savePromises, stop transaction\n return this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.commitTransaction();\n })).catch((e) => __awaiter(this, void 0, void 0, function* () {\n console.error(e);\n yield this._queryRunner.rollbackTransaction();\n })).finally(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.release();\n }));\n });\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return;\n }\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedEntities = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedEntities.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n let schemaDefinition = modelClass.getSchemaDefinition();\n let relations = schemaDefinition[\"relations\"];\n let columns = schemaDefinition[\"columns\"];\n let changedEntityIds = [];\n changedEntities.forEach(entity => {\n Object.keys(relations).forEach(relation => {\n if (relations[relation].type === \"many-to-many\" && Array.isArray(entity[relation])) {\n let table = relations[relation].joinTable;\n let ownName;\n if (table.joinColumn && table.joinColumn.name) {\n ownName = table.joinColumn.name;\n }\n else {\n ownName = modelClass.getSchemaName();\n ownName = ownName.substr(0, 1).toLowerCase() + ownName.substr(1) + \"Id\";\n }\n let otherName;\n if (table.inverseJoinColumn && table.inverseJoinColumn.name) {\n otherName = table.inverseJoinColumn.name;\n }\n else {\n otherName = relations[relation].target;\n otherName = otherName.substr(0, 1).toLowerCase() + otherName.substr(1) + \"Id\";\n }\n this._manyToManyRelations[table.name] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name], {});\n this._manyToManyRelations[table.name][\"values\"] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"values\"], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"delete_\" + ownName], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName].push(entity.id);\n let otherIdsAlreadyInserted = [];\n let insertedRelations = this._manyToManyRelations[table.name][\"values\"].filter(relValue => relValue[ownName] === entity.id);\n insertedRelations.forEach(relValue => otherIdsAlreadyInserted.push(relValue[otherName]));\n entity[relation].forEach(otherId => {\n let index = otherIdsAlreadyInserted.indexOf(otherId);\n if (index === -1) {\n let value = {};\n value[ownName] = entity.id;\n value[otherName] = otherId;\n this._manyToManyRelations[table.name][\"values\"].push(value);\n }\n });\n }\n else if ((relations[relation].type === \"many-to-one\"\n || (relations[relation].type === \"one-to-one\" && relations[relation].joinColumn))\n //DO not check for a value of the relation here. Else If the first entity has no value set, the field\n // will not be set and therefore ignored for all other entites too\n ) {\n let fieldName;\n if (relations[relation].joinColumn && relations[relation].joinColumn.name) {\n fieldName = relations[relation].joinColumn.name;\n }\n else {\n fieldName = relation + \"Id\";\n }\n entity[fieldName] = entity[relation];\n }\n delete entity[relation];\n });\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n changedEntityIds.push(entity.id);\n });\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._insertOrReplace(modelClass, changedEntities); }));\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._deleteModels(modelClass, deletedModelsIds); }));\n this._finalRes[modelName] = shared_1.Helper.nonNull(this._finalRes[modelName], { \"deleted\": [], \"changed\": [] });\n this._finalRes[modelName][\"deleted\"].push(...deletedModelsIds);\n this._finalRes[modelName][\"changed\"].push(...changedEntityIds);\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n _insertOrReplace(modelClass, changedEntities) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_INSERT_IN_ONE_GO = 300;\n if (changedEntities.length === 0) {\n return;\n }\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = schemaDefinition.name;\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let columns = schemaDefinition.columns;\n //Get fields from entity for including relation fields\n const fields = Object.keys(changedEntities[0]);\n let values = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(changedEntities, (entity) => __awaiter(this, void 0, void 0, function* () {\n let valueString = [];\n //Stellt die reihenfolge sicher\n fields.forEach(field => {\n let val = entity[field];\n if (columns[field] && columns[field].transformer) {\n val = columns[field].transformer.to(val);\n }\n if (columns[field] && columns[field].type === BaseDatabase_1.BaseDatabase.TYPES.SIMPLE_JSON) {\n val = JSON.stringify(val);\n }\n values.push(val);\n valueString.push(\"?\");\n });\n valueStrings.push(\"(\" + valueString.join(\",\") + \")\");\n if (valueStrings.length >= MAX_INSERT_IN_ONE_GO) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n valueStrings = [];\n values = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n }\n });\n }\n _deleteModels(modelClass, deletedModelsIds) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_DELETES_IN_ONE_GO = 300;\n if (deletedModelsIds.length === 0) {\n return;\n }\n let tableName = modelClass.getSchemaName();\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let ids = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(deletedModelsIds, (entityId) => __awaiter(this, void 0, void 0, function* () {\n ids.push(entityId);\n valueStrings.push(\"?\");\n if (valueStrings.length >= MAX_DELETES_IN_ONE_GO) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n valueStrings = [];\n ids = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n }\n });\n }\n _handleManyToManyRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._savePromise;\n let promises = [];\n Object.keys(this._manyToManyRelations).forEach(table => {\n let sql = \"DELETE FROM \" + table + \" WHERE \";\n let deleteSqls = [];\n Object.keys(this._manyToManyRelations[table]).forEach(field => {\n if (field.startsWith(\"delete_\")) {\n deleteSqls.push(field.substr(7) + \" IN (\" + this._manyToManyRelations[table][field].join(\",\") + \")\");\n }\n });\n sql += deleteSqls.join(\" OR \") + \";\";\n promises.push(this._queryRunner.query(sql).then(() => {\n if (this._manyToManyRelations[table].values.length > 0) {\n let fields = Object.keys(this._manyToManyRelations[table].values[0]);\n let valueStrings = [];\n this._manyToManyRelations[table].values.forEach(valuePair => {\n let values = [];\n fields.forEach(field => {\n values.push(valuePair[field]);\n });\n valueStrings.push(\"(\" + values.join(\",\") + \")\");\n });\n let sql = \"INSERT OR REPLACE INTO \" + table + \"(\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\") + \";\";\n return this._queryRunner.query(sql);\n }\n }));\n });\n yield Promise.all(promises);\n });\n }\n}\nexports.SyncJob = SyncJob;\nSyncJob.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeleteUserManagement1000000000000 = void 0;\nclass DeleteUserManagement1000000000000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"roleAccess\", true);\n yield queryRunner.dropTable(\"roleChildren\", true);\n yield queryRunner.dropTable(\"userRole\", true);\n if (this._isServer()) {\n yield queryRunner.dropTable(\"user_access\", true);\n }\n yield queryRunner.dropTable(\"access\", true);\n yield queryRunner.dropTable(\"role\", true);\n yield queryRunner.dropTable(\"user\", true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.DeleteUserManagement1000000000000 = DeleteUserManagement1000000000000;\n//# sourceMappingURL=DeleteUserManagement.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupUserManagement1000000001000 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupUserManagement1000000001000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._addAccess(queryRunner);\n yield this._addRole(queryRunner);\n yield this._addUser(queryRunner);\n yield this._addRoleAccess(queryRunner);\n yield this._addRoleChildren(queryRunner);\n yield this._addUserRole(queryRunner);\n if (this._isServer()) {\n yield this._addUserAccess(queryRunner);\n }\n });\n }\n _addAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let accessTable = new typeorm_1.Table({\n name: \"access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(accessTable, true);\n });\n }\n _addRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleTable = new typeorm_1.Table({\n name: \"role\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(roleTable, true);\n });\n }\n _addUser(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userTable = new typeorm_1.Table({\n name: \"user\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"username\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"email\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"password\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"activated\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"blocked\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"salt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n ]\n });\n return yield queryRunner.createTable(userTable, true);\n });\n }\n _addRoleAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleAccessTable = new typeorm_1.Table({\n name: \"roleAccess\",\n columns: [\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"accessId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_38300dd4683a436f8db90b42bd\",\n columnNames: [\"roleId\"]\n },\n {\n name: \"IDX_bd55fc382ad2480f75a17e33cb\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_38300dd4683a436f8db90b42bd9\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_bd55fc382ad2480f75a17e33cb5\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleAccessTable, true);\n });\n }\n _addRoleChildren(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleChildrenTable = new typeorm_1.Table({\n name: \"roleChildren\",\n columns: [\n {\n name: \"childId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"parentId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_030234c342756c67cefa480687\",\n columnNames: [\"childId\"]\n },\n {\n name: \"IDX_35741f2d68a65c2765047705f8\",\n columnNames: [\"parentId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_roleChildren_childId\",\n columnNames: [\"childId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_roleChildren_parentId\",\n columnNames: [\"parentId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleChildrenTable, true);\n });\n }\n _addUserRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"userRole\",\n columns: [\n {\n name: \"userId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_userRole_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userRole_roleId\",\n columnNames: [\"roleId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userRole_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userRole_roleId\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n _addUserAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"user_access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"userId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n },\n {\n name: \"accessId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n }\n ],\n indices: [\n {\n name: \"IDX_userAccess_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userAccess_accessId\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userAccess_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userAccess_accessId\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupUserManagement1000000001000 = SetupUserManagement1000000001000;\n//# sourceMappingURL=SetupUserManagement.js.map","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config = {\n translations: {},\n fallbackLanguage: \"en\",\n markUntranslatedTranslations: true,\n markTranslations: false,\n logMissingTranslations: true\n }) {\n this._dynamicKey = 0;\n this._translations = {};\n this.addDynamicTranslations(Translator._translations);\n this.addDynamicTranslations(config.translations);\n this._fallbackLanguage = config.fallbackLanguage;\n this._markUntranslatedTranslations = config.markUntranslatedTranslations;\n this._markTranslations = config.markTranslations;\n if (config.logMissingTranslations === true) {\n this._logMissingTranslationsFunction = (missingTranslation, language) => {\n if (language === this._fallbackLanguage) {\n console.error(\"missing base translation for key \" + missingTranslation);\n }\n else {\n console.warn(\"missing translation for language >\" + language + \"< and key >\" + missingTranslation + \"<\");\n }\n };\n }\n else if (typeof config.logMissingTranslations === \"function\") {\n this._logMissingTranslationsFunction = config.logMissingTranslations;\n }\n else {\n this._logMissingTranslationsFunction = null;\n }\n this._translationCallbacks = new Map();\n this._lastTranslationCallbackId = 0;\n }\n createDynamicKey() {\n this._dynamicKey++;\n return \"translator-dynamic-\" + new Date().getTime() + \"-\" + this._dynamicKey;\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @param language\n * @returns {*}\n */\n translate(key, args, language) {\n if (shared_1.Helper.isNull(key)) {\n return \"\";\n }\n language = shared_1.Helper.nonNull(language, args, this._fallbackLanguage);\n let translation = null;\n key = key.toLowerCase();\n if (shared_1.Helper.isNotNull(this._translations[language]) && shared_1.Helper.isNotNull(this._translations[language][key])) {\n translation = this._translations[language][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n if (this._translations[this._fallbackLanguage]) {\n translation = this._translations[this._fallbackLanguage][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n translation = key;\n }\n if (this._markUntranslatedTranslations) {\n translation = \">>\" + translation + \"<<\";\n }\n }\n if (this._markTranslations) {\n translation = \"$\" + translation + \"$\";\n }\n if (args !== undefined) {\n translation = Translator._format(translation, args);\n }\n return translation;\n }\n /**\n * Fügt neue Übersetzungen hinzu\n * @param trans\n */\n addDynamicTranslations(trans) {\n for (let lang in trans) {\n if (!this._translations[lang]) {\n this._translations[lang] = {};\n }\n for (let key in trans[lang]) {\n this._translations[lang][key.toLowerCase()] = trans[lang][key];\n }\n }\n }\n getLanguages() {\n return Object.keys(this._translations);\n }\n getFallbackLanguage() {\n return this._fallbackLanguage;\n }\n static translate(key, args, language) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.translate(key, args, language);\n }\n return \"\";\n }\n static addDynamicTranslations(trans) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addDynamicTranslations(trans);\n }\n else {\n Object.keys(trans).forEach(lang => {\n if (shared_1.Helper.isNull(Translator._translations[lang])) {\n Translator._translations[lang] = {};\n }\n Object.assign(Translator._translations[lang], trans[lang]);\n });\n }\n }\n static init(config) {\n Translator.instance = new Translator(config);\n }\n /**\n * @returns {Translator|null}\n */\n static getInstance() {\n return Translator.instance;\n }\n static _isValid(translation) {\n return (typeof translation === \"string\");\n }\n static _format(translation, args) {\n return translation.replace(/{(\\d+)}/g, function (match, number) {\n return args[number] !== undefined ? args[number] : match;\n });\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { MissingDeleteDateColumnError } from \"../error/MissingDeleteDateColumnError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SoftDeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(SoftDeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SoftDeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SoftDeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n SoftDeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, returningResultsEntityUpdator, _a, sql, parameters, updateResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n }\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SoftDeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SoftDeleteQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SoftDeleteQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n SoftDeleteQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n SoftDeleteQueryBuilder.prototype.createUpdateExpression = function () {\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n if (!metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.expressionMap.mainAlias + \"\\\"\");\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var newParameters = {};\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new Error(\"The queryType must be \\\"soft-delete\\\" or \\\"restore\\\"\");\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n return SoftDeleteQueryBuilder;\n}(QueryBuilder));\nexport { SoftDeleteQueryBuilder };\n\n//# sourceMappingURL=SoftDeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XSSHelper = void 0;\nclass XSSHelper {\n static escapeHTML(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n const MAP = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function (m) {\n return MAP[m];\n });\n }\n static escapeJS(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n return text.replace(/[<]([\\\\s]*\\\\\\/?[\\\\s]*)script([^<]*)[>]/g, function (match, p1, p2) {\n return \"<\" + p1 + \"sc‌ript\" + p2 + \">\";\n });\n }\n}\nexports.XSSHelper = XSSHelper;\n//# sourceMappingURL=XSSHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SiteManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst AbstractSite_1 = require(\"./AbstractSite\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst Context_1 = require(\"./Context\");\nconst Translator_1 = require(\"../Translator\");\nconst DataManager_1 = require(\"../DataManager\");\nconst HistoryManager_1 = require(\"../HistoryManager\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Manager-Klasse für die Seiten\n */\nclass SiteManager {\n /**\n * Constructor für Manager. Fügt Listener für zurück (onpopstate) hinzu\n */\n constructor() {\n this._isInit = false;\n }\n /**\n *\n * @return {SiteManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new SiteManager();\n }\n return this._instance;\n }\n /**\n * @param siteDivId\n * @param deepLinks\n */\n init(siteDivId, deepLinks) {\n this._siteDiv = null;\n this._siteStack = [];\n this._siteDiv = document.getElementById(siteDivId);\n this._titleTranslationCallbackId = null;\n this._appEndedListener = null;\n this._inversedDeepLinks = Helper_1.Helper.invertKeyValues(deepLinks);\n //Listener, welcher beim klicken auf Zurück oder Forward ausgeführt wird\n HistoryManager_1.HistoryManager.getInstance().setOnPopStateListener((state, direction) => {\n //Falls zurück\n if (direction === HistoryManager_1.HistoryManager.BACK) {\n this.goBack();\n }\n //Falls vorwärts\n else if (HistoryManager_1.HistoryManager.FORWARD === direction) {\n if (this._siteStack.indexOf(state.state.site) !== -1) {\n this.toForeground(state.state.site);\n }\n else {\n this.startSite(state.state.site.constructor, state.state.parameters);\n }\n }\n });\n //Cordova-Callbacks\n document.addEventListener(\"pause\", () => this._pauseSite(), false);\n document.addEventListener(\"resume\", () => __awaiter(this, void 0, void 0, function* () { return yield this._resumeSite(); }), false);\n document.addEventListener(\"menubutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onMenuPressed();\n }\n }, false);\n document.addEventListener(\"searchbutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onSearchPressed();\n }\n }, false);\n window.addEventListener(\"beforeunload\", e => {\n const returnMessage = this.beforeUnload(e);\n if (returnMessage !== null) {\n e.preventDefault();\n e.returnValue = returnMessage;\n return returnMessage;\n }\n });\n this._isInit = true;\n }\n setAppEndedListener(listener) {\n this._appEndedListener = listener;\n }\n goBack() {\n if (this._siteStack.length >= 1) {\n let site = this.getCurrentSite();\n if (site && site.onBackPressed() !== false) {\n this.endSite(site);\n }\n }\n }\n /**\n * gibt die aktuelle Seite zurück\n * @returns AbstractSite\n */\n getCurrentSite() {\n if (this._siteStack.length >= 1) {\n return this._siteStack[this._siteStack.length - 1];\n }\n return null;\n }\n /**\n * Erstellt eine neue Seite und zeigt diese an. ParamsPromise kann entweder ein Promise oder ein Objekt oder null sein.\n *\n * @param siteConstructor\n * @param paramsPromise\n * @returns {Promise}\n */\n startSite(siteConstructor, paramsPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n //Testen, ob der Constructor vom richtigen Typen ist\n if (!(siteConstructor.prototype instanceof AbstractSite_1.AbstractSite)) {\n throw {\n \"error\": \"wrong class given! Expected AbstractSite, given \" + siteConstructor.name\n };\n }\n EventManager_1.EventManager.trigger(\"site-manager-start-site\", {\n site: siteConstructor, paramPromise: paramsPromise\n });\n //Loading-Symbol, falls ViewParameters noch länger brauchen\n let loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n this._siteDiv.appendChild(loadingSymbol);\n //create Site\n let site = new siteConstructor(this);\n this._siteStack.unshift(site);\n //Wartet auf onConstruct, viewPromise, onViewLoaded und zeigt dann Seite\n Promise.resolve(paramsPromise).then((params) => __awaiter(this, void 0, void 0, function* () {\n site._onConstructPromise = site.onConstruct(Helper_1.Helper.nonNull(params, {}));\n yield Promise.all([site._onConstructPromise, site.getViewPromise()]);\n //If site is ended inside onConstruct, don't do anything\n if (site._state !== Context_1.Context.STATE_DESTROYED && site._state !== Context_1.Context.STATE_DESTROYING) {\n yield site.callOnViewLoaded();\n site._viewLoadedPromise.resolve();\n return this._show(site);\n }\n loadingSymbol.remove();\n })).catch((e) => {\n console.error(\"site start error for site \", siteConstructor.name, e);\n site.getFinishResolver().reject(e);\n loadingSymbol.remove();\n //Zeige alte Seite im Fehlerfall wieder an\n for (let i = this._siteStack.length - 1; i >= 0; i--) {\n if (this._siteStack[i] !== site) {\n return this._show(this._siteStack[i]);\n }\n }\n site._viewLoadedPromise.reject();\n });\n //Gebe Site-Promise zurück\n return site.getFinishPromise();\n });\n }\n updateUrl(site, args) {\n let url = this._generateUrl(site, args);\n HistoryManager_1.HistoryManager.getInstance().replaceState({\n 'site': site,\n 'parameters': args\n }, site.constructor.name, url);\n }\n _generateUrl(site, args) {\n let deepLink = this.getDeepLinkFor(site);\n let url = [location.protocol, '//', location.host, location.pathname].join('');\n if (Helper_1.Helper.isNotNull(deepLink)) {\n args[\"s\"] = deepLink;\n url = [url, DataManager_1.DataManager.buildQuery(args)].join('');\n }\n return url;\n }\n /**\n * Gibt einen DeepLink zurück\n *\n * @param site\n * @return string\n */\n getDeepLinkFor(site) {\n return this._inversedDeepLinks[site.constructor];\n }\n /**\n * Pausiert eine Seite\n *\n * @param site\n * @private\n */\n _pauseSite(site) {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && site._state === Context_1.Context.STATE_RUNNING) {\n site._pauseParameters = site.onPause();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n }\n }\n /**\n * Lässt eine Seite weiterlaufen\n *\n * @param site\n * @private\n */\n _resumeSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && (site._state === Context_1.Context.STATE_PAUSED || site._state === Context_1.Context.STATE_VIEW_LOADED)) {\n yield site.getViewPromise();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(site._view);\n yield Translator_1.Translator.getInstance().updateTranslations();\n if (Helper_1.Helper.isNull(site._historyId)) {\n site._historyId = HistoryManager_1.HistoryManager.getInstance().pushState({\n 'site': site,\n 'parameters': site.getParameters()\n }, site.constructor.name, this._generateUrl(site, site.getParameters()));\n }\n else {\n HistoryManager_1.HistoryManager.getInstance().stateToCurrentPosition(site._historyId);\n }\n yield site.onStart(site._pauseParameters);\n }\n });\n }\n /**\n * Zeigt eine Seite an\n *\n * @param site\n * @returns {Promise<*>}\n * @private\n */\n _show(site) {\n return __awaiter(this, void 0, void 0, function* () {\n //check if site is ended\n if (site._state === Context_1.Context.STATE_DESTROYING || site._state === Context_1.Context.STATE_DESTROYED) {\n return;\n }\n //Mache nichts, wenn Seite bereits angezeigt wird\n if (site._state === Context_1.Context.STATE_RUNNING && this.getCurrentSite() === site) {\n return;\n }\n //Speichere alte Seite\n this._pauseSite();\n //Zeige Ladesymbol\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n //Hinzufügen/Updaten zum SiteStack\n let currentSiteIndex = this._siteStack.indexOf(site);\n if (-1 !== currentSiteIndex) {\n this._siteStack.splice(currentSiteIndex, 1);\n }\n this._siteStack.push(site);\n //Anzeigen der Seite. Stelle sicher, dass die View wirklich geladen ist!\n return site.getViewPromise().then(() => __awaiter(this, void 0, void 0, function* () {\n //Stelle sicher, dass in der Zwischenzeit keine andere Seite gestartet wurde\n if (this.getCurrentSite() === site) {\n yield this._resumeSite(site);\n }\n }));\n });\n }\n /**\n * Beendet eine Seite. Muss nicht die aktive Seite sein\n *\n * @param site\n */\n endSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n // return site._onConstructPromise.then(async () => {\n //Aus Index entfernen\n let index = this._siteStack.indexOf(site);\n this._siteStack.splice(index, 1);\n //Seite war/ist die aktive Seite\n if (index === this._siteStack.length) {\n this._pauseSite(site);\n //Seite ist aktiv, zeige Ladesymbol\n this._siteDiv.appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol('overlay'));\n site.getFinishPromise().then(() => {\n let newSiteToShow = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(newSiteToShow)) {\n this.toForeground(newSiteToShow);\n }\n });\n }\n if (this._siteStack.length <= 0) {\n console.log(\"stack is empty, starting normal site!\");\n HistoryManager_1.HistoryManager.getInstance().cutStack(0);\n HistoryManager_1.HistoryManager.getInstance().go(-1 * history.length, true);\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(document.createTextNode(\"App ist beendet\"));\n if (typeof this._appEndedListener === \"function\") {\n this._appEndedListener(this);\n }\n }\n site._context = Context_1.Context.STATE_DESTROYING;\n yield site.onDestroy();\n site._context = Context_1.Context.STATE_DESTROYED;\n site.getFinishResolver().resolve(site._result);\n });\n }\n /**\n * Stellt eine aktive Seite in den Vordergrund;\n * @param site\n * @returns {Promise<*>}\n */\n toForeground(site) {\n return this._show(site);\n }\n /**\n * Updated den Seitentitel. Dafür gibt es im translation-file den Key document-title (document-title-empty, falls title null),\n * der als Parameter in der Übersetzung den übergebenen Title übergeben bekommt.\n *\n * Der übergebene title wird mit den angebenenen argumenten zuerst übersetz, bevor der gesamte document-Title überstzt wird\n *\n * Wenn args === false, dann wird title nicht übersetzt\n *\n * Durch das argument titleTemplate kann der key im translation-file von document-title individuell abweichen\n *\n * @param title\n * @param args\n * @param titleTemplate\n */\n updateTitle(title, args, titleTemplate) {\n titleTemplate = Helper_1.Helper.nonNull(titleTemplate, Helper_1.Helper.isNull(title) ? \"document-title-empty\" : \"document-title\");\n if (Helper_1.Helper.isNotNull(this._titleTranslationCallbackId)) {\n Translator_1.Translator.removeTranslationCallback(this._titleTranslationCallbackId);\n }\n this._titleTranslationCallbackId = Translator_1.Translator.addTranslationCallback(() => {\n if (args !== false) {\n title = Translator_1.Translator.translate(title, args);\n }\n document.title = Translator_1.Translator.translate(titleTemplate, [title]);\n });\n }\n beforeUnload(e) {\n return this.getCurrentSite().onBeforeUnload(e);\n }\n}\nexports.SiteManager = SiteManager;\nSiteManager._instance = null;\n//# sourceMappingURL=SiteManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DraggedElement = void 0;\nclass DraggedElement {\n constructor(element) {\n this.isDragging = false;\n this.element = element;\n }\n onStart(listener) {\n this.startListener = listener;\n return this;\n }\n onStop(listener) {\n this.stopListener = listener;\n return this;\n }\n onMove(listener) {\n this.moveListener = listener;\n return this;\n }\n start() {\n this.isDragging = true;\n if (!this.previewElement) {\n this.previewElement = this.element.cloneNode(true);\n const styles = getComputedStyle(this.element);\n for (let i = 0; i < styles.length; i++) {\n this.previewElement.style[styles[i]] = styles.getPropertyValue(styles[i]);\n }\n this.previewElement.style.opacity = \"0.6\";\n this.previewElement.style.position = \"fixed\";\n }\n const boundingRect = this.element.getBoundingClientRect();\n this.startPosition = { x: boundingRect.left, y: boundingRect.top };\n this.previewElement.style.top = boundingRect.top + \"px\";\n this.previewElement.style.left = boundingRect.left + \"px\";\n this.previewElement.style.width = (boundingRect.right - boundingRect.left) + \"px\";\n this.previewElement.style.height = (boundingRect.bottom - boundingRect.top) + \"px\";\n document.body.appendChild(this.previewElement);\n if (this.startListener) {\n this.startListener(this.element);\n }\n }\n stop(mousePosition) {\n this.isDragging = false;\n if (this.previewElement) {\n this.previewElement.remove();\n }\n const droppedAt = document.elementFromPoint(mousePosition.x, mousePosition.y);\n if (this.stopListener) {\n this.stopListener(this.element, droppedAt);\n }\n }\n moved() {\n if (this.isDragging && this.moveListener) {\n this.moveListener(this.element);\n }\n }\n moveRelativeTo(relativePos) {\n if (this.startPosition && this.previewElement) {\n const newPosition = { x: this.startPosition.x + relativePos.x, y: this.startPosition.y + relativePos.y };\n this.previewElement.style.left = newPosition.x + \"px\";\n this.previewElement.style.top = newPosition.y + \"px\";\n this.moved();\n }\n }\n}\nexports.DraggedElement = DraggedElement;\n//# sourceMappingURL=DraggedElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotOnlineError = void 0;\nclass NotOnlineError extends Error {\n constructor(message, url) {\n super(message + \" for url \" + url);\n this._url = url;\n }\n}\nexports.NotOnlineError = NotOnlineError;\n//# sourceMappingURL=NotOnlineError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\n/**\n * Manager, welcher sich um die Manipulation von der Historie kümmert\n */\nclass HistoryManager {\n /**\n * Constructor für den Manager. Fügt den onPopstateListener hinzu\n */\n constructor() {\n this._lastStateId = -1;\n this._states = {};\n this._stack = [];\n this._ignoreOnPopState = false;\n this._isUpdateNativeStack = false;\n this._onPopStateListener = null;\n this._currentStackIndex = -1;\n window.onpopstate = (e) => {\n //Wenn nativeStack geupdated wird, mache nichts\n if (this._isUpdateNativeStack) {\n this._isUpdateNativeStack = false;\n return;\n }\n let direction = e.state[\"type\"];\n this._currentStackIndex += direction;\n this._updateNativeHistoryStack();\n //Wenn popState ignoriert werden soll, mache ebenfalls nichts außer Stack updaten\n if (this._ignoreOnPopState) {\n this._ignoreOnPopState = false;\n return;\n }\n //Wenn Listener gesetzt, hole daten und führe Listener aus\n if (typeof this._onPopStateListener === 'function') {\n let data = {};\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n data = this._states[this._stack[this._currentStackIndex]];\n }\n this._onPopStateListener(data, direction, e);\n }\n };\n this._updateNativeHistoryStack();\n }\n /**\n * Updated den History-Stack innerhalb des Browsers\n *\n * @param url\n * @private\n */\n _updateNativeHistoryStack(url) {\n url = Helper_1.Helper.nonNull(url, window.location.href);\n //setze das weitere zurückgehen\n if (this._currentStackIndex >= 0) {\n history.pushState({\n \"type\": HistoryManager.BACK,\n }, \"back\", url);\n }\n history.pushState({\n \"type\": HistoryManager.CURRENT,\n }, \"current\", url);\n if (this._currentStackIndex < this._stack.length - 1) {\n history.pushState({\n \"type\": HistoryManager.FORWARD,\n }, \"forward\", url);\n this._isUpdateNativeStack = true;\n history.go(-1);\n }\n }\n /**\n * Generiert einen neuen History-Eintrag. Gibt die ID des Eintrages zurück\n *\n * @param value\n * @param name\n * @param url\n *\n * @return {number}\n */\n pushState(value, name, url) {\n let newState = {\n state: value,\n title: name,\n url: url\n };\n this._lastStateId++;\n this._states[this._lastStateId] = newState;\n this._currentStackIndex++;\n this._stack.splice(this._currentStackIndex, this._stack.length, this._lastStateId);\n this._updateNativeHistoryStack(url);\n return this._lastStateId;\n }\n /**\n * Ersetzt den Eintrag mit der gegebenen ID. Ist die ID nicht gegeben, wird der aktuelle Eintrag ersetzt\n *\n * @param value\n * @param name\n * @param url\n * @param id\n */\n replaceState(value, name, url, id) {\n id = Helper_1.Helper.nonNull(id, this._stack[this._currentStackIndex]);\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n this._states[id] = {\n state: value,\n title: name,\n url: url\n };\n this._updateNativeHistoryStack(url);\n }\n }\n /**\n * Verschiebt den Eintrag mit der entsprechenden ID an die aktuell aktive Stelle\n * @param id\n */\n stateToCurrentPosition(id) {\n if (Helper_1.Helper.isNotNull(this._states[id])) {\n let oldStackPosition = this._stack.indexOf(id);\n if (oldStackPosition !== -1) {\n this._stack.splice(oldStackPosition, 1);\n this._stack.splice(this._currentStackIndex + ((oldStackPosition <= this._currentStackIndex) ? -1 : 0), 0, id);\n }\n }\n }\n /**\n * Gehe um to in der Historie\n *\n * @param to\n * @param ignoreOnPopState\n */\n go(to, ignoreOnPopState) {\n this._ignoreOnPopState = (Helper_1.Helper.nonNull(ignoreOnPopState, false) === true);\n history.go(to);\n }\n /**\n * Entferne alle Einträge ab at (inklusive). Wenn at nicht gesetzt ist, wird alles über der aktuellen position abgeschnitten\n * @param at\n */\n cutStack(at) {\n at = Helper_1.Helper.nonNull(at, this._currentStackIndex + 1);\n this._stack.splice(at);\n this._currentStackIndex = Math.min(this._currentStackIndex, this._stack.length - 1);\n this._updateNativeHistoryStack();\n }\n /**\n * Alias für this.go(-1)\n */\n back() {\n this.go(-1);\n }\n /**\n * Alias für this.go(1)\n */\n forward() {\n this.go(+1);\n }\n /**\n * Setzt den onPopStateListener\n *\n * @param listener\n */\n setOnPopStateListener(listener) {\n this._onPopStateListener = listener;\n }\n /**\n * Singelton-Getter\n * @return {HistoryManager}\n */\n static getInstance() {\n if (Helper_1.Helper.isNull(HistoryManager._instance)) {\n HistoryManager._instance = new HistoryManager();\n }\n return HistoryManager._instance;\n }\n}\nexports.HistoryManager = HistoryManager;\nHistoryManager.BACK = -1;\nHistoryManager.FORWARD = 1;\nHistoryManager.CURRENT = 0;\n//# sourceMappingURL=HistoryManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorIndicator = void 0;\nconst Singleton_1 = require(\"../Singleton\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ColorIndicator extends Singleton_1.Singleton {\n getAverageImgColor(imgEl, areaWidth, areaHeight) {\n //https://stackoverflow.com/questions/2541481/get-average-color-of-image-via-javascript\n let blockSize = 5, // only visit every 5 pixels\n defaultRGB = { r: 255, g: 255, b: 255 }, // for non-supporting envs\n canvas = document.createElement('canvas'), context = canvas.getContext && canvas.getContext('2d'), data, width, height, i = -4 * blockSize, //start with first pixel\n length, rgb = { r: 0, g: 0, b: 0 }, count = 0;\n if (!context) {\n return defaultRGB;\n }\n height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;\n width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;\n areaWidth = Helper_1.Helper.nonNull(areaWidth, width);\n areaHeight = Helper_1.Helper.nonNull(areaWidth, height);\n context.drawImage(imgEl, 0, 0);\n try {\n data = context.getImageData(0, 0, Math.min(width, areaWidth), Math.min(height, areaHeight));\n }\n catch (e) {\n /* security error, img on diff domain */\n console.error(e);\n return defaultRGB;\n }\n length = data.data.length;\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb.r += data.data[i];\n rgb.g += data.data[i + 1];\n rgb.b += data.data[i + 2];\n }\n // ~~ used to floor values\n rgb.r = ~~(rgb.r / count);\n rgb.g = ~~(rgb.g / count);\n rgb.b = ~~(rgb.b / count);\n return rgb;\n }\n invertColorBW(r, g, b) {\n return this.invertColor(r, g, b, true);\n }\n invertColor(r, g, b, bw) {\n if (typeof r === \"object\") {\n bw = g || bw;\n g = r.g;\n b = r.b;\n r = r.r;\n }\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? { r: 0, g: 0, b: 0 }\n : { r: 255, g: 255, b: 255 };\n }\n // invert color components\n r = (255 - r);\n g = (255 - g);\n b = (255 - b);\n // pad each with zeros and return\n return {\n r: r,\n g: g,\n b: b,\n };\n }\n toHEX(r, g, b) {\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n r = r.toString(16);\n g = g.toString(16);\n b = b.toString(16);\n return \"#\" + Helper_1.Helper.padZero(r) + Helper_1.Helper.padZero(g) + Helper_1.Helper.padZero(b);\n }\n}\nexports.ColorIndicator = ColorIndicator;\n//# sourceMappingURL=ColorIndicator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Singleton = void 0;\nclass Singleton {\n /**\n *\n * @returns {Singleton|this}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new this();\n }\n return this._instance;\n }\n}\nexports.Singleton = Singleton;\n//# sourceMappingURL=Singleton.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MasterSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass MasterSite extends AbstractSite_1.AbstractSite {\n constructor(siteManager, view) {\n super(siteManager, view);\n this._delegates = [];\n }\n addDelegate(delegateSite) {\n this._delegates.push(delegateSite);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onConstruct(constructParameters);\n }));\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onStart(pauseArguments);\n }));\n });\n }\n onBackPressed() {\n super.onBackPressed();\n this._delegates.forEach(delegate => {\n delegate.onBackPressed();\n });\n }\n onMenuPressed() {\n super.onMenuPressed();\n this._delegates.forEach(delegate => {\n delegate.onMenuPressed();\n });\n }\n onSearchPressed() {\n super.onSearchPressed();\n this._delegates.forEach(delegate => {\n delegate.onSearchPressed();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onViewLoaded();\n }));\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onPause.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onPause();\n }));\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onDestroy.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onDestroy();\n }));\n });\n }\n}\nexports.MasterSite = MasterSite;\n//# sourceMappingURL=MasterSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ToastManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nclass ToastManager {\n constructor() {\n this._toastContainer = document.querySelector(ToastManager._toastContainerSelector);\n this._toastTemplate = this._toastContainer.querySelector(\".toast-template\");\n this._toastTemplate.classList.remove(\"toast-template\");\n this._toastTemplate.remove();\n }\n showToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = toast.getMessage();\n if (toast.isShouldTranslate()) {\n message = Translator_1.Translator.makePersistentTranslation(message, toast.getTranslationArgs());\n }\n else {\n message = document.createTextNode(message);\n }\n let toastElement = this._toastTemplate.cloneNode(true);\n toastElement.querySelector(\".message\").appendChild(message);\n toast.setToastElement(toastElement);\n this._toastContainer.appendChild(toastElement);\n toastElement.style.opacity = 1;\n return new Promise(resolve => {\n toastElement.querySelector(\".message\").onclick = () => {\n this.hideToast(toast);\n resolve(true);\n };\n setTimeout(() => {\n this.hideToast(toast);\n resolve(false);\n }, toast.getDuration());\n });\n });\n }\n hideToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n //TODO Animation hinzufügen\n let element = toast.getToastElement();\n if (Helper_1.Helper.isNotNull(element)) {\n element.style.opacity = 0;\n return new Promise(res => {\n setTimeout(() => {\n element.remove();\n res();\n }, 250);\n });\n }\n return Promise.reject(\"toast is not showing\");\n });\n }\n static setToastContainerSelector(selector) {\n ToastManager._toastContainerSelector = selector;\n }\n static getInstance() {\n if (!ToastManager._instance) {\n ToastManager._instance = new ToastManager();\n }\n return ToastManager._instance;\n }\n}\nexports.ToastManager = ToastManager;\nToastManager._instance = null;\nToastManager._toastContainerSelector = \"#toast-container\";\n//# sourceMappingURL=ToastManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DropdownRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst AccordionRenderer_1 = require(\"./AccordionRenderer\");\nconst Submenu_1 = require(\"../Submenu\");\n/**\n * Erstellt ein Dropdown-Menu\n */\nclass DropdownRenderer extends AccordionRenderer_1.AccordionRenderer {\n constructor(parentElement) {\n super(parentElement);\n this._accordionMenuRenderer = new AccordionRenderer_1.AccordionRenderer();\n }\n /**\n * Rendert die SubmenuAction\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.renderSubmenuAction(action);\n }\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.add('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('opens-right');\n return submenuActionElement;\n }\n /**\n * Erstellt ein SubmenuParent\n *\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.createSubmenuParentElement(action);\n }\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-dropdown-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet das Element für eine Action\n * @param action\n */\n updateAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.updateAction(action);\n }\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n submenuElement.classList.add(\"js-dropdown-active\");\n }\n else {\n submenuElement.classList.remove(\"js-dropdown-active\");\n }\n }\n }\n}\nexports.DropdownRenderer = DropdownRenderer;\n//# sourceMappingURL=DropdownRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuRenderer = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\n/**\n * Rendert ein Menü\n */\nclass MenuRenderer {\n /**\n * Jeder Renderer hat ein Element, wo er die gerenderten Elemente hinzufügt\n *\n * @param parentElement\n */\n constructor(parentElement) {\n this._parentElement = parentElement;\n this._renderedElements = {};\n }\n /**\n * Stößt das Rendern an\n * @param menu\n * @param parentElement\n */\n render(menu, parentElement) {\n let actions = menu.getActions();\n //Funktion wird auch für Submenüs genutzt. Daher muss hier ein anderes parentElement übergeben werden\n parentElement = Helper_1.Helper.nonNull(parentElement, this._parentElement);\n if (Helper_1.Helper.isNotNull(parentElement)) {\n Helper_1.Helper.removeAllChildren(parentElement);\n //Füge Elemente hinzu\n actions.forEach(action => {\n parentElement.appendChild(this.getElementForAction(action));\n });\n //Setze den onclick-Listener\n parentElement.onclick = (e) => {\n if (typeof menu.getOnClickListener() === 'function') {\n menu.getOnClickListener()(e);\n }\n };\n }\n }\n /**\n * Führt das Rendern der Elemente aus und ersetzt evtl schon alte Elemente\n * Auslagern von renderAction und renderSubmenuAction zum besseren überschreiben der Funktionen.\n *\n * renderSubmenuAction und renderAction sollten nur von dieser Funktion aufgerufen werden, damit die\n * _rendererElements aktuell bleiben!\n *\n * @param action\n * @returns {HTMLElement}\n * @private\n */\n _triggerRenderAction(action) {\n let oldElement = this._renderedElements[action.getId()];\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._renderedElements[action.getId()] = this.renderSubmenuAction(action);\n }\n else {\n this._renderedElements[action.getId()] = this.renderAction(action);\n }\n this.updateAction(action);\n if (Helper_1.Helper.isNotNull(oldElement)) {\n oldElement.replaceWith(this._renderedElements[action.getId()]);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Gibt das Element zur Action. Falls es noch nicht existiert, wird dieses gerendert\n * @param action\n * @returns {*}\n */\n getElementForAction(action) {\n if (Helper_1.Helper.isNull(this._renderedElements[action.getId()])) {\n this._triggerRenderAction(action);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n renderAction(action) {\n return null;\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n updateAction(action) {\n }\n /**\n * Rendert eine SubmenuAction, kann/sollte überladen werden\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let actionElement = this.renderAction(action);\n action.getSubmenu().sortActions();\n let submenuParentElement = this.createSubmenuParentElement(action);\n this.render(action.getSubmenu(), submenuParentElement);\n actionElement.appendChild(submenuParentElement);\n return actionElement;\n }\n ;\n /**\n * Erstellt ein Element für ein Submenu. Sollte überladen werden\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n return document.createElement(\"ul\");\n }\n}\nexports.MenuRenderer = MenuRenderer;\n//# sourceMappingURL=MenuRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Submenu = void 0;\nconst Menu_1 = require(\"./Menu\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Submenü, ein untermenü\n */\nclass Submenu extends Menu_1.Menu {\n /**\n * Constructor für ein Submenu\n *\n * Bekommt parameter für die OpenSubmenuAction übergeben und reicht diese weiter.\n * Renderer besitzt das Menü keine, da die Renderer des ParentMenus genutzt werden\n * Actions können nicht bei der Erstellung hinzugefügt werden\n *\n * @param title\n * @param showFor\n * @param order\n * @param icon\n * @param renderers\n */\n constructor(title, showFor, order, icon, renderers) {\n super(Helper_1.Helper.nonNull(renderers, []));\n this._parentAction = new OpenSubmenuAction_1.OpenSubmenuAction(title, this, showFor, order, icon);\n this._isOpen = false;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n *\n * @param menu\n * @return {Submenu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Submenu());\n menu = super.copy(menu);\n menu._isOpen = this._isOpen;\n return menu;\n }\n /**\n * Setzt die ParentAction\n *\n * @param action\n */\n setParentAction(action) {\n this._parentAction = action;\n }\n /**\n * Gibt das ParentMenu zurück\n */\n getParentMenu() {\n return this._parentAction.getMenu();\n }\n /**\n * Erstelle keinen onClickListener, damit der Listener aus dem Obermenü aufgerufen wird\n *\n * @returns {null}\n * @private\n */\n _generateOnClickListener() {\n return null;\n }\n /**\n * Wird vom Obermenü aufgerufen, um die ensprechende Action zu finden\n *\n * @param actionId\n * @param event\n * @returns {boolean}\n */\n click(actionId, event) {\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n if (!(this._actions[i] instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.close();\n }\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n return null;\n }\n /**\n * Öffnet oder schließt das Menü\n */\n toggle() {\n if (this._isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * öffnet das Menü und updatet die Elemente\n */\n open() {\n this._isOpen = true;\n this.openSubmenu(this);\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n openSubmenu(submenu) {\n this.getParentMenu().openSubmenu(submenu);\n }\n /**\n * schließt das Menü und updatet die Elemente\n */\n close() {\n this._isOpen = false;\n super.close();\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n /**\n * Gibt die ParentAction zurück\n *\n * @returns {OpenSubmenuAction}\n */\n getParentAction() {\n return this._parentAction;\n }\n /**\n * Updated eine Action. Da ein Submenu keine Renderer hat, muss es ans parentMenu weitergegeben werden\n * @param action\n */\n updateAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.updateAction(action);\n }\n }\n redrawAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.redrawAction(action);\n }\n }\n /**\n * Gibt an, ob das Submenu offen ist oder nicht\n *\n * @returns {boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n}\nexports.Submenu = Submenu;\n//# sourceMappingURL=Submenu.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeChildFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass SwipeChildFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, view);\n this._parent = null;\n }\n onSwipeRight() {\n return __awaiter(this, void 0, void 0, function* () {\n this.previousFragment();\n });\n }\n onSwipeLeft() {\n return __awaiter(this, void 0, void 0, function* () {\n this.nextFragment();\n });\n }\n setParent(parent) {\n this._parent = parent;\n }\n nextFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.nextFragment();\n }\n }\n previousFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.previousFragment();\n }\n }\n}\nexports.SwipeChildFragment = SwipeChildFragment;\n//# sourceMappingURL=SwipeChildFragment.js.map","module.exports = __webpack_public_path__ + \"html/chooseDialog.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElemChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nclass ElemChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n valueElem.querySelector(\".choose-dialog-value\").appendChild(valueNames[k]);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ElemChooseDialog = ElemChooseDialog;\n//# sourceMappingURL=ElemChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareDialog = void 0;\nconst Dialog_1 = require(\"../Dialog/Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Dialog/shareDialog.html\");\nclass ShareDialog extends Dialog_1.Dialog {\n constructor(textToShare) {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n view.querySelector(\"#whatsapp-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"\";\n linkToOpen = \"https://web.whatsapp.com/send?text=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n view.querySelector(\"#telegram-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"https://t.me/share/url?url=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n return view;\n }), \"Share\");\n }\n}\nexports.ShareDialog = ShareDialog;\n//# sourceMappingURL=ShareDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AudioChain = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass AudioChain {\n constructor(context, sourceBuffer, chainFunction) {\n this._buffer = sourceBuffer;\n this._shouldLoop = false;\n this._loopStart = null;\n this._loopEnd = null;\n this._chainFunction = chainFunction;\n this._context = context;\n this._startTime = null;\n this._pauseTime = null;\n this._source = null;\n this._running = false;\n }\n setBuffer(buffer) {\n this._buffer = buffer;\n }\n setLooping(shouldLoop, loopStart, loopEnd) {\n this._shouldLoop = shouldLoop;\n if (Helper_1.Helper.isNotNull(loopStart)) {\n this._loopStart = loopStart;\n }\n if (Helper_1.Helper.isNotNull(loopEnd)) {\n this._loopEnd = loopEnd;\n }\n }\n start(delay, offset, duration) {\n return __awaiter(this, void 0, void 0, function* () {\n //sind sonst null, schmeißt in Android 5 einen fehler\n delay = Helper_1.Helper.nonNull(delay, 0);\n offset = Helper_1.Helper.nonNull(offset, 0);\n //Duration darf nicht gesetzt werden\n // duration = Helper.nonNull(duration, -1);\n let source = this._context.createBufferSource();\n source.loop = this._shouldLoop;\n if (Helper_1.Helper.isNotNull(this._loopStart)) {\n source.loopStart = this._loopStart;\n }\n if (Helper_1.Helper.isNotNull(this._loopEnd)) {\n source.loopEnd = this._loopEnd;\n }\n source.buffer = this._buffer;\n yield this._chainFunction(source);\n if (Helper_1.Helper.isNull(duration)) {\n source.start(delay, offset);\n }\n else {\n source.start(delay, offset, duration);\n }\n this._startTime = (new Date()).getTime() - (Helper_1.Helper.nonNull(offset, 0) * 1000);\n this._source = source;\n this._running = true;\n });\n }\n stop(delay) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._source)) {\n delay = Helper_1.Helper.nonNull(delay, 0);\n this._pauseTime = ((new Date()).getTime()) - this._startTime;\n this._running = false;\n return this._source.stop(delay);\n }\n return null;\n });\n }\n resume() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._running) {\n return this.start(null, Helper_1.Helper.nonNull(this._pauseTime, 0) / 1000.0);\n }\n });\n }\n}\nexports.AudioChain = AudioChain;\n//# sourceMappingURL=AudioChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"cordova-sites/dist/shared\");\nconst deTranslations = require(\"../translations/de\");\nconst enTranslations = require(\"../translations/en\");\nclient_1.App.addInitialization(() => {\n shared_1.Translator.addDynamicTranslations({\n \"de\": deTranslations,\n \"en\": enTranslations\n });\n});\n//# sourceMappingURL=translationInit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Access = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass Access extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n}\nexports.Access = Access;\nAccess.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Access);\n//# sourceMappingURL=Access.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ForgotPasswordSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/forgotPasswordSite.html\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"./LoginSite\");\nclass ForgotPasswordSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite_1.LoginSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n if (client_1.Helper.isSet(constructParameters[\"t\"])) {\n this._token = constructParameters[\"t\"];\n }\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#forgot-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().sendForgotPasswordEmail(data[\"email\"])) {\n new client_1.Toast(\"forgot-password-mail sent\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email is not in our database\"\n });\n }\n }));\n let resetForm = new client_1.Form(this.findBy(\"#reset-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().resetPassword(this._token, data[\"password1\"])) {\n new client_1.Toast(\"password resetted\").show();\n yield this.finish();\n }\n else {\n yield new client_1.Toast(\"token is not valid!\").show();\n }\n }));\n resetForm.addValidator(data => {\n let errors = {};\n let hasErrors = false;\n if (data[\"password1\"].trim() === \"\") {\n hasErrors = true;\n errors[\"password1\"] = \"no password set\";\n }\n if (data[\"password1\"] !== data[\"password2\"]) {\n hasErrors = true;\n errors[\"password2\"] = \"not equal to password1\";\n }\n if (hasErrors) {\n return errors;\n }\n else {\n return true;\n }\n });\n if (this._token) {\n this.findBy(\"#reset-password\").classList.remove(\"hidden\");\n this.findBy(\"#forgot-password\").classList.add(\"hidden\");\n }\n return res;\n });\n }\n}\nexports.ForgotPasswordSite = ForgotPasswordSite;\nclient_1.App.addInitialization(app => {\n app.addDeepLink(\"forgotPW\", ForgotPasswordSite);\n});\n//# sourceMappingURL=ForgotPasswordSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotAllowedSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst view = require(\"./../../html/sites/notAllowedSite.html\");\nclass NotAllowedSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n onConstruct(constructParameters) {\n return super.onConstruct(constructParameters);\n }\n onCreateMenu(navbar) {\n return super.onCreateMenu(navbar);\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n yield this.finish();\n return res;\n });\n }\n}\nexports.NotAllowedSite = NotAllowedSite;\n//# sourceMappingURL=NotAllowedSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectUserDialog = void 0;\nconst Dialog_1 = require(\"cordova-sites/dist/client/js/Dialog/Dialog\");\nconst ViewInflater_1 = require(\"cordova-sites/dist/client/js/ViewInflater\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst view = require(\"../../html/dialog/selectUserDialog.html\");\nclass SelectUserDialog extends Dialog_1.Dialog {\n constructor() {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then((view) => __awaiter(this, void 0, void 0, function* () {\n this._loadUserTimeout = null;\n this._usernameInput =\n view.querySelector(\"#username-input\");\n this._usernameInput.addEventListener(\"keydown\", () => {\n clearTimeout(this._loadUserTimeout);\n this._loadUserTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this._loadUsers(this._usernameInput.value);\n }), 500);\n });\n this._userContainer = view.querySelector(\"#user-container\");\n this._userTemplate = view.querySelector(\"#user-template\");\n this._userTemplate.remove();\n this._userTemplate.removeAttribute(\"id\");\n this._loadUsers();\n return view;\n })), \"select user\");\n }\n _loadUsers(username) {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let res = yield DataManager_1.DataManager.load(\"user/listUsers\" + DataManager_1.DataManager.buildQuery({ username: Helper_1.Helper.nonNull(username, \"\") }));\n if (res[\"success\"]) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._userContainer);\n let users = res[\"data\"];\n users.forEach(user => {\n let userElement = this._userTemplate.cloneNode(true);\n userElement.querySelector(\".name\").innerText = user.username;\n userElement.addEventListener(\"click\", () => {\n this._result = user;\n this.close();\n });\n this._userContainer.appendChild(userElement);\n });\n }\n });\n }\n}\nexports.SelectUserDialog = SelectUserDialog;\n//# sourceMappingURL=SelectUserDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileTransferPromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FilePromise\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nclass FileTransferPromise {\n constructor(downloadUrl, storagePath) {\n this.downloadUrl = downloadUrl;\n if (Helper_1.Helper.isNull(storagePath)) {\n let parts = this.downloadUrl.split(\"/\");\n if (parts.length > 0) {\n storagePath = parts[parts.length - 1];\n }\n }\n this.storagePath = storagePath;\n }\n download() {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let blob = DataManager_1.DataManager.fetchBlob(this.downloadUrl);\n let filePromise = yield FilePromise_1.FilePromise.open(this.storagePath);\n let fileWriter = yield filePromise.createWriter();\n // blob = await blob;\n yield fileWriter.write(yield blob);\n });\n }\n}\nexports.FileTransferPromise = FileTransferPromise;\n//# sourceMappingURL=FileTransferPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileWriterPromise = void 0;\nclass FileWriterPromise {\n constructor(fileWriter) {\n this.fileWriter = fileWriter;\n this._isWritingPromise = Promise.resolve();\n }\n write(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._isWritingPromise.then(() => new Promise((res, rej) => {\n this.fileWriter.onwriteend = res;\n this.fileWriter.onerror = rej;\n this.fileWriter.write(data);\n }));\n this._isWritingPromise = promise.catch(console.error);\n return promise;\n });\n }\n}\nexports.FileWriterPromise = FileWriterPromise;\n//# sourceMappingURL=FileWriterPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass ClientModel extends cordova_sites_database_1.BaseModel {\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"] && columns[\"id\"][\"generated\"]) {\n columns[\"id\"][\"generated\"] = false;\n }\n return columns;\n }\n static _fromJson(jsonObjects, models, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n });\n }\n toJSON(includeFull) {\n }\n ;\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n yield this.constructor._fromJson(data, this, true);\n }\n return _super.save.call(this);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n entities = yield this._fromJson(data, undefined, true);\n }\n return _super.saveMany.call(this, entities);\n });\n }\n static getSchemaDefinition() {\n const TYPES_FOR_DEFAULT_ESCAPING = [\n cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT,\n cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n ];\n let definitions = super.getSchemaDefinition();\n let columns = definitions[\"columns\"];\n Object.keys(columns).forEach(column => {\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.TEXT;\n }\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.JSON) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON;\n }\n if (TYPES_FOR_DEFAULT_ESCAPING.indexOf(columns[column].type) !== -1) {\n columns[column].escapeJS = shared_1.Helper.nonNull(columns[column].escapeJS, true);\n columns[column].escapeHTML = shared_1.Helper.nonNull(columns[column].escapeHTML, true);\n }\n });\n return definitions;\n }\n}\nexports.ClientModel = ClientModel;\nClientModel.SAVE_PATH = \"/sync\";\nClientModel.DELETE_PATH = \"/sync/delete\";\n//# sourceMappingURL=ClientModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ClientPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super();\n this.clientId = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"]) {\n columns[\"id\"][\"primary\"] = false;\n columns[\"id\"][\"generated\"] = false;\n columns[\"id\"][\"nullable\"] = true;\n columns[\"id\"][\"unique\"] = true;\n }\n columns[\"clientId\"] = {\n type: \"integer\",\n primary: true,\n generated: true,\n };\n return columns;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n if (typeof this.clientId !== \"number\") {\n this.clientId = undefined;\n }\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n yield this.constructor._fromJson(data, this, true);\n }\n }\n return _super.save.call(this, true);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this, true);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n entities.forEach(entity => {\n if (typeof entity.clientId !== \"number\") {\n entity.clientId = undefined;\n }\n });\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n entities = yield this._fromJson(data, entities, true);\n }\n }\n return _super.saveMany.call(this, entities, true);\n });\n }\n}\nexports.ClientPartialModel = ClientPartialModel;\n//# sourceMappingURL=ClientPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccessEasySyncModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nclass AccessEasySyncModel extends shared_1.EasySyncBaseModel {\n}\nexports.AccessEasySyncModel = AccessEasySyncModel;\nAccessEasySyncModel.ACCESS_READ = true;\nAccessEasySyncModel.ACCESS_MODIFY = false;\nAccessEasySyncModel.CAN_BE_SYNCED = false;\n//# sourceMappingURL=AccessEasySyncModel.js.map","export default \"img/help.png\";","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar SqljsQueryRunner = /** @class */ (function (_super) {\n __extends(SqljsQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n SqljsQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.commitTransaction.call(this)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.driver.autoSave()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n SqljsQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (parameters === void 0) { parameters = []; }\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, result;\n return __generator(this, function (_a) {\n databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(function (p) { return typeof p !== 'undefined' ? p : null; });\n statement.bind(parameters);\n }\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n result = [];\n while (statement.step()) {\n result.push(statement.getAsObject());\n }\n statement.free();\n ok(result);\n }\n catch (e) {\n if (statement) {\n statement.free();\n }\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n fail(new QueryFailedError(query, parameters, e));\n }\n return [2 /*return*/];\n });\n }); });\n };\n return SqljsQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { SqljsQueryRunner };\n\n//# sourceMappingURL=SqljsQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { NativescriptQueryRunner } from \"./NativescriptQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\n/**\n * Organizes communication with sqlite DBMS within Nativescript.\n */\nvar NativescriptDriver = /** @class */ (function (_super) {\n __extends(NativescriptDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.database = _this.options.database;\n _this.driver = _this.options.driver;\n // validate options to make sure everything is set\n if (!_this.options.database) {\n throw new DriverOptionNotSetError(\"database\");\n }\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n NativescriptDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close().then(ok).catch(fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n NativescriptDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner) {\n this.queryRunner = new NativescriptQueryRunner(this);\n }\n return this.queryRunner;\n };\n NativescriptDriver.prototype.normalizeType = function (column) {\n if (column.type === Buffer) {\n return \"blob\";\n }\n return _super.prototype.normalizeType.call(this, column);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n NativescriptDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n readOnly: _this.options.readOnly,\n key: _this.options.key,\n multithreading: _this.options.multithreading,\n migrate: _this.options.migrate,\n iosFlags: _this.options.iosFlags,\n androidFlags: _this.options.androidFlags,\n }, _this.options.extra || {});\n new _this.sqlite(_this.options.database, options, function (err, db) {\n if (err)\n return fail(err);\n // use object mode to work with TypeORM\n db.resultType(_this.sqlite.RESULTSASOBJECT);\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n db.execSQL(\"PRAGMA foreign_keys = ON;\", [], function (err, result) {\n if (err)\n return fail(err);\n // We are all set\n ok(db);\n });\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n NativescriptDriver.prototype.loadDependencies = function () {\n this.sqlite = this.driver;\n if (!this.driver) {\n throw new DriverPackageNotInstalledError(\"Nativescript\", \"nativescript-sqlite\");\n }\n };\n return NativescriptDriver;\n}(AbstractSqliteDriver));\nexport { NativescriptDriver };\n\n//# sourceMappingURL=NativescriptDriver.js.map\n","import { __extends } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar NativescriptQueryRunner = /** @class */ (function (_super) {\n __extends(NativescriptQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n NativescriptQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n var connection = this.driver.connection;\n return new Promise(function (ok, fail) {\n var isInsertQuery = query.substr(0, 11) === \"INSERT INTO\";\n var handler = function (err, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n }\n else {\n // when isInsertQuery == true, result is the id\n ok(result);\n }\n };\n _this.driver.connection.logger.logQuery(query, parameters, _this);\n var queryStartTime = +new Date();\n _this.connect().then(function (databaseConnection) {\n if (isInsertQuery) {\n databaseConnection.execSQL(query, parameters, handler);\n }\n else {\n databaseConnection.all(query, parameters, handler);\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n NativescriptQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return NativescriptQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { NativescriptQueryRunner };\n\n//# sourceMappingURL=NativescriptQueryRunner.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nvar RawSqlResultsToEntityTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RawSqlResultsToEntityTransformer(expressionMap, driver, rawRelationIdResults, rawRelationCountResults, queryRunner) {\n this.expressionMap = expressionMap;\n this.driver = driver;\n this.rawRelationIdResults = rawRelationIdResults;\n this.rawRelationCountResults = rawRelationCountResults;\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n RawSqlResultsToEntityTransformer.prototype.transform = function (rawResults, alias) {\n var _this = this;\n var group = this.group(rawResults, alias);\n var entities = [];\n group.forEach(function (results) {\n var entity = _this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every(function (value) { return value === null; }))\n entities.push(entity);\n });\n return entities;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Groups given raw results by ids of given alias.\n */\n RawSqlResultsToEntityTransformer.prototype.group = function (rawResults, alias) {\n var _this = this;\n var map = new Map();\n var keys = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.columns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n else {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.primaryColumns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n rawResults.forEach(function (rawResult) {\n var id = keys.map(function (key) {\n var keyValue = rawResult[key];\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n return keyValue;\n }).join(\"_\"); // todo: check partial\n var items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n }\n else {\n items.push(rawResult);\n }\n });\n return map;\n };\n /**\n * Transforms set of data results into single entity.\n */\n RawSqlResultsToEntityTransformer.prototype.transformRawResultsGroup = function (rawResults, alias) {\n var _this = this;\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n var metadata = alias.metadata;\n if (metadata.discriminatorColumn) {\n var discriminatorValues_1 = rawResults.map(function (result) { return result[DriverUtils.buildColumnAlias(_this.driver, alias.name, alias.metadata.discriminatorColumn.databaseName)]; });\n var discriminatorMetadata = metadata.childEntityMetadatas.find(function (childEntityMetadata) {\n return typeof discriminatorValues_1.find(function (value) { return value === childEntityMetadata.discriminatorValue; }) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n var entity = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n // get value from columns selections and put them into newly created entity\n var hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n var hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n var hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n var hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n var hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(function (column) { return column.isVirtual === false; }).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n return undefined;\n };\n // get value from columns selections and put them into object\n RawSqlResultsToEntityTransformer.prototype.transformColumns = function (rawResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n var value = rawResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!_this.expressionMap.selects.find(function (select) { return select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath; }))\n return;\n column.setEntityValue(entity, _this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n };\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n RawSqlResultsToEntityTransformer.prototype.transformJoins = function (rawResults, entity, alias, metadata) {\n var _this = this;\n var hasData = false;\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n this.expressionMap.joinAttributes.forEach(function (join) {\n // skip joins without metadata\n if (!join.metadata)\n return;\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(function (relation) { return relation === join.relation; }))\n return;\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n }\n else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation.propertyPath)\n return;\n }\n // transform joined data into entities\n var result = _this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n }\n else { // otherwise set to relation\n join.relation.setEntityValue(entity, result);\n }\n hasData = true;\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n this.rawRelationIdResults.forEach(function (rawRelationIdResult) {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n var relation = rawRelationIdResult.relationIdAttribute.relation;\n var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n var idMaps = rawRelationIdResult.results.map(function (result) {\n var entityPrimaryIds = _this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n }\n else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n var idMap = columns.reduce(function (idMap, column) {\n var value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n }\n else {\n if (column.referencedColumn.referencedColumn) // if column is a relation\n value = column.referencedColumn.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));\n }\n }, {});\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n }\n else {\n return columns[0].referencedColumn.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(function (result) { return result !== undefined; });\n var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n var mapToProperty = function (properties, map, value) {\n var property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n }\n else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n }\n else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n }\n else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationCounts = function (rawSqlResults, alias, entity) {\n var _this = this;\n var hasData = false;\n this.rawRelationCountResults\n .filter(function (rawRelationCountResult) { return rawRelationCountResult.relationCountAttribute.parentAlias === alias.name; })\n .forEach(function (rawRelationCountResult) {\n var relation = rawRelationCountResult.relationCountAttribute.relation;\n var referenceColumnName;\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn.databaseName; // todo: fix joinColumns[0]\n }\n else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n }\n var referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(function (result) { return result[\"parentId\"] === referenceColumnValue; })\n .forEach(function (result) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.createValueMapFromJoinColumns = function (relation, parentAlias, rawSqlResults) {\n var _this = this;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (valueMap, column) {\n rawSqlResults.forEach(function (rawSqlResult) {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.databaseName)], column);\n }\n else {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.referencedColumn.databaseName)], column);\n }\n });\n return valueMap;\n }, {});\n };\n RawSqlResultsToEntityTransformer.prototype.extractEntityPrimaryIds = function (relation, relationIdRawResult) {\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (data, column) {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {});\n };\n return RawSqlResultsToEntityTransformer;\n}());\nexport { RawSqlResultsToEntityTransformer };\n\n//# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Counter = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Counter {\n constructor(value) {\n this._value = 0;\n if (value instanceof Counter) {\n value = value.current;\n }\n this._value = Helper_1.Helper.nonNull(value, 0);\n }\n next() {\n this._value++;\n return this._value;\n }\n current() {\n return this._value;\n }\n}\nexports.Counter = Counter;\n//# sourceMappingURL=Counter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet DateHelper = /** @class */ (() => {\n class DateHelper {\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string}\n */\n static strftime(sFormat, date, useUTC) {\n useUTC = Helper_1.Helper.nonNull(useUTC, false);\n date = Helper_1.Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, (sMatch) => {\n return {\n '%a': this.translate(aDaysShort[nDay]),\n '%A': this.translate(aDays[nDay]),\n '%b': this.translate(aMonths[nMonth].slice(0, 3)),\n '%B': this.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static translate(key) {\n if (this.translationCallback) {\n return this.translationCallback(key);\n }\n return key;\n }\n static setTranslationCallback(callback) {\n this.translationCallback = callback;\n }\n }\n DateHelper.FORMAT = {\n ISO_TIME: \"%Y-%m-%dT%H:%M%S\"\n };\n return DateHelper;\n})();\nexports.DateHelper = DateHelper;\n//# sourceMappingURL=DateHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MigrationHelper = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst Helper_1 = require(\"./Helper\");\nclass MigrationHelper {\n static isServer() {\n return (typeof document !== \"object\");\n }\n static addTableFromModelClass(modelClass, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createTableFromModelClass(modelClass));\n });\n }\n static addManyToManyTable(tableOne, tableTwo, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createManyToManyTable(tableOne, tableTwo));\n });\n }\n static createManyToManyTable(tableOne, tableTwo) {\n let fieldOne = tableOne + \"Id\";\n let fieldTwo = tableTwo + \"Id\";\n let name = tableOne + tableTwo.substr(0, 1).toUpperCase() + tableTwo.substr(1);\n let manyToManyTable = new typeorm_1.Table({\n name: name,\n columns: [\n {\n name: fieldOne,\n isPrimary: true,\n type: \"integer\"\n },\n {\n name: fieldTwo,\n isPrimary: true,\n type: \"integer\"\n }\n ],\n indices: [\n {\n name: \"IDX_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne]\n },\n {\n name: \"IDX_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne],\n referencedTableName: tableOne.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo],\n referencedTableName: tableTwo.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return manyToManyTable;\n }\n static createTableFromModelClass(modelClass, prefix) {\n prefix = Helper_1.Helper.nonNull(prefix, \"\");\n let columns = [];\n let indices = [];\n let foreignKeys = [];\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = prefix + Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n Object.keys(schemaDefinition.columns).forEach(column => {\n let columnConfig = {};\n Object.keys(schemaDefinition.columns[column]).forEach(key => {\n columnConfig[key] = schemaDefinition.columns[column][key];\n });\n columnConfig[\"name\"] = column;\n if (schemaDefinition.columns[column].primary) {\n columnConfig[\"isPrimary\"] = true;\n }\n if (schemaDefinition.columns[column].nullable) {\n columnConfig[\"isNullable\"] = true;\n }\n if (schemaDefinition.columns[column].generated) {\n //If it is not EasySyncBaseModel or server\n if (Helper_1.Helper.isNull(modelClass.CAN_BE_SYNCED) || this.isServer() || column === \"clientId\") {\n columnConfig[\"isGenerated\"] = true;\n columnConfig[\"generationStrategy\"] = \"increment\";\n if (!this.isServer()) {\n columnConfig[\"type\"] = \"INTEGER\";\n }\n }\n }\n if (typeof columnConfig[\"default\"] === \"string\") {\n columnConfig[\"default\"] = \"'\" + columnConfig[\"default\"] + \"'\";\n }\n else if (columnConfig[\"default\"] === true) {\n columnConfig[\"default\"] = 1;\n }\n else if (columnConfig[\"default\"] === false) {\n columnConfig[\"default\"] = 0;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.MEDIUMTEXT && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n columns.push(columnConfig);\n });\n Object.keys(schemaDefinition.relations).forEach(relation => {\n if (schemaDefinition.relations[relation].type === \"many-to-one\" || schemaDefinition.relations[relation].joinColumn) {\n // let columnName = Helper.toSnakeCase(relation) + \"Id\";\n let columnName = relation.substr(0, 1).toLowerCase() + relation.substr(1) + \"Id\";\n let columnConfig = {\n name: columnName,\n type: MigrationHelper.TYPES.INTEGER,\n isNullable: true\n };\n columns.push(columnConfig);\n let indexConfig = {\n name: \"IDX_\" + tableName + \"_\" + columnName,\n columnNames: [columnName]\n };\n indices.push(indexConfig);\n let foreignKeyConfig = {\n name: \"FK_\" + tableName + \"_\" + columnName,\n columnNames: [columnName],\n referencedTableName: Helper_1.Helper.toSnakeCase(schemaDefinition.relations[relation].target),\n referencedColumnNames: [\"id\"]\n };\n foreignKeys.push(foreignKeyConfig);\n }\n });\n return new typeorm_1.Table({\n name: tableName,\n columns: columns,\n indices: indices,\n foreignKeys: foreignKeys\n });\n }\n static updateModel(queryRunner, newModel) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = newModel.getSchemaDefinition();\n let tableName = Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n let newTable = this.createTableFromModelClass(newModel);\n let table = yield queryRunner.getTable(tableName);\n table.name = \"__temp__\" + table.name;\n table.indices.forEach(index => {\n index.name = \"__temp__\" + index.name;\n });\n table.foreignKeys.forEach(key => {\n key.name = \"__temp__\" + key.name;\n key.columnNames = [key.columnNames[0]];\n key.referencedColumnNames = [key.referencedColumnNames[0]];\n });\n if (MigrationHelper.isServer()) {\n table.columns.forEach(column => {\n if (column.default !== null && typeof column.default === \"string\" && column.default.startsWith(\"'\") && column.default.endsWith(\"'\") && (column.type !== \"varchar\" || column.default.startsWith(\"''\"))) {\n column.default = column.default.substring(1, column.default.length - 1);\n }\n });\n }\n yield queryRunner.createTable(table);\n let names = [];\n table.columns.forEach(column => {\n names.push(column.name);\n });\n yield queryRunner.query(\"INSERT INTO \" + table.name + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + tableName + \";\");\n yield queryRunner.query(\"DROP TABLE \" + tableName + \";\");\n yield queryRunner.createTable(newTable);\n let newColumnNames = [];\n newTable.columns.forEach(column => newColumnNames.push(column.name));\n names = [];\n table.columns.forEach(column => {\n if (newColumnNames.indexOf(column.name) !== -1) {\n names.push(column.name);\n }\n });\n yield queryRunner.query(\"INSERT INTO \" + tableName + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + table.name + \";\");\n yield queryRunner.query(\"DROP TABLE \" + table.name + \";\");\n });\n }\n}\nexports.MigrationHelper = MigrationHelper;\nMigrationHelper.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\"\n};\n//# sourceMappingURL=MigrationHelper.js.map","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Prioritized = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Prioritized {\n constructor(promises) {\n this._lastPriority = 0;\n this._status = 0;\n this._lastResult = null;\n this._success = {};\n this._highestPromise = null;\n promises = Helper_1.Helper.nonNull(promises, {});\n this._callbacks = [];\n if (Array.isArray(promises)) {\n let tmpPromises = {};\n promises.forEach((promise, i) => {\n tmpPromises[(i + 1) * 10] = promise;\n });\n promises = tmpPromises;\n }\n let highestPromiseResolver = null;\n this._highestPromise = new Promise(resolve => {\n highestPromiseResolver = resolve;\n });\n Object.keys(promises).forEach(priority => {\n this._success[priority] = null;\n promises[priority].then(res => {\n this._success[priority] = true;\n if (parseInt(priority) > this._lastPriority) {\n this._lastResult = res;\n this._lastPriority = parseInt(priority);\n this._callCallbacks();\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n else {\n this._status = 1;\n }\n }\n }).catch(e => {\n this._success[priority] = e;\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n });\n });\n this._promises = promises;\n }\n _callCallbacks() {\n this._callbacks.forEach(callback => {\n callback(this._lastResult, this._lastPriority);\n });\n }\n _checkHighest() {\n let isHighestResult = false;\n Object.keys(this._success).reverse().some(priority => {\n if (Helper_1.Helper.isNull(this._success[priority])) {\n //return true beendet some-schleife\n return true;\n }\n else if (this._success[priority] === true) {\n isHighestResult = true;\n return true;\n }\n });\n return isHighestResult;\n }\n do(callback) {\n if (this._status < 2) {\n this._callbacks.push(callback);\n }\n if (this._status > 0) {\n callback(this._lastResult, this._lastPriority);\n }\n }\n highest(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._highestPromise;\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.resolve(this._lastResult).then(funcOrPromise);\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n first(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._status === 0) {\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.race(Object[\"values\"](this._promises)).then(funcOrPromise);\n }\n else {\n return Promise.race(Object[\"values\"](this._promises));\n }\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n}\nexports.Prioritized = Prioritized;\n//# sourceMappingURL=Prioritized.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseWithHandlers = void 0;\nclass PromiseWithHandlers extends Promise {\n constructor(executor) {\n let resolver = null;\n let rejecter = null;\n super((res, rej) => {\n resolver = res;\n rejecter = rej;\n if (executor) {\n executor(resolver, rejecter);\n }\n });\n this.resolver = resolver;\n this.rejecter = rejecter;\n }\n resolve(value) {\n if (this.resolver) {\n this.resolver(value);\n }\n }\n reject(value) {\n if (this.rejecter) {\n this.rejecter(value);\n }\n }\n}\nexports.PromiseWithHandlers = PromiseWithHandlers;\n//# sourceMappingURL=PromiseWithHandlers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Random = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet Random = /** @class */ (() => {\n class Random {\n static seedRandom(seed) {\n this._seed = seed;\n }\n static getRandom() {\n let t = this._seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n static getIntRandom(maxValue) {\n return Math.floor(Random.getRandom() * (maxValue + 1));\n }\n static getStringRandom(numSigns, alphabet) {\n alphabet = Helper_1.Helper.nonNull(alphabet, \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\n let random = \"\";\n const numAlphabet = alphabet.length - 1;\n for (let i = 0; i < numSigns; i++) {\n random += alphabet[Random.getIntRandom(numAlphabet)];\n }\n return random;\n }\n }\n Random._seed = new Date().getTime();\n return Random;\n})();\nexports.Random = Random;\n//# sourceMappingURL=Random.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DragHelper = void 0;\nconst DraggedElement_1 = require(\"./DraggedElement\");\nclass DragHelper {\n constructor() {\n this.startPosition = null;\n this.currentDraggedElement = null;\n window.addEventListener(\"mousemove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchmove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n }\n });\n window.addEventListener(\"mouseup\", e => {\n if (e.button === 0) {\n this.dragStop({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchend\", e => {\n if (e.touches.length === 0) {\n this.dragStop({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY });\n }\n });\n }\n static getInstance() {\n if (!this.instance) {\n this.instance = new DragHelper();\n }\n return this.instance;\n }\n draggable(element) {\n const dragElement = new DraggedElement_1.DraggedElement(element);\n element.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n console.log(\"mousedown\", e.button);\n if (e.button === 0) {\n this.dragStart({ x: e.clientX, y: e.clientY }, dragElement);\n }\n });\n element.addEventListener(\"touchstart\", e => {\n e.preventDefault();\n if (e.touches.length === 1) {\n this.dragStart({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }, dragElement);\n }\n });\n return dragElement;\n }\n dragStart(position, draggedElement) {\n this.currentDraggedElement = draggedElement;\n this.startPosition = position;\n this.currentDraggedElement.start();\n }\n dragMove(toPosition) {\n if (this.currentDraggedElement) {\n const diff = { x: toPosition.x - this.startPosition.x, y: toPosition.y - this.startPosition.y };\n this.currentDraggedElement.moveRelativeTo(diff);\n }\n }\n dragStop(mousePos) {\n if (this.currentDraggedElement) {\n this.currentDraggedElement.stop(mousePos);\n this.currentDraggedElement = null;\n this.startPosition = null;\n }\n }\n}\nexports.DragHelper = DragHelper;\n//# sourceMappingURL=DragHelper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HotkeyManager = void 0;\nclass HotkeyManager {\n constructor() {\n this._keys = {};\n this._callbacks = {};\n this._lastCallbackId = 0;\n this._active = false;\n this.mousePosition = null;\n this._addListeners();\n this.ignoreFormElements = false;\n }\n static isFormElement(element) {\n return element instanceof HTMLInputElement\n || element instanceof HTMLSelectElement\n || element instanceof HTMLTextAreaElement;\n }\n getMousePosition() {\n return this.mousePosition;\n }\n _addListeners() {\n window.addEventListener(\"keydown\", e => {\n if (this.ignoreFormElements || !HotkeyManager.isFormElement(e.target)) {\n this._keys[e.key.toLowerCase()] = true;\n if (this._active) {\n this._checkCallbacks(e);\n }\n }\n });\n window.addEventListener(\"keyup\", e => {\n if (e.key) {\n this._keys[e.key.toLowerCase()] = false;\n }\n });\n document.addEventListener(\"mousemove\", e => {\n this.mousePosition = { x: e.clientX, y: e.clientY };\n });\n }\n activate() {\n this._active = true;\n }\n deactivate() {\n this._active = false;\n }\n addCallback(keys, callback) {\n this._lastCallbackId++;\n this._callbacks[this._lastCallbackId] = {\n keys: keys,\n callback: callback\n };\n }\n isKeyPressed(key) {\n return this._active && this._keys[key] && this._keys[key] === true;\n }\n _checkCallbacks(e) {\n //TODO async forEach?\n Object.values(this._callbacks).forEach(callback => {\n // @ts-ignore\n if (callback.keys.every(key => this._keys[key] === true)) {\n // @ts-ignore\n callback.callback(e);\n }\n });\n }\n removeCallback(callbackId) {\n delete this._callbacks[callbackId];\n }\n}\nexports.HotkeyManager = HotkeyManager;\n//# sourceMappingURL=HotkeyManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InputSelect = void 0;\nconst Helper_1 = require(\"../shared/Helper\");\nconst ViewHelper_1 = require(\"./ViewHelper\");\nclass InputSelect {\n constructor(element, options) {\n this.onChangeListeners = [];\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n this.options = new Map();\n this.inputElement = element;\n options.forEach(o => {\n if (typeof o === \"string\") {\n o = { value: o, label: o };\n }\n o.selected = Helper_1.Helper.nonNull(o.selected, false);\n this.options.set(o.value, o);\n return o;\n });\n this.buildElement();\n }\n onChange(listener) {\n this.onChangeListeners.push(listener);\n }\n buildElement() {\n const parent = this.inputElement.parentElement;\n this.container = document.createElement(\"div\");\n this.container.classList.add(\"input-select-container\");\n const flexContainer = document.createElement(\"div\");\n flexContainer.classList.add(\"input-select-flex\");\n this.selectedOptionsContainer = document.createElement(\"span\");\n this.selectedOptionsContainer.classList.add(\"input-select-selected-options\");\n const classes = [];\n this.inputElement.classList.forEach(c => {\n this.container.classList.add(c);\n classes.push(c);\n });\n this.inputElement.classList.remove(...classes);\n this.inputElement.classList.add(\"input-select-input\");\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.classList.add(\"input-select-options\");\n parent.insertBefore(this.container, this.inputElement);\n this.inputElement.remove();\n this.container.appendChild(flexContainer);\n this.container.appendChild(this.optionsContainer);\n flexContainer.appendChild(this.selectedOptionsContainer);\n flexContainer.appendChild(this.inputElement);\n this.inputElement.addEventListener(\"input\", () => this.updateOptions());\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.optionsContainer.style.width = entry.borderBoxSize[0].inlineSize + \"px\";\n });\n });\n resizeObserver.observe(this.container);\n }\n // if (\"IntersectionObserver\" in window) {\n // const intersectionOptions = {\n // root: this.optionsContainer,\n // rootMargin: \"20px\",\n // threshold: 0.01\n // }\n // const intersectionObserver = new IntersectionObserver((entries) => {\n // entries.forEach(entry => console.log(\"is intersecting\", entry.isIntersecting));\n // // console.log(\"entries\", entries);\n // }, intersectionOptions);\n // intersectionObserver.observe(flexContainer);\n // }\n window.addEventListener(\"scroll\", () => console.log(\"scrolling\"));\n this.container.addEventListener(\"click\", () => {\n const rect = this.container.getBoundingClientRect();\n this.optionsContainer.style.top = (rect.top + rect.height) + \"px\";\n });\n this.updateOptions();\n }\n updateOptions() {\n ViewHelper_1.ViewHelper.removeAllChildren(this.selectedOptionsContainer);\n ViewHelper_1.ViewHelper.removeAllChildren(this.optionsContainer);\n const inputValue = this.inputElement.value;\n this.options.forEach(o => {\n const optionElement = document.createElement(\"span\");\n optionElement.classList.add(\"input-select-option\");\n optionElement.dataset[\"value\"] = o.value;\n optionElement.innerText = o.label;\n if (o.selected) {\n this.selectedOptionsContainer.appendChild(optionElement);\n }\n else if (o.label.indexOf(inputValue) !== -1) {\n this.optionsContainer.appendChild(optionElement);\n }\n optionElement.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n e.cancelBubble = true;\n this.toggle(o.value);\n this.inputElement.focus();\n });\n });\n }\n toggle(value) {\n const option = this.options.get(value);\n if (option) {\n option.selected = !option.selected;\n this.updateOptions();\n this.onChangeListeners.forEach(listener => {\n listener(option, this);\n });\n }\n }\n getOptions() {\n return Array.from(this.options.values());\n }\n getSelectedOptions() {\n return this.getOptions().filter(o => o.selected);\n }\n getSelectedValues() {\n return this.getSelectedOptions().map(o => o.value);\n }\n updateSelection(selection) {\n Object.keys(selection).forEach(value => {\n const option = this.options.get(value);\n if (option) {\n option.selected = selection[value];\n }\n });\n this.updateOptions();\n }\n}\nexports.InputSelect = InputSelect;\n//# sourceMappingURL=InputSelect.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./shared/EventManager\"));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst js_helper_1 = require(\"js-helper\");\nclass EventManager {\n constructor() {\n this._listeners = {};\n this._lastListenerId = 0;\n }\n /**\n * @return {EventManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new EventManager();\n }\n return this._instance;\n }\n addListener(event, listener) {\n if (typeof listener !== \"function\") {\n throw new Error(\"can only add functions as listeners!\");\n }\n this._lastListenerId++;\n if (!this._listeners[event]) {\n this._listeners[event] = {};\n this._listeners[event][this._lastListenerId] = listener;\n }\n return this._lastListenerId;\n }\n removeListener(event, listenerId) {\n if (this._listeners[event] && this._listeners[event][listenerId]) {\n delete this._listeners[event][listenerId];\n }\n }\n trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._listeners[event]) {\n yield js_helper_1.Helper.asyncForEach(Object.keys(this._listeners[event]), (listenerId) => __awaiter(this, void 0, void 0, function* () {\n yield this._listeners[event][listenerId](data);\n }), true);\n }\n });\n }\n static trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.getInstance().trigger(event, data);\n });\n }\n}\nexports.EventManager = EventManager;\nEventManager._instance = null;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContainerSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst containerTemplate = require(\"../../html/siteTemplates/container.html\");\n/**\n * Seite, welche das Container-Template benutzt\n */\nclass ContainerSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für die ContainerSite\n *\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(siteManager, view, containerTemplate, \"#site-content\");\n }\n}\nexports.ContainerSite = ContainerSite;\n//# sourceMappingURL=ContainerSite.js.map","module.exports = __webpack_public_path__ + \"html/container.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DelegateSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nclass DelegateSite extends AbstractSite_1.AbstractSite {\n constructor(site) {\n super(undefined, document.createElement(\"span\"));\n /** @var {AbstractSite} */\n this._site = site;\n }\n setTitle(titleElement, title) {\n return this._site.setTitle(titleElement, title);\n }\n setParameter(name, value) {\n //Todo changing\n // return this._site.setParameter(name, value);\n }\n setParameters(parameters) {\n //TODO changing\n // return this._site.setParameters(parameters)\n }\n getParameters() {\n return this._site.getParameters();\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.showLoadingSymbol();\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.removeLoadingSymbol();\n });\n }\n _updateTitle() {\n return this._site._updateTitle();\n }\n updateUrl(args) {\n //todo\n // return this._site.updateUrl(args);\n }\n startSite(site, args) {\n return this._site.startSite(site, args);\n }\n finishAndStartSite(site, args, result) {\n return this._site.finishAndStartSite(site, args, result);\n }\n finish(result) {\n return this._site.finish(result);\n }\n goBack() {\n return this._site.goBack();\n }\n getFinishPromise() {\n return this._site.getFinishPromise();\n }\n setResult(result) {\n return this._site.setResult(result);\n }\n getFinishResolver() {\n return this._site.getFinishResolver();\n }\n addFragment(viewQuery, fragment) {\n return this._site.addFragment(viewQuery, fragment);\n }\n findBy(query, all, asPromise) {\n return this._site.findBy(query, all, asPromise);\n }\n setPauseParameters(pauseParameters) {\n return this._site.setPauseParameters(pauseParameters);\n }\n getViewPromise() {\n return this._site.getViewPromise();\n }\n getState() {\n return this._site.getState();\n }\n getTitle() {\n return this._site.getTitle();\n }\n isShowing() {\n return this._site.isShowing();\n }\n isDestroying() {\n return this._site.isDestroying();\n }\n}\nexports.DelegateSite = DelegateSite;\n//# sourceMappingURL=DelegateSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractWindowFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst ViewInflater_1 = require(\"../../ViewInflater\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Translator_1 = require(\"../../Translator\");\nconst NativeStoragePromise_1 = require(\"../../NativeStoragePromise\");\nconst Toast_1 = require(\"../../Toast/Toast\");\nconst template = require(\"../../../html/Framework/Fragment/abstractWindowTemplate.html\");\nclass AbstractWindowFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view, position, title, id) {\n super(site, template);\n this.position = {\n x: 0,\n y: 0,\n anchorY: \"top\",\n anchorX: \"left\"\n };\n this.title = \"\";\n this._margin = { x: 0, y: 0 };\n this.saveData = {};\n this.state = \"normal\";\n this.popupWindow = null;\n this.translateTitle = true;\n this.position = Object.assign({ anchorY: \"top\", anchorX: \"left\" }, position);\n this.title = Helper_1.Helper.nonNull(title, \" \");\n if (id) {\n this.id = \"window-\" + id;\n }\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(\"#child-view\").replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n setTitle(title) {\n if (this._titleElement) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._titleElement);\n this._titleElement.appendChild(this.translateTitle ? Translator_1.Translator.makePersistentTranslation(title) : document.createTextNode(title));\n }\n this.title = title;\n }\n getDimension() {\n let computedStyle = window.getComputedStyle(this._container);\n let width = parseFloat(computedStyle.getPropertyValue(\"width\"));\n let height = parseFloat(computedStyle.getPropertyValue(\"height\"));\n if (isNaN(width)) {\n width = parseFloat(this._container.style.width);\n }\n if (isNaN(height)) {\n height = parseFloat(this._container.style.height);\n }\n return { x: Math.ceil(width) - this._margin.x, y: Math.ceil(height) - this._margin.y };\n }\n setDimension(x, y) {\n x += this._margin.x;\n y += this._margin.y;\n this._container.style.width = x + \"px\";\n this._container.style.height = y + \"px\";\n this.saveData.dimension = {\n x: x,\n y: y,\n };\n this.save();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._container = this.findBy(\".window-container\");\n if (this.position.width || this.position.height) {\n this._container.style.width = this.position.width + \"px\";\n this._container.style.height = this.position.height + \"px\";\n }\n this._window = this.findBy(\".window\");\n this._titleElement = this.findBy(\"#title\");\n this._resizeElements = {\n x: [\n this._window,\n this.findBy(\".window-resize.left\"),\n this.findBy(\".window-resize.right\")\n ],\n y: [\n this._window,\n this._titleElement,\n this.findBy(\".window-resize.top\"),\n this.findBy(\".window-resize.bottom\")\n ],\n };\n yield this.load();\n this._checkPositionAndDimension();\n // this.moveTo(this.position.x, this.position.y);\n this.setTitle(this.title);\n this.addListeners();\n const buttonContainer = this.findBy(\"#title-buttons\");\n if (buttonContainer) {\n buttonContainer.remove();\n this._titleElement.parentNode.appendChild(buttonContainer);\n buttonContainer.querySelectorAll(\".title-button\").forEach(button => {\n button.addEventListener(\"click\", e => {\n this.onButtonClick(button.id, button, e);\n });\n });\n }\n return res;\n });\n }\n addListeners() {\n return __awaiter(this, void 0, void 0, function* () {\n let resizeStart = null;\n let multiplier;\n let dimension;\n let resizeStartListener = (x, y, e) => {\n if (e.target.classList.contains(\"window-resize\")) {\n e.stopPropagation();\n resizeStart = { x: x, y: y };\n let direction = e.target.dataset[\"direction\"].split(\",\");\n multiplier = { x: parseInt(direction[0]), y: parseInt(direction[1]) };\n dimension = this.getDimension();\n }\n };\n this.findBy(\".window-resize\", true).forEach(element => {\n element.addEventListener(\"mousedown\", (e) => {\n resizeStartListener(e.clientX, e.clientY, e);\n });\n });\n let mouseDownPos = null;\n let pos = null;\n let moveStartListener = (x, y, e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n mouseDownPos = { x: x, y: y };\n pos = Object.assign({}, this.getPosition()); //Make copy\n this._container.classList.add(\"moving\");\n }\n this.makeActiveWindow();\n };\n this._container.addEventListener(\"mousedown\", (e) => {\n moveStartListener(e.clientX, e.clientY, e);\n });\n this._container.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length === 1) {\n moveStartListener(e.touches[0].clientX, e.touches[0].clientY, e);\n }\n });\n let moveListener = (x, y) => {\n if (resizeStart !== null) {\n let localMultiplier = {\n x: multiplier.x,\n y: multiplier.y,\n };\n let diff = {\n x: (x - resizeStart.x) * (localMultiplier.x),\n y: (y - resizeStart.y) * (localMultiplier.y)\n };\n dimension = { x: dimension.x + diff.x, y: dimension.y + diff.y };\n this.setDimension(dimension.x, dimension.y);\n const realDimension = this.getDimension();\n if (dimension.x !== realDimension.x) {\n localMultiplier.x = 0;\n }\n if (dimension.y !== realDimension.y) {\n localMultiplier.y = 0;\n }\n this._checkPositionAndDimension();\n //TODO diff für Center berechnen...\n let moveDiff = { x: 0, y: 0 };\n if (localMultiplier.x !== 0) {\n if (this.position.anchorX === \"center\") {\n moveDiff.x = diff.x * localMultiplier.x / 2;\n }\n else if (localMultiplier.x * (this.position.anchorX === \"left\" ? 1 : -1) < 0) {\n moveDiff.x = diff.x * localMultiplier.x;\n }\n }\n if (localMultiplier.y !== 0) {\n if (this.position.anchorY === \"center\") {\n moveDiff.y = diff.y * localMultiplier.y / 2;\n }\n else if (localMultiplier.y * (this.position.anchorY === \"top\" ? 1 : -1) < 0) {\n moveDiff.y = diff.y * localMultiplier.y;\n }\n }\n this.moveAt(moveDiff.x, moveDiff.y);\n resizeStart = { x: x, y: y };\n }\n else if (mouseDownPos !== null) {\n let diff = {\n x: x - mouseDownPos.x,\n y: y - mouseDownPos.y,\n };\n mouseDownPos = { x, y };\n // const newPos = {x: pos.x + diff.x, y: pos.y + diff.y};\n this.moveAt(diff.x, diff.y);\n }\n };\n window.addEventListener(\"mousemove\", (e) => {\n moveListener(e.clientX, e.clientY);\n });\n window.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length === 1) {\n moveListener(e.touches[0].clientX, e.touches[0].clientY);\n }\n });\n let endListener = (x, y, e) => {\n mouseDownPos = null;\n resizeStart = null;\n this._container.classList.remove(\"moving\");\n };\n window.addEventListener(\"mouseup\", (e) => {\n endListener(e.clientX, e.clientY, e);\n });\n window.addEventListener(\"touchend\", (e) => {\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n endListener(e.changedTouches[0].clientX, e.changedTouches[0].clientY, e);\n }\n });\n this._container.addEventListener(\"dblclick\", (e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n this.toggleMinimize();\n }\n });\n window.addEventListener(\"resize\", () => {\n this._checkPositionAndDimension();\n });\n window.addEventListener(\"beforeunload\", () => {\n if (this.popupWindow) {\n this.id = null; //disable saving, since it should\n this.popupWindow.close();\n }\n });\n });\n }\n makeActiveWindow() {\n let activeWindow = document.querySelector(\".window-container.active-window\");\n if (activeWindow && activeWindow !== this._container) {\n activeWindow.classList.remove(\"active-window\");\n }\n this._container.classList.add(\"active-window\");\n }\n load() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n const saveData = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this.id);\n if (saveData) {\n if (saveData.dimension) {\n this.setDimension(saveData.dimension.x, saveData.dimension.y);\n }\n if (saveData.position) {\n this.position = saveData.position;\n this._checkPositionAndDimension();\n }\n if (saveData.state) {\n switch (saveData.state) {\n case \"minimized\": {\n this.toggleMinimize();\n break;\n }\n case \"maximized\": {\n this.toggleMaximize();\n break;\n }\n case \"popup\": {\n this._viewLoadedPromise.then(() => {\n this.openInNewWindow();\n });\n break;\n }\n }\n }\n this.saveData = saveData;\n this.save();\n }\n }\n });\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n // console.log(\"save\", this.id, this.saveData);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this.id, this.saveData);\n }\n });\n }\n toggleMinimize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"minimized\");\n this._container.classList.remove(\"maximized\");\n if (!this._container.classList.contains(\"minimized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"minimized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n toggleMaximize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"maximized\");\n this._container.classList.remove(\"minimized\");\n if (!this._container.classList.contains(\"maximized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"maximized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n resizeToContent() {\n if (this._window) {\n let diff = {\n x: this._window.scrollWidth - this._window.clientWidth,\n y: this._window.scrollHeight - this._window.clientHeight,\n };\n let dimension = this.getDimension();\n if (diff.x === 0) {\n let sum = 0;\n this._resizeElements.x.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"width\")));\n diff.x = Math.ceil(sum) - dimension.x;\n }\n if (diff.y === 0) {\n let sum = 0;\n this._resizeElements.y.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"height\")));\n diff.y = Math.ceil(sum) - dimension.y;\n }\n dimension.x += diff.x;\n dimension.y += diff.y;\n if (this.state === \"normal\") {\n this.setDimension(dimension.x, dimension.y);\n }\n this._checkPositionAndDimension();\n }\n }\n getTopLeftCornerPosition() {\n const dimension = this.getDimension();\n let x = this.position.x;\n if (this.position.anchorX === \"center\") {\n x += window.innerWidth / 2 - dimension.x / 2;\n }\n else if (this.position.anchorX === \"right\") {\n x += window.innerWidth - dimension.x;\n }\n let y = this.position.y;\n if (this.position.anchorY === \"center\") {\n y += window.innerHeight / 2 - dimension.y / 2;\n }\n else if (this.position.anchorY === \"bottom\") {\n y += window.innerHeight - dimension.y;\n }\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n return { x, y };\n }\n getCenterCenterPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: (topLeft.x + dimension.x / 2) - window.innerWidth / 2,\n y: (topLeft.y + dimension.y / 2) - window.innerHeight / 2\n };\n }\n getBottomRightPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: Math.min((topLeft.x + dimension.x) - window.innerWidth, 0),\n y: Math.min((topLeft.y + dimension.y) - window.innerHeight, 0),\n };\n }\n _checkPositionAndDimension() {\n let dimension = this.getDimension();\n let setDimension = true;\n let dimensionChanged = false;\n if (isNaN(dimension.x)) {\n dimension.x = 0;\n setDimension = false;\n }\n if (isNaN(dimension.y)) {\n dimension.y = 0;\n setDimension = false;\n }\n let posTopLeft = this.getTopLeftCornerPosition();\n let posCenterCenter = this.getCenterCenterPosition();\n let posBottomRight = this.getBottomRightPosition();\n if (dimension.x > window.innerWidth) {\n dimensionChanged = true;\n dimension.x = window.innerWidth;\n this.position.x = 0;\n this.position.anchorX = \"left\";\n }\n else {\n if (posTopLeft.x <= Math.abs(posCenterCenter.x) && posTopLeft.x <= -1 * posBottomRight.x) {\n this.position.x = posTopLeft.x;\n this.position.anchorX = \"left\";\n }\n else if (-1 * posBottomRight.x <= Math.abs(posCenterCenter.x)) {\n this.position.x = posBottomRight.x;\n this.position.anchorX = \"right\";\n }\n else {\n this.position.x = posCenterCenter.x;\n this.position.anchorX = \"center\";\n }\n }\n if (dimension.y > window.innerHeight) {\n dimensionChanged = true;\n dimension.y = window.innerHeight;\n this.position.y = 0;\n this.position.anchorY = \"top\";\n }\n else {\n if (posTopLeft.y <= Math.abs(posCenterCenter.y) && posTopLeft.y <= -1 * posBottomRight.y) {\n this.position.y = posTopLeft.y;\n this.position.anchorY = \"top\";\n }\n else if (-1 * posBottomRight.y <= Math.abs(posCenterCenter.y)) {\n this.position.y = posBottomRight.y;\n this.position.anchorY = \"bottom\";\n }\n else {\n this.position.y = posCenterCenter.y;\n this.position.anchorY = \"center\";\n }\n }\n if (this.position.anchorY === \"top\") {\n this._container.style.top = this.position.y + \"px\";\n this._container.style.removeProperty(\"bottom\");\n }\n else if (this.position.anchorY === \"bottom\") {\n this._container.style.bottom = (-1 * this.position.y) + \"px\";\n this._container.style.removeProperty(\"top\");\n }\n else {\n this._container.style.top = \"calc(50% + \" + this.position.y.toString() + \"px - \" + (dimension.y / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"bottom\");\n }\n if (this.position.anchorX === \"left\") {\n this._container.style.left = this.position.x + \"px\";\n this._container.style.removeProperty(\"right\");\n }\n else if (this.position.anchorX === \"right\") {\n this._container.style.right = (-1 * this.position.x) + \"px\";\n this._container.style.removeProperty(\"left\");\n }\n else {\n this._container.style.left = \"calc(50% + \" + this.position.x.toString() + \"px - \" + (dimension.x / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"right\");\n }\n this.saveData.position = this.position;\n if (!this._container.classList.contains(\"minimized\") && setDimension && dimensionChanged) {\n this.setDimension(dimension.x, dimension.y);\n }\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onStart.call(this, pauseArguments);\n this._checkPositionAndDimension();\n return res;\n });\n }\n moveAt(x, y) {\n const posTopLeft = this.getTopLeftCornerPosition();\n return this.moveTo(x + posTopLeft.x, y + posTopLeft.y);\n }\n moveTo(x, y) {\n this.position = { x: x, y: y, anchorX: \"left\", anchorY: \"top\" };\n this._checkPositionAndDimension();\n this.save();\n }\n onButtonClick(id, button, e) {\n switch (id) {\n case \"minimize-button\": {\n this.toggleMinimize();\n break;\n }\n case \"maximize-button\": {\n this.toggleMaximize();\n break;\n }\n case \"new-window-button\": {\n this.openInNewWindow();\n break;\n }\n }\n }\n openInNewWindow() {\n if (this.state === \"popup\") {\n return;\n }\n const windowProxy = window.open(\"\", \"\", \"modal=yes\");\n if (windowProxy === null) {\n new Toast_1.Toast(\"cannot open popups\").show();\n return;\n }\n this.state = \"popup\";\n this.saveData.state = this.state;\n this.save();\n const baseElement = document.createElement(\"base\");\n baseElement.href = window.location.href;\n windowProxy.document.head.appendChild(baseElement);\n const titleElement = document.createElement(\"title\");\n titleElement.innerText = this.title;\n windowProxy.document.head.appendChild(titleElement);\n document.querySelectorAll(\"link[rel='stylesheet']\").forEach(styleElem => {\n windowProxy.document.head.appendChild(styleElem.cloneNode());\n });\n const parent = this._view.parentNode;\n this._view.remove();\n this._container.classList.add(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n const translationCallback = Translator_1.Translator.getInstance().addTranslationCallback((baseElement) => {\n if (baseElement !== this._container) {\n Translator_1.Translator.getInstance().updateTranslations(this._container);\n }\n }, false);\n windowProxy.document.body.appendChild(this._view);\n windowProxy.addEventListener(\"beforeunload\", () => {\n this.state = \"normal\";\n this.saveData.state = this.state;\n this.save();\n this._view.remove();\n this._container.classList.remove(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n parent.appendChild(this._view);\n this.popupWindow = null;\n Translator_1.Translator.getInstance().removeTranslationCallback(translationCallback);\n });\n this.popupWindow = windowProxy;\n document.body.classList.forEach(className => {\n console.log(\"adding class\", className);\n windowProxy.document.body.classList.add(className);\n });\n }\n getPosition() {\n return this.position;\n }\n}\nexports.AbstractWindowFragment = AbstractWindowFragment;\n//# sourceMappingURL=AbstractWindowFragment.js.map","module.exports = __webpack_public_path__ + \"html/abstractWindowTemplate.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AlphabeticListFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst defaultView = require(\"../../../html/Framework/Fragment/alphabeticListFragment.html\");\nclass AlphabeticListFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, shared_1.Helper.nonNull(view, defaultView));\n this.elements = {};\n this.sideScrolling = false;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n //TODO font-size changing\n let sideAlphabet = this.findBy(\".alphabetic-list-sidealphabet\");\n sideAlphabet.addEventListener(\"mousedown\", () => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"mouseup\", () => {\n this.sideScrolling = false;\n });\n window.addEventListener(\"touchend\", () => {\n this.sideScrolling = false;\n });\n this.findBy(\".alphabet-scroll-to\", true).forEach(elem => {\n let listener = (e) => {\n if (this.sideScrolling) {\n this.findBy(\".alphabet-section.\" + elem.dataset.letter).scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n };\n elem.addEventListener(\"mousedown\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"mousemove\", listener);\n elem.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"touchmove\", listener);\n });\n this.headingElement = this.findBy(\"#alphabetic-list-heading\");\n this.renderList();\n return res;\n });\n }\n setElements(elements) {\n this.elements = {};\n Object.keys(elements).sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n }).forEach(key => {\n this.elements[key] = elements[key];\n });\n }\n setHeading(headingElement) {\n this.heading = headingElement;\n if (this.headingElement && this.heading) {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n this.headingElement.appendChild(this.heading);\n }\n }\n renderElement(element) {\n console.warn(\"should be overloaded?\");\n let elem = document.createElement(\"div\");\n elem.innerText = element;\n return elem;\n }\n renderList() {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n if (this.heading) {\n this.headingElement.appendChild(this.heading);\n }\n this.findBy(\".alphabet-section\", true).forEach(section => {\n client_1.ViewHelper.removeAllChildren(section);\n });\n let currentLetter = 'A';\n let currentSegment = this.findBy(\".alphabet-section.A\");\n Object.keys(this.elements).forEach(key => {\n let newLetter = key.trim().substring(0, 1).toUpperCase();\n if (newLetter !== currentLetter) {\n currentLetter = newLetter;\n let newSegment = this.findBy(\".alphabet-section.\" + newLetter);\n if (newSegment !== null) {\n currentSegment = newSegment;\n }\n }\n let element = this.renderElement(this.elements[key]);\n currentSegment.appendChild(element);\n });\n }\n}\nexports.AlphabeticListFragment = AlphabeticListFragment;\n//# sourceMappingURL=AlphabeticListFragment.js.map","module.exports = __webpack_public_path__ + \"html/alphabeticListFragment.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultTabView = require(\"../../../html/Framework/Fragment/tabFragment.html\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Translator_1 = require(\"../../Translator\");\nconst client_1 = require(\"js-helper/dist/client\");\nclass TabFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, Helper_1.Helper.nonNull(view, defaultTabView));\n this.lastTabId = 0;\n this.activeTab = null;\n this.onTabChangeListener = null;\n this.tabs = new Map();\n this.tabViewPromise = this._viewLoadedPromise;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.nameContainer = this.findBy(\".tab-names\");\n this.nameButton = this.findBy(\".tab-button-template\");\n this.nameButton.classList.remove(\"tab-button-template\");\n this.nameButton.remove();\n this.tabContent = this.findBy(\".tab-content\");\n this.tabSite = this.findBy(\".tab-site-template\");\n this.tabSite.classList.remove(\"tab-site-template\");\n this.tabSite.remove();\n return res;\n });\n }\n addFragment(name, fragment, nameIsTranslatable) {\n super.addFragment(\".tab-content\", fragment);\n fragment._viewLoadedPromise.then(() => {\n const view = this.tabSite.cloneNode(true);\n view.appendChild(fragment._view);\n this.lastTabId++;\n const tab = {\n name: name,\n fragment: fragment,\n view: view,\n nameIsTranslatable: Helper_1.Helper.nonNull(nameIsTranslatable, true),\n button: null,\n id: this.lastTabId,\n };\n this.tabs.set(this.lastTabId, tab);\n this._viewLoadedPromise.then(() => {\n const nameElement = this.nameButton.cloneNode(true);\n nameElement.appendChild(tab.nameIsTranslatable ? Translator_1.Translator.makePersistentTranslation(name) : document.createTextNode(name));\n this.nameContainer.appendChild(nameElement);\n nameElement.addEventListener(\"click\", () => {\n this.showTab(tab.id);\n });\n tab.button = nameElement;\n if (Helper_1.Helper.isNull(this.activeTab)) {\n this.showTab(tab.id);\n }\n });\n });\n }\n showTab(tabId) {\n const tab = this.tabs.get(tabId);\n if (tab && tabId !== this.activeTab) {\n let previousActiveButton = this.findBy(\".tab-button.active\");\n if (Helper_1.Helper.isNotNull(previousActiveButton)) {\n previousActiveButton.classList.remove(\"active\");\n }\n tab.button.classList.add(\"active\");\n client_1.ViewHelper.removeAllChildren(this.tabContent);\n this.tabContent.appendChild(tab.view);\n this.activeTab = tabId;\n if (this.onTabChangeListener) {\n this.onTabChangeListener(tab);\n }\n }\n }\n setOnTabChangeListener(listener) {\n this.onTabChangeListener = listener;\n }\n}\nexports.TabFragment = TabFragment;\n//# sourceMappingURL=TabFragment.js.map","module.exports = __webpack_public_path__ + \"html/tabFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Dialog_1 = require(\"../../../Dialog/Dialog\");\nconst Translator_1 = require(\"../../../Translator\");\nconst errorIcon = require(\"../../../../img/errorIcon.png\");\nclass ErrorAction extends MenuAction_1.MenuAction {\n constructor() {\n super(\"\", () => {\n let d = new Dialog_1.Dialog(ErrorAction._errors.join(\"
\"), Translator_1.Translator.translate(\"error\"));\n d.setTranslatable(false);\n d.show();\n }, MenuAction_1.MenuAction.SHOW_ALWAYS, -1000, ErrorAction.ERROR_ICON);\n this._visible = (ErrorAction._errors.length > 0);\n this._shouldTranslate = false;\n console.log(\"icon: \", ErrorAction.ERROR_ICON);\n }\n static addError(errorMessage) {\n if (this._errors.indexOf(errorMessage) === -1) {\n this._errors.push(errorMessage);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n static removeError(errorMessage) {\n let index = this._errors.indexOf(errorMessage);\n if (index >= 0) {\n this._errors.splice(index, 1);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n /**\n * @return ErrorAction;\n */\n static getInstance() {\n if (this._instance === null) {\n this._instance = new ErrorAction();\n }\n return this._instance;\n }\n}\nexports.ErrorAction = ErrorAction;\nErrorAction.ERROR_ICON = errorIcon;\nErrorAction._instance = null;\nErrorAction._errors = [];\n//# sourceMappingURL=ErrorAction.js.map","export default \"img/errorIcon.png\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartSiteMenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst App_1 = require(\"../../../App\");\nclass StartSiteMenuAction extends MenuAction_1.MenuAction {\n constructor(name, site, showFor, order, icon) {\n super(name, () => {\n if (StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartSiteMenuAction = StartSiteMenuAction;\nStartSiteMenuAction._app = null;\nApp_1.App.addInitialization(app => {\n StartSiteMenuAction._app = app;\n});\n//# sourceMappingURL=StartSiteMenuAction.js.map","module.exports = __webpack_public_path__ + \"html/navbar.html\";","module.exports = __webpack_public_path__ + \"html/menuSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst SwipeChildFragment_1 = require(\"./SwipeChildFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst view = require(\"../../../html/Framework/Fragment/swipeFragment.html\");\nclass SwipeFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site) {\n super(site, view);\n this._activeIndex = 0;\n this._touchStart = null;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this._view.addEventListener(\"touchstart\", e => {\n this._touchStart = e.touches[0];\n }, false);\n this._view.addEventListener(\"touchend\", e => {\n this._handleSwipe(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n this._touchStart = null;\n });\n this._view.addEventListener(\"mousedown\", e => {\n this._touchStart = e;\n }, false);\n this._view.addEventListener(\"mouseup\", e => {\n this._handleSwipe(e.clientX, e.clientY);\n this._touchStart = null;\n });\n return _super.onViewLoaded.call(this);\n });\n }\n _handleSwipe(endX, endY) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._touchStart)) {\n return;\n }\n let touchStart = this._touchStart;\n this._touchStart = null;\n let diffX = touchStart.clientX - endX;\n if (Math.abs(touchStart.clientY - endY) <= SwipeFragment.MAX_Y\n && Math.abs(diffX) >= SwipeFragment.MIN_X) {\n if (diffX > 0) {\n yield this._fragments[this._activeIndex].onSwipeLeft();\n }\n else {\n yield this._fragments[this._activeIndex].onSwipeRight();\n }\n }\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (this._activeIndex >= 0 && this._activeIndex < this._fragments.length) {\n this.setActiveFragment(this._activeIndex);\n }\n return _super.onStart.call(this, pauseArguments);\n });\n }\n setActiveFragment(index) {\n if (index instanceof SwipeChildFragment_1.SwipeChildFragment) {\n index = this._fragments.indexOf(index);\n }\n if (index >= 0 && index < this._fragments.length) {\n this._activeIndex = index;\n this._fragments.forEach((frag, i) => {\n frag.setActive(i === this._activeIndex);\n });\n }\n }\n nextFragment() {\n this.setActiveFragment((this._activeIndex + 1) % this._fragments.length);\n }\n previousFragment() {\n this.setActiveFragment((this._activeIndex + this._fragments.length - 1) % this._fragments.length);\n }\n addFragment(fragment) {\n if (fragment instanceof SwipeChildFragment_1.SwipeChildFragment) {\n fragment.setParent(this);\n return super.addFragment(\".swipe-container\", fragment);\n }\n }\n}\nexports.SwipeFragment = SwipeFragment;\nSwipeFragment.MAX_Y = 80;\nSwipeFragment.MIN_X = 150;\n//# sourceMappingURL=SwipeFragment.js.map","module.exports = __webpack_public_path__ + \"html/swipeFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ButtonChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nclass ButtonChooseDialog extends Dialog_1.Dialog {\n constructor(content, title, values) {\n super(content, title);\n Object.keys(values).forEach(key => {\n this.addButton(values[key], key);\n });\n }\n}\nexports.ButtonChooseDialog = ButtonChooseDialog;\n//# sourceMappingURL=ButtonChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nconst Translator_1 = require(\"../Translator\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title, translateable) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n translateable = Helper_1.Helper.nonNull(translateable, true);\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n let textElem = null;\n if (translateable) {\n textElem = Translator_1.Translator.makePersistentTranslation(valueNames[k]);\n }\n else {\n textElem = document.createElement(\"span\");\n textElem.innerText = valueNames[k];\n }\n valueElem.querySelector(\".choose-dialog-value\").appendChild(textElem);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ChooseDialog = ChooseDialog;\n//# sourceMappingURL=ChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfirmDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ConfirmDialog extends Dialog_1.Dialog {\n constructor(content, title, confirmButtonText, cancelButtonText) {\n super(content, title);\n this.confirmButtonText = Helper_1.Helper.nonNull(confirmButtonText, \"confirm-button\");\n this.cancelButtonText = Helper_1.Helper.nonNull(cancelButtonText, \"cancel-button\");\n }\n show() {\n const _super = Object.create(null, {\n show: { get: () => super.show }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addButton(this.confirmButtonText, true);\n this.addButton(this.cancelButtonText, false);\n return _super.show.call(this);\n });\n }\n close() {\n if (Helper_1.Helper.isNull(this._result)) {\n this._result = false;\n }\n return super.close();\n }\n}\nexports.ConfirmDialog = ConfirmDialog;\n//# sourceMappingURL=ConfirmDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImgChooseDialog = void 0;\nconst ElemChooseDialog_1 = require(\"./ElemChooseDialog\");\nclass ImgChooseDialog extends ElemChooseDialog_1.ElemChooseDialog {\n constructor(valueNames, title) {\n let newValueNames = {};\n Object.keys(valueNames).forEach(k => {\n let elem = document.createElement(\"img\");\n elem.src = valueNames[k];\n newValueNames[k] = elem;\n });\n super(newValueNames, title);\n }\n}\nexports.ImgChooseDialog = ImgChooseDialog;\n//# sourceMappingURL=ImgChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleHelper = void 0;\nconst js_helper_1 = require(\"js-helper\");\nclass ScaleHelper {\n scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n addListener = js_helper_1.Helper.nonNull(addListener, true);\n animationDelay = js_helper_1.Helper.nonNull(animationDelay, 0);\n let newFontSize = yield this._getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay === 0);\n if (animationDelay > 0) {\n yield new Promise(r => {\n setTimeout(r, animationDelay);\n fontElement.style.fontSize = newFontSize + \"px\";\n });\n }\n let self = this;\n let listener = function () {\n return new Promise(resolve => {\n let timeout = (typeof addListener === 'number') ? addListener : 255;\n setTimeout(() => {\n resolve(self.scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, false));\n }, timeout);\n });\n };\n if (addListener !== false) {\n window.addEventListener(\"resize\", listener);\n }\n return listener;\n });\n }\n scaleToFull(fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.scaleTo(1, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener);\n });\n }\n _getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, setFontSize) {\n return __awaiter(this, void 0, void 0, function* () {\n margin = js_helper_1.Helper.nonNull(margin, 10);\n ignoreHeight = js_helper_1.Helper.nonNull(ignoreHeight, false);\n ignoreWidth = js_helper_1.Helper.nonNull(ignoreWidth, false);\n fontWeight = js_helper_1.Helper.nonNull(fontWeight, fontElement.innerHTML.length);\n setFontSize = js_helper_1.Helper.nonNull(setFontSize, true);\n let hasNoTransitionClass = container.classList.contains(\"no-transition\");\n if (!hasNoTransitionClass) {\n container.classList.add(\"no-transition\");\n }\n const numChanged = 5;\n let oldDiffIndex = 0;\n let oldDiff = [];\n for (let i = 0; i < numChanged; i++) {\n oldDiff.push(0);\n }\n let beforeFontSize = fontElement.style.fontSize;\n let currentFontSize = 1;\n let widthDiff = 0;\n let heightDiff = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n do {\n currentFontSize += oldDiff[oldDiffIndex] / (fontWeight + 1);\n fontElement.style.fontSize = currentFontSize + 'px';\n let containerStyle = window.getComputedStyle(container);\n containerWidth = parseFloat(containerStyle.getPropertyValue(\"width\").replace('px', ''));\n containerHeight = parseFloat(containerStyle.getPropertyValue(\"height\").replace('px', ''));\n widthDiff = containerWidth - fontElement.offsetWidth;\n heightDiff = containerHeight - fontElement.offsetHeight;\n oldDiffIndex = (oldDiffIndex + 1) % numChanged;\n let newDiff = (ignoreWidth ? heightDiff : (ignoreHeight ? widthDiff : Math.min(widthDiff, heightDiff)));\n if (newDiff === oldDiff[(oldDiffIndex + 1) % numChanged]) {\n break;\n }\n oldDiff[oldDiffIndex] = newDiff;\n } while ((widthDiff > (1 - scale) * containerWidth || ignoreWidth) && (heightDiff > (1 - scale) * containerHeight || ignoreHeight));\n currentFontSize -= margin;\n fontElement.style.fontSize = ((setFontSize) ? currentFontSize + \"px\" : beforeFontSize);\n if (!hasNoTransitionClass) {\n yield new Promise((r) => {\n setTimeout(r, 50);\n });\n container.classList.remove(\"no-transition\");\n }\n return currentFontSize;\n });\n }\n}\nexports.ScaleHelper = ScaleHelper;\n//# sourceMappingURL=ScaleHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseHelper = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nclass PromiseHelper {\n static delay(milliseconds) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(r, milliseconds);\n });\n });\n }\n static tryMultipleTimes(func, times, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n times = Helper_1.Helper.nonNull(times, 5);\n delay = Helper_1.Helper.nonNull(delay, 50);\n for (let i = 0; i < times; i++) {\n let res = yield func();\n if (res !== undefined) {\n return res;\n }\n else {\n yield PromiseHelper.delay(delay);\n }\n }\n return undefined;\n });\n }\n static tryUntilTimeout(func, timeout, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n timeout = Helper_1.Helper.nonNull(timeout, 500);\n delay = Helper_1.Helper.nonNull(delay, 50);\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let shouldRun = true;\n PromiseHelper.delay(timeout).then(() => {\n reject(new Error(\"timeout\"));\n shouldRun = false;\n });\n while (shouldRun) {\n let res = yield func();\n if (res !== undefined) {\n resolve(res);\n break;\n }\n yield PromiseHelper.delay(delay);\n }\n }));\n });\n }\n}\nexports.PromiseHelper = PromiseHelper;\n//# sourceMappingURL=PromiseHelper.js.map","module.exports = __webpack_public_path__ + \"html/shareDialog.html\";","module.exports = __webpack_public_path__ + \"html/loginSite.html\";","module.exports = __webpack_public_path__ + \"html/forgotPasswordSite.html\";","module.exports = __webpack_public_path__ + \"html/notAllowedSite.html\";","module.exports = __webpack_public_path__ + \"html/selectUserDialog.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OfflineUserManager = void 0;\nconst client_1 = require(\"cordova-sites-easy-sync/dist/client\");\nconst client_2 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"./UserManager\");\nconst Role_1 = require(\"../../shared/v1/model/Role\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass OfflineUserManager extends UserManager_1.UserManager {\n constructor() {\n super();\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n let userId = yield client_2.NativeStoragePromise.getItem(\"user-manager-user-id\");\n if (Helper_1.Helper.isNotNull(userId)) {\n let user = yield User_1.User.findById(userId, User_1.User.getRelations());\n if (Helper_1.Helper.isNotNull(user) && user.activated && !user.blocked) {\n yield this._handleLoginFromUser(user);\n }\n }\n return this._userData;\n });\n }\n _handleLoginFromUser(user) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = [];\n let roles = user.roles;\n let roleIds = [];\n roles.forEach(role => {\n roleIds.push(role.id);\n });\n roles = yield Role_1.Role.findByIds(roleIds, [\"accesses\"]);\n yield Helper_1.Helper.asyncForEach(roles, (role) => __awaiter(this, void 0, void 0, function* () {\n accesses.push(...yield this._getAccessesFromRole(role));\n }));\n let accessNames = [];\n accesses.forEach(access => {\n accessNames.push(access.name);\n });\n this._userData = {\n id: user.id,\n loggedIn: true,\n online: true,\n username: user.username,\n email: user.email,\n accesses: accessNames,\n };\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield User_1.User.findOne({\n \"email\": email,\n \"password\": this._hashPassword(password),\n \"activated\": true,\n \"blocked\": false,\n }, undefined, undefined, User_1.User.getRelations());\n if (user) {\n yield this._handleLoginFromUser(user);\n if (saveLogin) {\n yield client_2.NativeStoragePromise.setItem(\"user-manager-user-id\", user.id);\n }\n return true;\n }\n return false;\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n yield client_2.NativeStoragePromise.remove(\"user-manager-user-id\");\n return false;\n });\n }\n _getAccessesFromRole(role) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = role.accesses;\n let repo = yield client_1.EasySyncClientDb.getInstance()._getRepository(Role_1.Role.getSchemaName());\n let parents = yield repo.createQueryBuilder(Role_1.Role.getSchemaName())\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.accesses', \"access\")\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.children', \"child\")\n .where('child.id = :id', { id: role.id })\n .getMany();\n yield Helper_1.Helper.asyncForEach(parents, (role) => __awaiter(this, void 0, void 0, function* () {\n let otherAccesses = yield this._getAccessesFromRole(role);\n accesses.push(...otherAccesses);\n }));\n return accesses;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let errors = {};\n let users = yield Promise.all([\n User_1.User.findOne({ \"email\": email }),\n User_1.User.findOne({ \"username\": username }),\n ]);\n if (Helper_1.Helper.isNotNull(users[0])) {\n errors[\"email\"] = \"email is already in use.\";\n }\n if (Helper_1.Helper.isNotNull(users[1])) {\n errors[\"username\"] = \"username is already in use.\";\n }\n if (Object.keys(errors).length > 0) {\n return errors;\n }\n let user = new User_1.User();\n user.id = yield OfflineUserManager._getNewId();\n user.email = email;\n user.password = this._hashPassword(password);\n user.username = username;\n user.roles = OfflineUserManager.DEFAULT_ROLES;\n user.activated = true;\n yield user.save();\n // user.roles\n yield this.login(email, password);\n return user;\n });\n }\n static _getNewId() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(OfflineUserManager._lastId)) {\n let user = yield User_1.User.findOne(undefined, { \"id\": \"DESC\" });\n OfflineUserManager._lastId = user.id;\n }\n OfflineUserManager._lastId++;\n return OfflineUserManager._lastId;\n });\n }\n _hashPassword(pw) {\n return pw;\n }\n}\nexports.OfflineUserManager = OfflineUserManager;\nOfflineUserManager.LOGGED_OUT_ACCESSES = UserManager_1.UserManager.OFFLINE_ACCESSES;\nOfflineUserManager.DEFAULT_ROLES = [];\nOfflineUserManager._lastId = null;\n//# sourceMappingURL=OfflineUserManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob_old = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass SyncJob_old {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromises = [];\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (shared_1.Helper.isNull(this._lastSyncDates)) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n let saveResults = yield this._doRuns(requestQueries);\n yield this._handleRelations();\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //Calculate final result and give it back\n let finalRes = {};\n saveResults.forEach(res => {\n if (res) {\n if (!finalRes[res.model]) {\n finalRes[res.model] = {\n \"deleted\": [],\n \"changed\": []\n };\n }\n if (res.deleted) {\n finalRes[res.model][\"deleted\"] = finalRes[res.model][\"deleted\"].concat(res.entities);\n }\n else {\n finalRes[res.model][\"changed\"] = finalRes[res.model][\"changed\"].concat(res.entities);\n }\n }\n });\n if (finalRes[\"FileMedium\"] && finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(finalRes[\"FileMedium\"][\"changed\"]);\n }\n return finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n let shouldAskAgain = false;\n //Ask for next run until no more runs needed\n do {\n shouldAskAgain = false;\n response = yield SyncJob_old._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (this._extractEntities(res)) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n return Promise.all(this._savePromises);\n });\n }\n _handleRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n let mergedRelations = {};\n let relationPromises = [];\n Object.keys(this._relationshipModels).forEach(modelClassName => {\n let relationDefinitions = this._keyedModelClasses[modelClassName].getRelationDefinitions();\n Object.keys(this._relationshipModels[modelClassName]).forEach(id => {\n let entity = this._relationshipModels[modelClassName][id][\"entity\"];\n let relations = this._relationshipModels[modelClassName][id][\"relations\"];\n let entityRelationPromises = [];\n Object.keys(relations).forEach(relation => {\n //foreach relation load other models and save them here\n let valuePromise = this._handleSingleRelation(relationDefinitions, relation, relations, mergedRelations, entity);\n entityRelationPromises.push(valuePromise.then(value => {\n entity[relation] = value;\n }));\n });\n //Save after all relationships has been set\n relationPromises.push(Promise.all(entityRelationPromises).then(() => {\n return entity.save(true);\n }));\n });\n });\n //Wait for relation-promises\n yield Promise.all(relationPromises);\n yield shared_1.Helper.asyncForEach(Object.keys(mergedRelations), (model) => __awaiter(this, void 0, void 0, function* () {\n let entities = shared_1.Helper.arrayToObject(yield this._keyedModelClasses[model].findByIds(Object.keys(mergedRelations[model]), this._keyedModelClasses[model].getRelations()), e => e.id);\n Object.keys(mergedRelations[model]).forEach(id => {\n if (entities[id]) {\n Object.keys(mergedRelations[model][id]).forEach(relation => {\n if (Array.isArray(mergedRelations[model][id][relation])) {\n entities[id][relation] = shared_1.Helper.nonNull(entities[id][relation], []);\n entities[id][relation].push.apply(entities[id][relation], mergedRelations[model][id][relation]);\n }\n else {\n entities[id][relation] = mergedRelations[model][id][relation];\n }\n });\n }\n });\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(Object.values(entities));\n }), true);\n });\n }\n _handleSingleRelation(relationDefinitions, relationName, relations, mergedRelations, entity) {\n let valuePromise = Promise.resolve(undefined);\n let target = relationDefinitions[relationName][\"target\"];\n let shouldSync = (relationDefinitions[relationName].sync !== false);\n //is relation a *-to-many relation?\n if (Array.isArray(relations[relationName])) {\n if (shouldSync || relations[relationName].every(id => !shared_1.Helper.isSet(this._syncedModels, target, id))) {\n valuePromise = this._keyedModelClasses[target].findByIds(relations[relationName]);\n }\n else {\n let targetRelationDefinition = this._keyedModelClasses[target].getRelationDefinitions()[relationDefinitions[relationName][\"inverseSide\"]];\n relations[relationName].filter(id => !shared_1.Helper.isSet(this._relationshipModels, target, id)).forEach(id => {\n mergedRelations[target] = shared_1.Helper.nonNull(mergedRelations[target], {});\n mergedRelations[target][id] = shared_1.Helper.nonNull(mergedRelations[target][id], {});\n let otherRelationValue = null;\n if (targetRelationDefinition.type === \"many-to-many\" || targetRelationDefinition.type === \"one-to-many\") {\n otherRelationValue = shared_1.Helper.nonNull(mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]], []);\n otherRelationValue.push(entity);\n }\n else {\n otherRelationValue = entity;\n }\n mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]] = otherRelationValue;\n });\n }\n }\n else if (shouldSync || !shared_1.Helper.isSet(this._syncedModels, target, relations[relationName])) {\n valuePromise = this._keyedModelClasses[target].findById(relations[relationName]);\n }\n return valuePromise;\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return false;\n }\n let shouldAskAgain = false;\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedModels = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedModels.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n this._savePromises.push(modelClass._fromJson(changedModels).then((changedEntities) => __awaiter(this, void 0, void 0, function* () {\n let relations = modelClass.getRelationDefinitions();\n let newIds = [];\n changedEntities.forEach(entity => {\n this._syncedModels[modelName][entity.id] = entity;\n newIds.push(entity.id);\n Object.keys(relations).forEach(relation => {\n if (entity[relation]) {\n this._addRelation(modelName, entity, relation);\n //clear relation\n entity[relation] = null;\n }\n });\n });\n //Handle partial Models (different ids on client than server)\n if (modelClass.prototype instanceof EasySyncPartialModel_1.EasySyncPartialModel) {\n let oldObjects = yield modelClass.findByIds(newIds);\n let keyedEntities = shared_1.Helper.arrayToObject(changedEntities, changedEntities => changedEntities.id);\n oldObjects.forEach(old => {\n keyedEntities[old.id].clientId = old.clientId;\n });\n }\n return EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(changedEntities).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": false\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n })));\n //Deletion of the entities\n this._savePromises.push(EasySyncClientDb_1.EasySyncClientDb.getInstance().deleteEntity(deletedModelsIds, modelClass).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": true\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n }));\n if (modelRes.shouldAskAgain) {\n shouldAskAgain = true;\n }\n return shouldAskAgain;\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n _addRelation(modelName, entity, relation) {\n this._relationshipModels[modelName] = shared_1.Helper.nonNull(this._relationshipModels[modelName], {});\n this._relationshipModels[modelName][entity.id] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id], {});\n this._relationshipModels[modelName][entity.id][\"entity\"] = entity;\n this._relationshipModels[modelName][entity.id][\"relations\"] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id][\"relations\"], {});\n this._relationshipModels[modelName][entity.id][\"relations\"][relation] = entity[relation];\n return this._relationshipModels;\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob_old.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n}\nexports.SyncJob_old = SyncJob_old;\nSyncJob_old.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob_old.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModifyEntitySite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst Form_1 = require(\"cordova-sites/dist/client/js/Form\");\nconst js_helper_1 = require(\"js-helper\");\nconst EasySyncBaseModel_1 = require(\"../../shared/EasySyncBaseModel\");\nclass ModifyEntitySite extends MenuSite_1.MenuSite {\n constructor(siteManager, view, model, menuTemplate) {\n super(siteManager, view, menuTemplate);\n this._formSelector = \".entity-form\";\n this._ckEditorConfig = {\n \".editor\": {\n toolbar: ['bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote'],\n removePlugins: [\"Heading\", \"Image\", \"ImageCaption\", \"ImageStyle\", \"ImageToolbar\", \"ImageUpload\", \"Table\", \"TableToolbar\", \"MediaEmbed\", \"CKFinderUploadAdapter\"],\n language: \"de\"\n }\n };\n this._entity = null;\n this._model = model;\n }\n getEntityFromParameters(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(this._model.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel)) {\n throw {\n \"error\": \"wrong class given! Expected EasySyncBaseModel, given \" + this._model.name\n };\n }\n let entity = null;\n if (js_helper_1.Helper.isSet(constructParameters, \"id\")) {\n entity = this._model.findById(constructParameters[\"id\"], this._model.getRelations());\n }\n if (js_helper_1.Helper.isNull(entity)) {\n entity = new this._model();\n }\n return entity;\n });\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let entity = yield this.getEntityFromParameters(constructParameters);\n if (entity !== null) {\n this.setEntity(entity);\n }\n return res;\n });\n }\n setEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n this._entity = entity;\n yield this._viewLoadedPromise;\n let values = yield this.dehydrate(this._entity);\n if (js_helper_1.Helper.isNotNull(values)) {\n yield this._form.setValues(values);\n }\n });\n }\n hydrate(values, entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(values, column)) {\n entity[column] = values[column];\n }\n });\n return entity;\n });\n }\n dehydrate(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let values = {};\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(entity, column)) {\n values[column] = entity[column];\n }\n });\n return values;\n });\n }\n validate(values, form) {\n return __awaiter(this, void 0, void 0, function* () {\n return true;\n });\n }\n saveListener() {\n this.finish();\n }\n save(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let entity = yield this.hydrate(values, this._entity);\n yield entity.save();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._form = new Form_1.Form(this.findBy(this._formSelector), (values) => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n try {\n yield this.save(values);\n this.saveListener();\n }\n catch (e) {\n console.error(e);\n this._form.setErrors({ \"error\": e.message });\n }\n finally {\n this.removeLoadingSymbol();\n }\n }));\n if (js_helper_1.Helper.isNotNull(window[\"CKEditor\"])) {\n Object.keys(this._ckEditorConfig).forEach(selector => {\n this.findBy(selector, true).forEach((e) => __awaiter(this, void 0, void 0, function* () {\n this._form.addEditor(yield CKEditor.create(e, this._ckEditorConfig[selector]));\n }));\n });\n }\n this._form.addValidator((values) => __awaiter(this, void 0, void 0, function* () {\n return yield this.validate(values, this._form);\n }));\n return res;\n });\n }\n}\nexports.ModifyEntitySite = ModifyEntitySite;\n//# sourceMappingURL=ModifyEntitySite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupEasySync1000000000500 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupEasySync1000000000500 {\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"last_sync_dates\", true);\n yield this._addLastSyncDates(queryRunner);\n });\n }\n _addLastSyncDates(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let lastSyncDatesTable = new typeorm_1.Table({\n name: \"last_sync_dates\",\n columns: [\n {\n name: \"id\",\n type: \"Integer\",\n isPrimary: true,\n isGenerated: true,\n generationStrategy: \"increment\",\n },\n {\n name: \"model\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isNullable: true\n },\n {\n name: \"lastSynced\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n isNullable: true\n },\n {\n name: \"where\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n }\n ]\n });\n return yield queryRunner.createTable(lastSyncDatesTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupEasySync1000000000500 = SetupEasySync1000000000500;\n//# sourceMappingURL=SetupEasySync.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChangeUserSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst LoginSite_1 = require(\"./LoginSite\");\nconst SelectUserDialog_1 = require(\"../Dialog/SelectUserDialog\");\nconst view = require(\"./../../html/sites/changeUserSite.html\");\nclass ChangeUserSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, ChangeUserSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let data;\n if (Helper_1.Helper.isSet(constructParameters, \"id\")) {\n data = yield DataManager_1.DataManager.load(ChangeUserSite.LOAD_USER_INFOS_URL + DataManager_1.DataManager.buildQuery({ id: constructParameters[\"id\"] }));\n }\n if (!data || data.success !== true) {\n new client_1.Toast(data.message).show();\n this.finish();\n }\n this._roles = data.roles;\n this._userData = data.userData;\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.findBy(\"#username\").innerText = this._userData.username;\n this._hasRoleContainer = this.findBy(\"#has-role-container\");\n this._availableRoleContainer = this.findBy(\"#available-role-container\");\n this._hasRoleTemplate = this.findBy(\"#has-role-template\");\n this._availableRoleTemplate = this.findBy(\"#available-role-template\");\n this._hasRoleTemplate.removeAttribute(\"id\");\n this._availableRoleTemplate.removeAttribute(\"id\");\n this._hasRoleTemplate.remove();\n this._availableRoleTemplate.remove();\n this.updateRoles();\n return res;\n });\n }\n updateRoles() {\n let userRoles = [];\n let availableRoles = [];\n this._roles.forEach(role => {\n if (this._userData.roleIds.indexOf(role.id) !== -1) {\n userRoles.push(role);\n }\n else {\n availableRoles.push(role);\n }\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._hasRoleContainer);\n userRoles.forEach((role, i) => {\n let elem = this._hasRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".remove-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: false\n });\n if (res.success) {\n this._userData.roleIds.splice(this._userData.roleIds.indexOf(role.id), 1);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._hasRoleContainer.appendChild(elem);\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._availableRoleContainer);\n availableRoles.forEach(role => {\n let elem = this._availableRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".add-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: true\n });\n if (res.success) {\n this._userData.roleIds.push(role.id);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._availableRoleContainer.appendChild(elem);\n });\n }\n}\nexports.ChangeUserSite = ChangeUserSite;\nChangeUserSite.ACCESS = \"admin\";\nChangeUserSite.LOAD_USER_INFOS_URL = \"/user/userRoles\";\nChangeUserSite.CHANGE_USER_ROLE_URL = \"/user/changeUserRole\";\nChangeUserSite.ADD_CHANGE_USER_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (ChangeUserSite.ADD_CHANGE_USER_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"change user\", ChangeUserSite.ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n let user = yield new SelectUserDialog_1.SelectUserDialog().show();\n yield app.startSite(ChangeUserSite, { \"id\": user[\"id\"] });\n })));\n }\n app.addDeepLink(\"login\", LoginSite_1.LoginSite);\n});\n//# sourceMappingURL=ChangeUserSite.js.map","module.exports = __webpack_public_path__ + \"html/changeUserSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegistrationSite = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/registrationSite.html\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst User_1 = require(\"../../../shared/v1/model/User\");\nclass RegistrationSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, RegistrationSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#registration-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n let result = yield UserManager_1.UserManager.getInstance().register(data[\"email\"], data[\"username\"], data[\"password\"]);\n if ((result instanceof User_1.User) || result === true) {\n yield new client_1.Toast(\"registration successful\").show();\n yield this.finish();\n }\n else {\n yield form.setErrors(result);\n }\n }));\n form.addValidator(data => {\n if (data[\"password\"] !== data[\"password2\"]) {\n return {\n \"password2\": \"the passwords do not match.\"\n };\n }\n return true;\n });\n // let listener = () => form.clearErrors();\n // this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n // this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n return res;\n });\n }\n}\nexports.RegistrationSite = RegistrationSite;\nRegistrationSite.ACCESS = \"loggedOut\";\nRegistrationSite.ADD_REGISTRATION_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (RegistrationSite.ADD_REGISTRATION_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"registration\", RegistrationSite.ACCESS, RegistrationSite));\n }\n app.addDeepLink(\"registration\", RegistrationSite);\n});\n//# sourceMappingURL=RegistrationSite.js.map","module.exports = __webpack_public_path__ + \"html/registrationSite.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncModel = void 0;\nconst AccessEasySyncModel_1 = require(\"./AccessEasySyncModel\");\nconst User_1 = require(\"./User\");\nclass UserSyncModel extends AccessEasySyncModel_1.AccessEasySyncModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncModel = UserSyncModel;\nUserSyncModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncPartialModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst User_1 = require(\"./User\");\nclass UserSyncPartialModel extends shared_1.EasySyncPartialModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncPartialModel = UserSyncPartialModel;\nUserSyncPartialModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncPartialModel.js.map","export default \"img/settings.png\";","module.exports = __webpack_public_path__ + \"html/menu.html\";","module.exports = __webpack_public_path__ + \"html/level.html\";","export default \"img/single_coin_fall_on_concrete_.mp3\";","module.exports = __webpack_public_path__ + \"html/end.html\";","module.exports = __webpack_public_path__ + \"html/settingsSite.html\";","module.exports = __webpack_public_path__ + \"html/tutorialSite.html\";","module.exports = __webpack_public_path__ + \"html/settings.html\";","module.exports = __webpack_public_path__ + \"html/credits.html\";","module.exports = __webpack_public_path__ + \"html/privacyPolicy.html\";","module.exports = __webpack_public_path__ + \"html/impressum.html\";","module.exports = __webpack_public_path__ + \"html/contactSite.html\";","export default __webpack_public_path__ + \"index.css\";","import {AccessEasySyncModel} from \"cordova-sites-user-management/dist/shared\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\n\nexport class LevelData extends AccessEasySyncModel{\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"words\"] = BaseDatabase.TYPES.STRING;\n columns[\"positions\"] = BaseDatabase.TYPES.STRING;\n columns[\"renderer\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"lang\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"difficulty\"] = BaseDatabase.TYPES.INTEGER;\n return columns;\n }\n\n static async getNextLevelData(renderer){\n debugger;\n }\n}\nBaseDatabase.addModel(LevelData);","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelData} from \"../../LevelData\";\n\nexport class Setup1000000002000 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelData, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","import {Helper} from \"js-helper/dist/shared/Helper\";\n\nexport class TemplateContainer{\n constructor(leafTemplate, parentTemplate, rowTemplate, triangleTemplate, columnTemplate){\n this.leafTemplate = leafTemplate;\n this.parentTemplate = parentTemplate;\n this.rowTemplate = rowTemplate;\n this.triangleTemplate = triangleTemplate;\n this.columnTemplate = columnTemplate;\n }\n\n copyLeafTemplate()\n {\n return this.leafTemplate.cloneNode(true);\n }\n\n copyParentTemplate()\n {\n return this.parentTemplate.cloneNode(true);\n }\n\n copyRowTemplate()\n {\n return this.rowTemplate.cloneNode(true);\n }\n\n copyTriangleTemplate()\n {\n return this.triangleTemplate.cloneNode(true);\n }\n\n copyColumnTemplate(){\n return this.columnTemplate.cloneNode(true);\n }\n}","\nexport class Segment{\n constructor(element){\n this.rotation = 0;\n this.element = element;\n this.parent = null;\n }\n\n getCurrentRotations(rotations){\n return rotations;\n }\n\n sameAs(otherSegment){\n return false;\n }\n\n setParent(parent)\n {\n this.parent = parent;\n }\n \n getLevel()\n {\n if (this.parent!==null)\n {\n return this.parent.getLevel();\n }\n }\n\n canRotate(){\n return false;\n }\n\n isSolved(){\n return (this.rotation === 0);\n }\n \n async rotate(){\n return Promise.resolve();\n };\n\n _updateElement(){};\n\n applyRotations(rotations){\n return rotations;\n }\n\n applyLocks(locks)\n {\n return locks;\n }\n\n getCurrentLocked(lockedArray){\n return lockedArray;\n }\n\n getElement()\n {\n return this.element;\n }\n}\n","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class LeafSegment extends Segment {\n\n constructor(element, leaf) {\n super(element);\n this.leaf = 'A';\n if (Helper.isNotNull(leaf)) {\n this.setLeaf(leaf);\n }\n }\n\n sameAs(otherSegment) {\n // debugger;\n return (otherSegment instanceof LeafSegment && otherSegment.leaf === this.leaf);\n }\n\n setLeaf(leaf) {\n this.leaf = leaf;\n }\n\n _updateElement() {\n ViewHelper.removeAllChildren(this.element.querySelector(\".leaf-element\")).appendChild(document.createTextNode(this.leaf));\n }\n}","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ParentSegment extends Segment {\n static initListener() {\n window.addEventListener(\"mousedown\", (e) => {\n // console.log(\"mousedown\");\n ParentSegment.mouseDownTarget = e.target;\n ParentSegment.clickPosition = {x: e.pageX, y: e.pageY};\n });\n window.addEventListener(\"mouseup\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n\n window.addEventListener(\"touchstart\", (e) => {\n if (e.targetTouches.length === 1) {\n ParentSegment.mouseDownTarget = e.targetTouches[0].target;\n ParentSegment.clickPosition = {x: e.targetTouches[0].pageX, y: e.targetTouches[0].pageY};\n }\n });\n window.addEventListener(\"touchend\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n }\n\n setIsRotatable(rotatable) {\n this.rotatable = rotatable;\n this._updateElement();\n }\n\n constructor(element) {\n super(element);\n this.children = [];\n this.class = \"rotate-0\";\n this.rotatable = true;\n\n this.userRotationDelta = 100;\n this.lastUserRotation = 0;\n\n this.touchendListener = (e) => {\n let now = new Date().getTime();\n\n let target = null;\n let position = null;\n\n if (e.changedTouches.length >= 1) {\n target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY);\n position = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY};\n }\n if (target != null && e.targetTouches.length === 0 && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(target)) {\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, target, ParentSegment.clickPosition, position);\n // console.log(\"touchendListener stopped event\", e);\n\n this.lastUserRotation = new Date().getTime();\n }\n };\n this.mouseupListener = (e) => {\n let now = new Date().getTime();\n\n // console.log(\"mouseup\", ParentSegment.mouseDownTarget);\n if (ParentSegment.mouseDownTarget !== null && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(e.target)) {\n let position = {x: e.pageX, y: e.pageY};\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, e.target, ParentSegment.clickPosition, position);\n // console.log(\"mouseupListener stopped event\", e);\n this.lastUserRotation = new Date().getTime();\n }\n };\n }\n\n canRotate() {\n return (this.rotatable && !this.getLevel().getHasWon());\n }\n\n async rotate(firstElem, secondElem, firstPosition, secondPosition) {\n const timeout = 250;\n const clickTolerance = 5;\n\n let rotationDirection = 1;\n if (Helper.isNotNull(secondElem) && Helper.isNotNull(firstElem) &&\n (Helper.isNull(firstPosition) || Helper.isNull(secondPosition) ||\n Math.abs(firstPosition.x - secondPosition.x) > clickTolerance ||\n Math.abs(firstPosition.y - secondPosition.y) > clickTolerance)) {\n\n let firstIndex = -1;\n let secondIndex = -1;\n let rotationIndexes = [0, 1, 3, 2];\n for (let i = 0; i < this.children.length; i++) {\n if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) {\n firstIndex = (i + this.rotation / 90) % 4;\n }\n if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) {\n secondIndex = (i + this.rotation / 90) % 4;\n }\n }\n\n if (firstIndex >= 0 && secondIndex >= 0) {\n if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1)\n || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3)\n || (firstIndex === 0 && secondIndex === 3)\n || (firstIndex === 3 && secondIndex === 2)) {\n rotationDirection = -1;\n }\n }\n }\n\n if (this.canRotate()) {\n this.rotation += 360 + 90 * rotationDirection;\n this.rotation %= 360;\n\n let currentRotation = this.rotation;\n\n this._updateRotationClass();\n this.element.classList.add(\"rotating\");\n if (rotationDirection === -1) {\n this.element.classList.add(\"reverse\");\n }\n\n let delayPromise = new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n }).then(() => {\n if (this.rotation === currentRotation) {\n this.element.classList.remove(\"rotating\");\n this.element.classList.remove(\"reverse\");\n }\n });\n this.getLevel().checkHasWon(delayPromise);\n return delayPromise;\n }\n }\n\n sameAs(otherSegment) {\n if (!(otherSegment instanceof ParentSegment) || otherSegment.children.length !== this.children.length) {\n return false;\n }\n for (let i = 0; i < this.children.length; i++) {\n if (!this.children[i].sameAs(otherSegment.children[i])) {\n return false;\n }\n }\n return true;\n }\n\n applyRotations(rotations) {\n this.rotation = rotations[0];\n\n if (isNaN(this.rotation)) {\n this.rotation = 0;\n }\n\n rotations.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n applyLocks(locks) {\n this.rotatable = (locks[0] !== false);\n locks.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n getCurrentRotations(rotations) {\n rotations.push(this.rotation);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n locked.push(this.rotatable);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n isSolved(checkChildren) {\n checkChildren = Helper.nonNull(checkChildren, true);\n if (checkChildren) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n if (!this.children[i].isSolved()) {\n return false;\n }\n }\n }\n return (this.rotation === 0 || (\n this.children[0].sameAs(this.children[3]) && this.children[1].sameAs(this.children[2]) && (\n this.rotation === 180 || this.children[0].sameAs(this.children[1]))))\n }\n\n setChildren(children) {\n this.children = [];\n for (let i = 0, n = children.length; i < n; i++) {\n this.addChild(children[i]);\n }\n }\n\n addChild(child) {\n this.children.push(child);\n child.setParent(this);\n this._updateElement();\n }\n\n _updateRotationClass() {\n // this.style.transform = \"rotate(\"+this.rotation+\"deg)\";\n this.element.classList.remove(this.class);\n this.class = \"rotate-\" + this.rotation;\n if (this.class === \"rotate-0\") {\n this.class = \"rotate-360\";\n }\n this.element.classList.add(this.class);\n }\n\n _updateElement() {\n let layer = this._getLayer();\n if (layer >= 2) {\n this.element.classList.add(\"layer-\" + layer);\n }\n\n if (!this.rotatable) {\n this.element.classList.add(\"locked\");\n }\n\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n this.element.removeEventListener(\"mouseup\", this.mouseupListener);\n this.element.removeEventListener(\"touchend\", this.touchendListener);\n\n this.element.addEventListener(\"mouseup\", this.mouseupListener);\n this.element.addEventListener(\"touchend\", this.touchendListener);\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n if (i % 2 === 1 && this.children.length - 1 !== i) {\n childContainer.appendChild(document.createElement(\"br\"));\n }\n }\n }\n\n _getLayer() {\n if (this.children.length >= 1 && this.children[0] && this.children[0] instanceof ParentSegment) {\n return this.children[0]._getLayer() + 1;\n }\n return 1;\n }\n}\n\nParentSegment.initListener();\n","import {LeafSegment} from \"../Segment/LeafSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {Random} from \"js-helper\";\n\nexport class Level {\n constructor(templateContainer) {\n this.rootSegment = null;\n this.words = [];\n this.startRotations = [];\n this.templateContainer = templateContainer;\n\n this.levelData = null;\n\n this.hasWon = false;\n this.id = null;\n\n this.saveAsCurrentAfterCheckWon = true;\n\n this.wonResolver = null;\n this.giveUpResolver = null;\n\n this._shakeLeafs = true;\n this._shakeLeafsTimeout = null;\n this._lastRotation = 0;\n\n this.wonPromise = new Promise((resolve, reject) => {\n this.wonResolver = resolve;\n this.giveUpResolver = reject;\n });\n\n this.segmentClickedListener = () => {\n // console.log(\"clicked\")\n };\n }\n\n getLevelData() {\n return this.levelData;\n }\n\n setLevelData(levelData) {\n this.levelData = levelData;\n }\n\n async saveAsCurrentLevel() {\n let rotations = this.getCurrentRotations();\n let locked = this.getCurrentLocked();\n await NativeStoragePromise.setItem(\"currentLevel\", JSON.stringify({\n \"id\": this.id,\n \"rotations\": rotations,\n \"locks\": locked\n }));\n }\n\n getCurrentLocked() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentLocked([]);\n }\n return [];\n }\n\n getCurrentRotations() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentRotations([]);\n }\n return [];\n }\n\n setLocks(locks) {\n if (this.rootSegment !== null) {\n this.rootSegment.applyLocks(locks);\n }\n }\n\n setId(id) {\n this.id = id;\n }\n\n getId() {\n return this.id;\n }\n\n getLevel() {\n return this;\n }\n\n setRootSegment(rootSegment) {\n this.rootSegment = rootSegment;\n this.rootSegment.setParent(this);\n if (this.startRotations) {\n this.applyRotations();\n }\n }\n\n setWords(words) {\n this.words = [];\n for (let i = 0, n = words.length; i < n; i++) {\n this.words.push(words[i].replace(/ß/g, \"ẞ\").toUpperCase());\n }\n }\n\n setStartRotations(rotations) {\n this.startRotations = rotations;\n }\n\n applyRotations(rotations) {\n if (this.rootSegment) {\n rotations = Helper.nonNull(rotations, this.startRotations);\n this.rootSegment.applyRotations(rotations);\n }\n }\n\n getHasWon() {\n return this.hasWon;\n }\n\n checkHasWon(delayPromise) {\n if (this.rootSegment.isSolved()) {\n this.hasWon = true;\n const self = this;\n Promise.resolve(delayPromise).then(() => {\n self.wonResolver(true);\n });\n return true;\n }\n if (this.saveAsCurrentAfterCheckWon) {\n this.saveAsCurrentLevel();\n }\n return false;\n }\n\n setSaveAsCurrentAfterCheckWon(shouldSave){\n this.saveAsCurrentAfterCheckWon = (shouldSave === true);\n }\n\n getWonPromise() {\n return this.wonPromise;\n }\n\n getRootSegment() {\n return this.rootSegment;\n }\n\n createSegments() {\n };\n\n getRotatableSegments() {\n return Level._getRotatableSegmentsFrom(this.rootSegment);\n }\n\n segmentClicked(segment) {\n if (this.segmentClickedListener) {\n this.segmentClickedListener(segment);\n }\n\n this._lastRotation = new Date().getTime();\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs) {\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(5000) + 25000);\n }\n }\n\n setSegmentClickedListener(listener) {\n this.segmentClickedListener = listener;\n }\n\n getLeafSegments() {\n return Level._getLeafSegmentsFrom(this.rootSegment);\n }\n\n static _getRotatableSegmentsFrom(segment) {\n let rotatable = [];\n if (segment.canRotate()) {\n rotatable.push(segment);\n }\n if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n rotatable.push.apply(rotatable, Level._getRotatableSegmentsFrom(segment.children[i]));\n }\n }\n return rotatable;\n }\n\n shakeLeafs() {\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs && !this.hasWon) {\n\n const leafs = this.getLeafSegments();\n if (leafs.length > 0) {\n const index = Random.getIntRandom(leafs.length - 1);\n const leaf = leafs[index];\n\n leaf.getElement().classList.add(\"shake\");\n setTimeout(() => {\n leaf.getElement().classList.remove(\"shake\");\n }, Random.getIntRandom(350) + 650);\n }\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(2000) + 5000);\n }\n }\n\n static _createLeafsForWord(word, leafSegmentTemplate) {\n let leafSegments = [];\n for (let i = 0, n = word.length; i < n; i++) {\n leafSegments.push(new LeafSegment(leafSegmentTemplate.cloneNode(true), word.charAt(i)));\n }\n return leafSegments;\n }\n\n static _getLeafSegmentsFrom(segment) {\n let leafs = [];\n if (segment instanceof LeafSegment) {\n leafs.push(segment);\n } else if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n leafs.push(...Level._getLeafSegmentsFrom(segment.children[i]));\n }\n }\n return leafs;\n }\n}\n","import {ParentSegment} from \"./ParentSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class RowSegment extends ParentSegment{\n constructor(element) {\n super(element);\n this.rotatable = false;\n }\n\n applyRotations(rotations)\n {\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentRotations(rotations){\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n applyLocks(locks) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class RowLevel extends Level {\n constructor(container, wordLength) {\n super(container);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 2 && this.words[0].length >= this.wordLength && this.words[1].length >= this.wordLength) {\n let leafsWordOne = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n let leafsWordTwo = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0, n = this.wordLength / 2; i < n; i++) {\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(leafsWordOne[2 * i]);\n parent.addChild(leafsWordOne[2 * i + 1]);\n parent.addChild(leafsWordTwo[2 * i]);\n parent.addChild(leafsWordTwo[2 * i + 1]);\n rootSegment.addChild(parent);\n }\n // rootSegment.applyRotations(this.startRotations);\n this.setRootSegment(rootSegment)\n }\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class SimpleLevel extends RowLevel{\n constructor(container) {\n super(container, 6);\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel8 extends RowLevel{\n constructor(container) {\n super(container, 8);\n }\n}\n","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel10 extends RowLevel{\n constructor(container) {\n super(container, 10);\n }\n}\n","import {RowSegment} from \"./RowSegment\";\n\nexport class TriangleSegment extends RowSegment{\n\n}","import {RowSegment} from \"../Segment/RowSegment\";\nimport {Level} from \"./Level\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {TriangleSegment} from \"../Segment/TriangleSegment\";\n\nexport class SixWordsRowLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 6 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.words[4].length >= this.wordLength &&\n this.words[5].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n leafsWords[4] = Level._createLeafsForWord(this.words[4], this.templateContainer.copyLeafTemplate());\n leafsWords[5] = Level._createLeafsForWord(this.words[5], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[4] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[5] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4*i]);\n parents[0].addChild(leafsWords[0][4*i+1]);\n parents[0].addChild(leafsWords[1][4*i]);\n parents[0].addChild(leafsWords[1][4*i+1]);\n\n parents[1].addChild(leafsWords[0][4*i+2]);\n parents[1].addChild(leafsWords[0][4*i+3]);\n parents[1].addChild(leafsWords[1][4*i+2]);\n parents[1].addChild(leafsWords[1][4*i+3]);\n\n parents[2].addChild(leafsWords[2][4*i]);\n parents[2].addChild(leafsWords[2][4*i+1]);\n parents[2].addChild(leafsWords[3][4*i]);\n parents[2].addChild(leafsWords[3][4*i+1]);\n\n parents[3].addChild(leafsWords[2][4*i+2]);\n parents[3].addChild(leafsWords[2][4*i+3]);\n parents[3].addChild(leafsWords[3][4*i+2]);\n parents[3].addChild(leafsWords[3][4*i+3]);\n\n parents[4].addChild(leafsWords[4][4*i]);\n parents[4].addChild(leafsWords[4][4*i+1]);\n parents[4].addChild(leafsWords[5][4*i]);\n parents[4].addChild(leafsWords[5][4*i+1]);\n\n parents[5].addChild(leafsWords[4][4*i+2]);\n parents[5].addChild(leafsWords[4][4*i+3]);\n parents[5].addChild(leafsWords[5][4*i+2]);\n parents[5].addChild(leafsWords[5][4*i+3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n let triangle = new TriangleSegment(this.templateContainer.copyTriangleTemplate());\n if (i % 2 === 0) {\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[4]);\n rowSegment.addChild(parents[5]);\n\n triangle.addChild(parent);\n triangle.addChild(rowSegment);\n\n triangle.getElement().classList.add(\"type-1\");\n }\n else {\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[0]);\n rowSegment.addChild(parents[1]);\n\n triangle.addChild(rowSegment);\n triangle.addChild(parent);\n\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n parent.addChild(parents[4]);\n parent.addChild(parents[5]);\n\n triangle.getElement().classList.add(\"type-2\");\n }\n rootSegment.addChild(triangle);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel8 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel12 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class FourWordsLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4 * i]);\n parents[0].addChild(leafsWords[0][4 * i + 1]);\n parents[0].addChild(leafsWords[1][4 * i]);\n parents[0].addChild(leafsWords[1][4 * i + 1]);\n\n parents[1].addChild(leafsWords[0][4 * i + 2]);\n parents[1].addChild(leafsWords[0][4 * i + 3]);\n parents[1].addChild(leafsWords[1][4 * i + 2]);\n parents[1].addChild(leafsWords[1][4 * i + 3]);\n\n parents[2].addChild(leafsWords[2][4 * i]);\n parents[2].addChild(leafsWords[2][4 * i + 1]);\n parents[2].addChild(leafsWords[3][4 * i]);\n parents[2].addChild(leafsWords[3][4 * i + 1]);\n\n parents[3].addChild(leafsWords[2][4 * i + 2]);\n parents[3].addChild(leafsWords[2][4 * i + 3]);\n parents[3].addChild(leafsWords[3][4 * i + 2]);\n parents[3].addChild(leafsWords[3][4 * i + 3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n rootSegment.addChild(parent);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel8 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel12 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {RowSegment} from \"./RowSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ColumnSegment extends RowSegment{\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n\n // constructor(element) {\n // super(element);\n // this.rotatable = false;\n // }\n //\n // applyRotations(rotations)\n // {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].applyRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentRotations(rotations){\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].getCurrentRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentLocked(locked) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locked = this.children[i].getCurrentLocked(locked);\n // }\n // return locked;\n // }\n //\n // applyLocks(locks) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locks = this.children[i].applyLocks(locks);\n // }\n // return locks;\n // }\n //\n // _updateElement() {\n // const childContainer = this.element.querySelector(\".child-container\");\n // ViewHelper.removeAllChildren(childContainer);\n //\n // this._updateRotationClass();\n //\n // const self = this;\n // this.element.onclick = function (e) {\n // self.rotate();\n // e.stopPropagation();\n // };\n //\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // this.children[i]._updateElement();\n // childContainer.appendChild(this.children[i].getElement());\n // }\n // }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {ColumnSegment} from \"../Segment/ColumnSegment\";\n\nexport class BigSegmentsLevels extends Level{\n constructor(templateContainer, wordLength, bigSegmentPositions) {\n super(templateContainer);\n this.wordLength = wordLength;\n this.bigSegmentPositions = bigSegmentPositions;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.wordLength >= 4\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 2; i++) {\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][2 * i]);\n parents[0].addChild(leafsWords[0][2 * i + 1]);\n parents[0].addChild(leafsWords[1][2 * i]);\n parents[0].addChild(leafsWords[1][2 * i + 1]);\n\n parents[1].addChild(leafsWords[2][2 * i]);\n parents[1].addChild(leafsWords[2][2 * i + 1]);\n parents[1].addChild(leafsWords[3][2 * i]);\n parents[1].addChild(leafsWords[3][2 * i + 1]);\n\n let parentSegment =null;\n if (this.bigSegmentPositions.indexOf(i) !== -1){\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[2].addChild(leafsWords[0][2 * i + 2]);\n parents[2].addChild(leafsWords[0][2 * i + 3]);\n parents[2].addChild(leafsWords[1][2 * i + 2]);\n parents[2].addChild(leafsWords[1][2 * i + 3]);\n\n parents[3].addChild(leafsWords[2][2 * i + 2]);\n parents[3].addChild(leafsWords[2][2 * i + 3]);\n parents[3].addChild(leafsWords[3][2 * i + 2]);\n parents[3].addChild(leafsWords[3][2 * i + 3]);\n\n parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[2]);\n parentSegment.addChild(parents[1]);\n parentSegment.addChild(parents[3]);\n i++;\n }\n else{\n parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[1]);\n }\n\n rootSegment.addChild(parentSegment);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class SimpleFourWordsLevel extends BigSegmentsLevels{\n constructor(templateContainer, wordLength, bigSegmentPosition) {\n super(templateContainer, wordLength, [bigSegmentPosition]);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_0 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 0);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_1 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 1);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_2 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 2);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_3 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 3);\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_1_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [1,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_2 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,2]);\n }\n}\n\n","import {SimpleLevel} from \"./SimpleLevel\";\nimport {RowLevel8} from \"./RowLevel8\";\nimport {RowLevel10} from \"./RowLevel10\";\nimport {SixWordsRowLevel8} from \"./SixWordsRowLevel8\";\nimport {SixWordsRowLevel12} from \"./SixWordsRowLevel12\";\nimport {FourWordsLevel8} from \"./FourWordsLevel8\";\nimport {FourWordsLevel12} from \"./FourWordsLevel12\";\nimport {SimpleFourWordsLevel10_0} from \"./SimpleFourWordsLevel10_0\";\nimport {SimpleFourWordsLevel10_1} from \"./SimpleFourWordsLevel10_1\";\nimport {SimpleFourWordsLevel10_2} from \"./SimpleFourWordsLevel10_2\";\nimport {SimpleFourWordsLevel10_3} from \"./SimpleFourWordsLevel10_3\";\nimport {TwoSegmentFourWordsLevel10_0_3} from \"./TwoSegmentFourWordsLevel10_0_3\";\nimport {TwoSegmentFourWordsLevel10_1_3} from \"./TwoSegmentFourWordsLevel10_1_3\";\nimport {TwoSegmentFourWordsLevel10_0_2} from \"./TwoSegmentFourWordsLevel10_0_2\";\nimport {Level} from \"./Level\";\n\nexport class LevelHelper {\n public static readonly types = {\n 20: SimpleLevel,\n 40: RowLevel8,\n 60: RowLevel10,\n 80: SimpleFourWordsLevel10_0,\n 81: SimpleFourWordsLevel10_1,\n 82: SimpleFourWordsLevel10_2,\n 83: SimpleFourWordsLevel10_3,\n 100: SixWordsRowLevel8,\n 110: TwoSegmentFourWordsLevel10_0_3,\n 111: TwoSegmentFourWordsLevel10_1_3,\n 112: TwoSegmentFourWordsLevel10_0_2,\n 120: FourWordsLevel8,\n 140: SixWordsRowLevel12,\n 160: FourWordsLevel12,\n };\n static setLevelType(typeId, level) {\n LevelHelper.types[typeId] = level;\n }\n\n static getLevelClass(type) {\n return LevelHelper.types[type];\n }\n\n static inflateLevel(levelData, templateContainer): Level {\n let level = new (LevelHelper.types[levelData[\"renderer\"]])(templateContainer);\n level.setWords(JSON.parse(levelData[\"words\"].replace(/"/g, '\"')));\n level.setId(levelData[\"id\"]);\n level.setLevelData(levelData);\n\n levelData[\"positions\"] = JSON.parse(levelData[\"positions\"]);\n for (let i = 0, n = levelData[\"positions\"].length; i < n; i++) {\n if (levelData[\"positions\"][i] <= 4) {\n levelData[\"positions\"][i] = 90 * levelData[\"positions\"][i];\n }\n }\n\n level.setStartRotations(levelData[\"positions\"]);\n return level;\n }\n}\n","const view = require(\"../../html/sites/end.html\");\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class EndSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n","import {BaseModel} from \"cordova-sites-database/dist/BaseModel\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {SelectQueryBuilder} from \"typeorm\";\n\nexport class LevelPlayed extends BaseModel {\n\n levelData: LevelData;\n played: boolean;\n\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"played\"] = {type: BaseDatabase.TYPES.BOOLEAN, default: true};\n return columns;\n }\n\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"levelData\"] = {\n target: LevelData.getSchemaName(),\n type: \"one-to-one\",\n joinColumn: true,\n // cascade: true,\n };\n return relations;\n }\n\n static async setPlayed(levelData, played?){\n played = Helper.nonNull(played, true);\n let levelPlayed = new LevelPlayed();\n levelPlayed.levelData = levelData;\n levelPlayed.played = played;\n\n return await levelPlayed.save();\n }\n\n static async getNextLevelData(renderer){\n let qb = >await this._database.createQueryBuilder(LevelData);\n\n qb = qb.select(\"COUNT(*) as count, difficulty\")\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .groupBy(\"difficulty\")\n .orderBy(\"difficulty, LevelData.id\");\n\n let countRes = await qb.getRawMany();\n\n let difficulty = null;\n let offset = null;\n\n if (!countRes.some(res => {\n if (res[\"count\"] > 0){\n difficulty = res[\"difficulty\"];\n offset = Math.floor(Math.random() * Math.floor(res[\"count\"]));\n return true;\n }\n return false;\n })){\n return null;\n }\n\n qb = >await this._database.createQueryBuilder(LevelData);\n qb = qb\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"difficulty = \"+difficulty)\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .orderBy(\"LevelData.id\")\n .limit(1)\n .offset(offset);\n\n return await qb.getOne();\n }\n}\nBaseDatabase.addModel(LevelPlayed);\n","import {Level} from \"../wordrotator/Level/Level\";\n\nconst helpIcon = require(\"../../img/help.png\").default;\nconst view = require(\"../../html/sites/level.html\");\nconst coinSound = require(\"../../sound/single_coin_fall_on_concrete_.mp3\").default;\n\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {EndSite} from \"./EndSite\";\n\nimport {\n MenuAction,\n Toast,\n ScaleHelper,\n Matomo,\n NativeStoragePromise,\n} from \"cordova-sites/dist/client\";\n\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class LevelSite extends MenuSite {\n\n public static readonly RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 110, 111, 112, 120, 140, 160];\n public static readonly TUTORIAL = {\n FIRST_LEVEL: 67,\n SECOND_LEVEL: 15,\n BIG_SEGMENT_LEVEL: 1921\n };\n\n private coinAction: MenuAction;\n private levelCounterAction: MenuAction;\n private levelCounter: number;\n private levelScaler: () => void;\n private wonParams: { aborted: boolean; coinCounterTimer: any };\n private coinPromise: Promise;\n private continueButtonScaler: () => Promise;\n private wonTextScaler: () => Promise;\n private wonText: HTMLElement;\n private templateContainer: TemplateContainer;\n private coinTemplate: HTMLElement;\n private coinContainer: HTMLElement;\n private level: Level;\n\n constructor(siteManager) {\n super(siteManager, view);\n // this.getNavbarFragment().setBackgroundImage(null);\n }\n\n async onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n\n let coinAction = new MenuAction(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n coinAction._shouldTranslate = false;\n coinAction.setLiClass(\"coin-counter img\");\n navbar.addAction(coinAction);\n this.coinAction = coinAction;\n\n let levelCounterAction = new MenuAction(Helper.nonNull(this.levelCounter, \"1\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n levelCounterAction._shouldTranslate = false;\n levelCounterAction.setLiClass(\"level-counter\");\n navbar.addAction(levelCounterAction);\n this.levelCounterAction = levelCounterAction;\n\n let helpAction = new MenuAction(\"\", () => {\n this.help();\n }, MenuAction.SHOW_ALWAYS, 900);\n helpAction._shouldTranslate = false;\n helpAction._icon = helpIcon;\n helpAction.setLiClass(\"help-action show-while-playing\");\n navbar.addAction(helpAction);\n\n return navbar;\n }\n\n async onConstruct(args) {\n this.levelCounter = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n // this.levelCounter = 9999;\n this.levelScaler = () => {\n };\n this.wonParams = {\n aborted: false,\n coinCounterTimer: null,\n };\n this.coinPromise = Promise.resolve();\n\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: ((await NativeStoragePromise.getItem(\"play-sound\", \"1\")) !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n soundManager.resume(SoundManager.CHANNELS.MUSIC);\n\n return super.onConstruct(args);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.addEventListener(\"click\", () => {\n continueButton.style.opacity = 0;\n this.nextLevel();\n });\n\n let wonText = this.findBy(\"#won-text\");\n\n let scaleHelper = new ScaleHelper();\n this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2);\n this.wonTextScaler = await scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5);\n this.wonText = wonText;\n this.wonText.style.fontSize = \"0\";\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n this.coinTemplate = this.findBy(\"#coin-template\");\n this.coinContainer = this.findBy(\"#coin-container\");\n\n this.coinTemplate.id = null;\n ViewHelper.removeAllChildren(this.coinContainer);\n\n // this.findBy(\"#help-button\").addEventListener(\"click\", () => {\n // this.help();\n // });\n await this.loadLastLevel();\n\n return res;\n }\n\n async loadLastLevel() {\n try {\n let currentLevelInfo = await NativeStoragePromise.getItem(\"currentLevel\");\n if (Helper.isNotNull(currentLevelInfo)) {\n currentLevelInfo = JSON.parse(currentLevelInfo);\n\n let levelData = await LevelData.findById(currentLevelInfo[\"id\"]);\n\n if (Helper.isNull(levelData)) {\n return this.nextLevel();\n }\n\n let level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n level.setStartRotations(currentLevelInfo[\"rotations\"]);\n\n level.getWonPromise().then(() => {\n this.levelWon(level);\n });\n\n level.createSegments();\n level.setLocks(currentLevelInfo[\"locks\"]);\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleTo(1, levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LoadLastLevel\"]);\n this.level.checkHasWon();\n return;\n }\n } catch (e) {\n console.error(e);\n }\n return this.nextLevel();\n }\n\n startEndSite() {\n this.startSite(EndSite);\n this.finish();\n }\n\n updateLevelCounter() {\n this.levelCounterAction.setName(this.levelCounter);\n if (this.levelCounter >= 10 && this.levelCounter <= 99) {\n this.levelCounterAction.setLiClass(\"num-10 level-counter\");\n } else if (this.levelCounter >= 100 && this.levelCounter <= 999) {\n this.levelCounterAction.setLiClass(\"num-100 level-counter\");\n } else if (this.levelCounter >= 1000) {\n this.levelCounterAction.setLiClass(\"num-1000 level-counter\");\n } else {\n this.levelCounterAction.setLiClass(\"level-counter\");\n }\n }\n\n async nextLevel() {\n this.showLoadingSymbol();\n try {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n\n if (Helper.isNull(levelData)) {\n this.startEndSite();\n return;\n }\n\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n //Waiting for Level to be done\n if (this.level && level.id === this.level.id) {\n console.log(\"Level is the same as before! reload!\");\n await new Promise((resolve) => setTimeout(resolve, 50));\n // return;\n debugger;\n return this.nextLevel();\n }\n\n level.getWonPromise().then(async () => {\n await this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n\n this._view.classList.remove('won');\n this.wonText.style.fontSize = \"0\";\n this.removeLoadingSymbol();\n\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n this.updateLevelCounter();\n\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n\n this.wonParams.aborted = true;\n clearTimeout(this.wonParams.coinCounterTimer);\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"NextLevel\", \"Level Number Normal\", this.levelCounter]);\n\n this.level.checkHasWon();\n\n return this.tutorial();\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n this.startEndSite();\n }\n }\n\n async onStart(args) {\n this.setTitle(\"WR\");\n\n Matomo.update(\"Level Sites\");\n let res = super.onStart(args);\n\n if (this.levelCounterAction) {\n this.updateLevelCounter();\n }\n this.levelScaler();\n\n //TODO Sound\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: (await NativeStoragePromise.getItem(\"play-sound\", \"1\") !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n await this.tutorial();\n\n return res;\n }\n\n async levelWon(level) {\n try {\n const savePromise = LevelPlayed.setPlayed(level.getLevelData());\n\n // savePromise.then((r) => console.log(\"levelSaved!\", r));\n\n this.levelCounter++;\n await NativeStoragePromise.setItem(\"levelCounter\", this.levelCounter);\n await NativeStoragePromise.remove(\"currentLevel\");\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.style.transition = \"none\";\n continueButton.style.opacity = 0;\n\n //Todo richtiges Element aufrufen?\n this._view.classList.add('won');\n ViewHelper.removeAllChildren(this.coinContainer);\n let coinsPerLevel = await NativeStoragePromise.getItem(\"coinsPerLevel\", 5);\n\n let coinsBefore = 0;\n\n let soundManager = SoundManager.getInstance();\n let audioOptions = soundManager.get(SoundManager.CHANNELS.SOUND);\n\n this.coinPromise = this.coinPromise.then(async () => {\n coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n await NativeStoragePromise.setItem(\"coins\", coinsBefore + parseInt(coinsPerLevel));\n }).then(async () => {\n return Promise.all([new Promise((r) => {\n setTimeout(() => {\n //TODO animationen einbauen\n continueButton.style.opacity = 1;\n r();\n }, 500)\n }),\n audioOptions.loadedPromise.catch(e => {\n console.error(e)\n })\n ]);\n });\n\n this.wonParams.aborted = false;\n\n for (let i = 0; i < coinsPerLevel; i++) {\n let coinElem = this.coinTemplate.cloneNode(true);\n this.coinContainer.appendChild(coinElem);\n this.coinPromise = this.coinPromise.then(() => {\n return new Promise(r => {\n let timeout = 350;\n if (!this.wonParams.aborted) {\n //TODO animationen einbauen\n\n coinElem.style.opacity = \"1\";\n soundManager.play(SoundManager.CHANNELS.SOUND);\n\n this.wonParams.coinCounterTimer = setTimeout(() => {\n if (!this.wonParams.aborted) {\n this.coinAction.setName(++coinsBefore);\n }\n }, timeout / 2);\n } else {\n r();\n }\n\n //Always do the next promise for garbage collection\n setTimeout(r, timeout);\n })\n });\n }\n\n this.coinPromise = this.coinPromise.catch((e) => {\n console.error(e)\n });\n\n this.wonTextScaler();\n this.continueButtonScaler();\n this.levelScaler();\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LevelWon\", \"Coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"))]);\n\n let leafs = level.getLeafSegments();\n leafs.forEach((leaf, i) => {\n let elem = leaf.getElement();\n elem.style.animationDelay = i * 50 + \"ms\";\n elem.classList.add(\"jump-animation\");\n })\n\n await savePromise;\n } catch (e) {\n console.error(e);\n }\n }\n\n async help() {\n let cost = await NativeStoragePromise.getItem(\"costForHelp\", 25);\n let currentCoins = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), 0));\n\n if (currentCoins >= cost) {\n currentCoins -= cost;\n await NativeStoragePromise.setItem(\"coins\", currentCoins);\n this.coinAction.setName(currentCoins);\n\n let rotatables = this.level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n this.level.saveAsCurrentLevel();\n\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n } else {\n new Toast(\"not-enough-coins\").show();\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Not enough Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n }\n }\n\n async tutorial() {\n const tutorialScale = 0.01;\n\n if (this.level.id === LevelSite.TUTORIAL.FIRST_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"1\");\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n switch (currentStep) {\n case \"1\": {\n this.level.setSegmentClickedListener(async () => {\n this._view.classList.remove(\"step-1\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"2\");\n this.tutorial();\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-1\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 2, 2);\n\n break;\n }\n case \"2\": {\n this.level.setSegmentClickedListener(() => {\n });\n this.level.getWonPromise().then(async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-2\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n this.coinPromise = this.coinPromise.then(async () => {\n new Toast(\"extra-coins-after-first-level\").show();\n await NativeStoragePromise.setItem(\"coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\")) + 50);\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n });\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-2\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.SECOND_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"3\");\n\n switch (currentStep) {\n case \"3\": {\n let scaleHelper = new ScaleHelper();\n\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let eventListener = async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-3\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"4\");\n // this.findBy(\"#help-button\").removeEventListener(\"click\", eventListener);\n this.levelScaler();\n };\n this.findBy(\".help-action\").addEventListener(\"click\", eventListener);\n\n // let textElem = this.findBy(\".tutorial-text .step-3\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"4\");\n\n switch (currentStep) {\n case \"4\": {\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let rotatableSegments = this.level.getRotatableSegments();\n let firstSegment = rotatableSegments[2];\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n firstSegment.element.appendChild(pointer);\n\n this.level.setSegmentClickedListener(async (segment) => {\n if (firstSegment === segment) {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-4\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"5\");\n this.levelScaler();\n }\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-4\");\n\n await this.levelScaler();\n // debugger;\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n }\n }\n}\n","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class MainMenuLevel extends FourWordsLevel{\n\n constructor(templateContainer) {\n super(templateContainer, 4);\n }\n\n saveAsCurrentLevel() {\n }\n\n // checkHasWon(delayPromise) {\n // }\n}","import {Matomo, MenuSite, NativeStoragePromise, ScaleHelper, Toast} from \"cordova-sites/dist/client\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelSite} from \"./LevelSite\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client\";\nimport {Level} from \"../wordrotator/Level/Level\";\n\nconst view = require(\"../../html/sites/tutorialSite.html\");\n\nexport class TutorialSite extends MenuSite {\n private templateContainer: TemplateContainer;\n\n constructor(siteManager: any) {\n super(siteManager, view);\n }\n\n async onConstruct(constructParameters: any): Promise {\n const res = super.onConstruct(constructParameters);\n await Promise.race([new SyncJob().sync([LevelData]).catch(e => console.error(e)), new Promise(async resolve => {\n let levelData = await LevelData.findById(LevelSite.TUTORIAL.FIRST_LEVEL);\n if (levelData !== null) {\n resolve();\n }\n })]);\n return res;\n }\n\n async onViewLoaded(): Promise {\n const res = super.onViewLoaded();\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n const tutorial1Container = this.findBy(\"#tutorial-1 .level-container\");\n const tutorial2Container = this.findBy(\"#tutorial-2 .level-container\");\n const tutorial3Container = this.findBy(\"#tutorial-3 .level-container\");\n\n const level1 = await this.loadLevel(LevelSite.TUTORIAL.FIRST_LEVEL);\n const level2 = await this.loadLevel(LevelSite.TUTORIAL.SECOND_LEVEL);\n const level3 = await this.loadLevel(LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL);\n\n level1.setSaveAsCurrentAfterCheckWon(false);\n level2.setSaveAsCurrentAfterCheckWon(false);\n level3.setSaveAsCurrentAfterCheckWon(false);\n\n tutorial1Container.appendChild(level1.getRootSegment().getElement());\n tutorial2Container.appendChild(level2.getRootSegment().getElement());\n tutorial3Container.appendChild(level3.getRootSegment().getElement());\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n\n let rotatableSegments = level3.getRotatableSegments();\n let pointerSegment = rotatableSegments[2];\n pointerSegment.element.appendChild(pointer);\n\n this.find(\".help-action\").addEventListener(\"click\", () => {\n TutorialSite.help(level2);\n })\n\n return res;\n }\n\n static async help(level: Level) {\n let rotatables = level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n if (rotatables.length === 0){\n return;\n }\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n }\n\n async loadLevel(id) {\n try {\n let levelData = await LevelData.findById(id);\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n level.getWonPromise().then(() => {\n console.log(\"level won!\");\n new Toast(\"you solved the tutorial level!\").show();\n //TODO\n // this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n return level;\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n // this.startEndSite();\n return null;\n }\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"tutorial\", TutorialSite);\n})\n","const view = require(\"../../html/sites/credits.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class CreditsSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"credits\", CreditsSite);\n});\n","const view = require(\"../../html/sites/privacyPolicy.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class PrivacyPolicySite extends MenuSite {\n constructor(siteManager) {\n super(siteManager,view);\n }\n\n async onViewLoaded() {\n let trackSwitch =this.findBy(\"#track-switch\");\n\n trackSwitch.addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n return super.onViewLoaded();\n }\n\n async onStart(args) {\n let trackSwitch =this.findBy(\"#track-switch\");\n trackSwitch.checked = ((await Matomo.getTrackingPromise()) === \"1\");\n\n // Matomo.update(\"Privacy Policy Sites\");\n return super.onStart(args);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"privacyPolicy\", PrivacyPolicySite);\n});\n","const view = require(\"../../html/sites/impressum.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class ImpressumSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"impressum\", ImpressumSite);\n});\n","const view = require(\"../../html/sites/contactSite.html\");\n\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Form} from \"cordova-sites/dist/client/js/Form\";\nimport {DataManager} from \"cordova-sites/dist/client/js/DataManager\";\nimport {Toast} from \"cordova-sites/dist/client/js/Toast/Toast\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class ContactSite extends MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n\n onViewLoaded() {\n let res = super.onViewLoaded();\n\n // @ts-ignore\n this.findBy(\"#contactText\").appendChild(Translator.makePersistentTranslation(\"contact text\", [__CONTACT_EMAIL__]))\n\n new Form(this.findBy(\"#contact-form\"), async values => {\n\n let result = await DataManager.send(\"contact\", values);\n if (result.success) {\n new Toast(\"the message was sent\").show();\n this.finish();\n } else {\n if (result) {\n new Toast(result.message).show();\n } else {\n new Toast(\"Es ist ein Fehler aufgetreten...\").show();\n }\n }\n });\n\n return res;\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"contact\", ContactSite);\n});\n","import {TutorialSite} from \"../Sites/TutorialSite\";\n\nconst view = require(\"../../html/fragment/settings.html\");\n\nimport {CreditsSite} from \"../Sites/CreditsSite\";\nimport {PrivacyPolicySite} from \"../Sites/PrivacyPolicySite\";\nimport {ImpressumSite} from \"../Sites/ImpressumSite\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\nimport {AbstractFragment} from \"cordova-sites/dist/client/js/Context/AbstractFragment\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LastSyncDates} from \"cordova-sites-easy-sync/dist/client/LastSyncDates\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ContactSite} from \"../Sites/ContactSite\";\n\nexport class WordRotatorSettingFragment extends AbstractFragment {\n constructor(site) {\n super(site, view);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n\n this.findBy(\"#reset-levels\").addEventListener(\"click\", async () => {\n await NativeStoragePromise.remove(\"currentLevel\");\n await NativeStoragePromise.remove(\"levelCounter\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n\n await LevelPlayed.clear();\n await LevelData.clear();\n await LastSyncDates.clear();\n });\n\n if (location.hostname.includes(\"beta\") || location.hostname.includes(\"127.0.0.1\") || location.hostname.includes(\"localhost\")) {\n // this.findBy(\"#reset-levels\").classList.remove(\"hidden\");\n }\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\")\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#track-switch\").addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.findBy(\"#tutorial-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(TutorialSite);\n });\n this.findBy(\"#credits-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(CreditsSite);\n });\n this.findBy(\"#privacy-policy-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(PrivacyPolicySite);\n });\n this.findBy(\"#contact-button\").addEventListener(\"click\", () => {\n // new Toast(\"contact site\").show();\n this.getSite().startSite(ContactSite);\n });\n this.findBy(\"#impressum-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(ImpressumSite);\n });\n // @ts-ignore\n this.findBy(\"#version-info\").innerText = __VERSION__;\n\n return res;\n }\n\n onStart(args) {\n Matomo.update(\"Settings Sites\");\n return super.onStart(args);\n }\n}\n","const view = require(\"../../html/sites/settingsSite.html\");\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\nimport {WordRotatorSettingFragment} from \"../Fragment/WordRotatorSettingFragment\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\n\nexport class SettingsSite extends MenuSite {\n\n constructor(siteManager) {\n super(siteManager, view);\n this.addFragment(\"#wordRotatorSettings\", new WordRotatorSettingFragment(this));\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"settings\", SettingsSite);\n});\n","const settingsIcon = require(\"../../img/settings.png\").default;\nconst view = require(\"../../html/sites/menu.html\");\n\nimport {App, Toast, DataManager, ScaleHelper, MenuSite} from \"cordova-sites/dist/client\";\nimport {Helper} from \"js-helper/dist/shared\";\nimport {LevelSite} from \"./LevelSite\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {MainMenuLevel} from \"../wordrotator/Level/MainMenuLevel\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client/SyncJob\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {ShareManager} from \"cordova-sites/dist/client/js/ShareManager/ShareManager\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuAction} from \"cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction\";\nimport {SettingsSite} from \"./SettingsSite\";\n\nexport class MainMenuSite extends MenuSite {\n static app: App;\n\n private loadLevelPromise: Promise;\n private listener: () => void;\n private templateContainer: TemplateContainer;\n private randomRotateTimeout;\n\n constructor(siteManager) {\n super(siteManager, view);\n this.loadLevelPromise = new SyncJob().sync([LevelData]).catch(e => console.error(e));\n this.listener = null;\n this.getNavbarFragment().setCanGoBack(false);\n }\n\n onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n let settingsAction = new MenuAction(\"\", () => {\n this.startSite(SettingsSite);\n }, MenuAction.SHOW_ALWAYS, null, settingsIcon);\n navbar.addAction(settingsAction);\n return navbar;\n }\n\n async onViewLoaded() {\n const res = super.onViewLoaded();\n\n let playButton = this.findBy(\"#play-button\");\n playButton.addEventListener(\"click\", () => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"startButton\"]);\n this.startLevelSite();\n });\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n\n leafSegmentTemplate.id = null;\n parentSegmentTemplate.id = null;\n rowSegmentTemplate.id = null;\n triangleTemplate.id = null;\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate);\n\n //TODO?\n // if (Helper.nonNull(MainMenuSite.app._cookieClosePromise)) {\n // MainMenuSite.app._cookieClosePromise.then(() => {\n // if (this.listener) {\n // this.listener();\n // }\n // });\n // }\n\n let soundManager = SoundManager.getInstance();\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#share-button\").addEventListener(\"click\", () => {\n new ShareManager().share(Translator.getInstance().translate(\"share-text\", [window.location]));\n });\n return res;\n // this.findBy(\"#share-buttons\").appendChild(ShareManager.generateDefaultShareElement(\"https://wordrotator.silas.link\"));\n }\n\n async onStart(args) {\n // Matomo.update(\"Menu Sites\");\n let res = super.onStart(args);\n\n let level = new MainMenuLevel(this.templateContainer);\n level.setWords([\"WORD\", \"ROTA\", \"TORW\", \"ORDR\"]);\n level.createSegments();\n\n level.getWonPromise().then(() => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"levelSolved\"]);\n this.startLevelSite();\n });\n\n let segment = level.getRootSegment();\n segment._updateElement();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(segment.getElement());\n\n let rotationsSegments = level.getRotatableSegments();\n\n let randomRotationFunction = () => {\n let timeout = Math.random() * 4500 + 1500;\n this.randomRotateTimeout = setTimeout(() => {\n let indexBlocked = -1;\n let indexesNotRight = [];\n for (let i = 0; i < rotationsSegments.length; i++) {\n if (rotationsSegments[i].rotation !== 0) {\n indexesNotRight.push(i);\n if (indexesNotRight.length >= 2) {\n break;\n }\n }\n }\n if (indexesNotRight.length === 1) {\n indexBlocked = indexesNotRight[0];\n }\n\n let index = Math.floor(Math.random() * rotationsSegments.length);\n if (index === indexBlocked) {\n index = (index + 1) % rotationsSegments.length;\n }\n\n rotationsSegments[index].rotate();\n randomRotationFunction();\n }, timeout);\n };\n randomRotationFunction();\n\n this.listener = async () => {\n let playButton = this.findBy(\"#play-button\");\n let levelNumber = this.findBy(\"#level-number\");\n levelNumber.innerText = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n\n let levelSegment = this.findBy(\"#level\");\n\n let scaleHelper = new ScaleHelper();\n await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2, 8, null, false);\n\n let levelStyle = getComputedStyle(levelSegment);\n playButton.style.width = levelStyle.getPropertyValue(\"width\");\n scaleHelper.scaleTo(0.65, playButton.children[0], playButton, null, null, null, 4, null, false);\n\n await scaleHelper.scaleTo(0.1, levelNumber.parentElement, levelNumber.parentElement.parentElement, null, null, null, 10, null, false);\n scaleHelper.scaleTo(1, levelNumber, levelNumber.parentElement, false, false, 5, null, null, false);\n };\n\n // this.listener();\n window.addEventListener(\"resize\", this.listener);\n setTimeout(this.listener, 50);\n\n //Musikbuttons update, falls in den Einstellungen umgestellt\n // let settingsManager = SettingsManager.getInstance();\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n\n return res;\n }\n\n async startLevelSite() {\n SoundManager.getInstance().resumeContext();\n\n this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n if (levelData !== null) {\n resolve();\n }\n })]));\n }\n\n onPause() {\n clearTimeout(this.randomRotateTimeout);\n window.removeEventListener(\"resize\", this.listener);\n return super.onPause();\n }\n\n // async loadLevels() {\n // try {\n // const db = await WordRotatorDb.getInstance();\n // const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);\n // // const dateLastSync = Helper.nonNull(localStorage.getItem(\"date-last-sync\"), 0);\n //\n // // let numberLevels = db.countLevels();\n // let newLastSync = null;\n // let maxRuns = 1;\n // let levelPromises = [];\n // for (let run = 0; run < maxRuns; run++) {\n // let res = await DataManager.load(\"wordRotator/levels\" + DataManager.buildQuery({\n // \"currentRun\": run,\n // \"dateLastSync\": dateLastSync\n // }));\n // if (!res[\"success\"]) {\n // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000).show();\n // }\n // newLastSync = null;\n // break;\n // }\n // res = res[\"result\"];\n // newLastSync = Helper.nonNull(newLastSync, res[\"currentSyncDate\"]);\n // maxRuns = res[\"maxRuns\"];\n //\n // let levels = res[\"levels\"];\n // for (let i = 0; i < levels.length; i++) {\n // let currentLevel = levels[i];\n // levelPromises.push(db.loadLevel(levels[i][\"id\"]).then(level => {\n // currentLevel[\"played\"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));\n // return currentLevel;\n // }));\n // }\n // }\n // let levels = await Promise.all(levelPromises);\n // await db.saveManyLevels(levels);\n //\n // if (newLastSync != null && newLastSync !== \"null\") {\n // await NativeStoragePromise.setItem(\"date-last-sync\", newLastSync);\n // db.saveDateLastSync(newLastSync);\n // }\n // }\n // catch(e){\n // // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000);\n // // }\n // console.error(e);\n // }\n // }\n}\n\nApp.addInitialization(app => {\n MainMenuSite.app = app;\n});\n","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelPlayed} from \"../LevelPlayed\";\n\nexport class ClientSetup1000000002001 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelPlayed, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","export default \"img/brightAndBeautifull__.mp3\";","import translationGerman from '../translations/de.json';\nimport translationEn from '../translations/en.json';\nimport {App, Translator, DataManager, Toast} from \"cordova-sites/dist/client\";\n\nimport \"cordova-sites-user-management/dist/client/js/translationInit\"\nimport \"cordova-sites/dist/client/js/translationInit\"\n\nimport {LoginSite, RegistrationSite, UserManager} from \"cordova-sites-user-management/dist/client\";\n\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {DeleteUserManagement1000000000000} from \"cordova-sites-user-management/dist/shared//migrations/DeleteUserManagement\";\nimport {SetupUserManagement1000000001000} from \"cordova-sites-user-management/dist/shared/migrations/SetupUserManagement\";\nimport {Setup1000000002000} from \"../../shared/model/migration/shared/Setup\";\nimport {SetupEasySync1000000000500} from \"cordova-sites-easy-sync/dist/client\";\nimport {MainMenuSite} from \"./Sites/MainMenuSite\";\nimport {ClientSetup1000000002001} from \"./model/migration/ClientSetup\";\nimport {EasySyncClientDb} from \"cordova-sites-easy-sync/dist/client/EasySyncClientDb\";\nimport {NavbarFragment} from \"cordova-sites/dist/client/js/Context/Menu/NavbarFragment\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\n\nimport music from \"../sound/brightAndBeautifull__.mp3\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\n\nwindow[\"JSObject\"] = Object;\n\n//Disable Google Analytics for VideoJS\nwindow[\"HELP_IMPROVE_VIDEOJS\"] = false;\n\nLoginSite.ADD_LOGIN_ACTION = false;\nRegistrationSite.ADD_REGISTRATION_ACTION = false;\n\nApp.addInitialization(async () => {\n Translator.init({\n translations: {\n \"de\": translationGerman,\n \"en\": translationEn\n },\n fallbackLanguage: \"de\",\n // markTranslations: true,\n markUntranslatedTranslations: true,\n });\n\n //Setting Title\n NavbarFragment.title = \"WordRotator\";\n\n let soundManager = SoundManager.getInstance();\n soundManager.play(SoundManager.CHANNELS.MUSIC, {\n audio: music,\n loop: true,\n volume: 0.6,\n muted: (await NativeStoragePromise.getItem(\"play-music\", \"1\") !== \"1\")\n }).catch(e => console.error(e));\n\n await UserManager.getInstance().getMe().catch(e => console.error(e));\n\n UserManager.getInstance().addLoginChangeCallback(async (isLoggedIn) => {\n if (isLoggedIn) {\n // await new SyncJob().sync([UserManager.syncParamFor(Definition), UserManager.syncParamFor(ExerciseProgress), UserManager.syncParamFor(WrongAnswer)]).catch(e => console.error(e));\n }\n });\n});\n\nDataManager._basePath = __HOST_ADDRESS__;\nDataManager.onlineCallback = isOnline => {\n if (!isOnline){\n new Toast(\"not online!\").show();\n }\n};\n\nObject.assign(BaseDatabase.CONNECTION_OPTIONS, {\n logging: [\"error\",],\n synchronize: false,\n migrationsRun: true,\n migrations: [\n DeleteUserManagement1000000000000,\n SetupEasySync1000000000500,\n SetupUserManagement1000000001000,\n Setup1000000002000,\n ClientSetup1000000002001,\n ]\n});\n\nlet app = new App();\napp.start(MainMenuSite).catch(e => console.error(e)).then(async () => {\n window[\"queryDb\"] = async (sql) => {\n // SELECT name FROM my_db.sqlite_master WHERE type='table';\n\n\n // console.log(\"DB\", EasySyncClientDb.getInstance());\n let res = await EasySyncClientDb.getInstance().rawQuery(sql);\n console.log(res);\n return res;\n }\n});\napp.ready(() => {\n console.log(\"initialisation over\", new Date());\n\n if (device.platform === \"browser\"){\n // Check that service workers are supported\n if ('serviceWorker' in navigator) {\n // Use the window load event to keep the page load performant\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('service-worker.js');\n });\n }\n }\n\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/typeorm/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js","webpack:///./node_modules/typeorm/browser/driver/Query.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///../src/client.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/Table.js","webpack:///./node_modules/typeorm/browser/util/OrmUtils.js","webpack:///./node_modules/js-helper/dist/shared/Helper.js","webpack:///./node_modules/typeorm/browser/subscriber/BroadcasterResult.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperator.js","webpack:///./node_modules/typeorm/browser/platform/BrowserPlatformTools.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///../../../../src/client/js/Legacy/Helper.ts","webpack:///./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js","webpack:///./node_modules/js-helper/dist/shared.js","webpack:///../../../../src/client/js/Sound/SoundManager.ts","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///../src/cordova-sites-database.ts","webpack:///./node_modules/typeorm/browser/driver/DriverUtils.js","webpack:///./node_modules/typeorm/browser/util/DateUtils.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/typeorm/browser/util/ObjectUtils.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableColumn.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/js-helper/dist/client/ViewHelper.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///../../../src/client/js/Translator.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableUnique.js","webpack:///./node_modules/typeorm/browser/metadata/ColumnMetadata.js","webpack:///../../../src/client/js/App.ts","webpack:///./node_modules/typeorm/browser/error/QueryRunnerAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/metadata/EntityMetadata.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/typeorm/browser/error/DriverOptionNotSetError.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableIndex.js","webpack:///./node_modules/typeorm/browser/error/QueryFailedError.js","webpack:///./node_modules/typeorm/browser/query-builder/Alias.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryExpressionMap.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsDriver.js","webpack:///../../../src/client/js/NativeStoragePromise.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableCheck.js","webpack:///./node_modules/typeorm/browser/error/TransactionNotStartedError.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/typeorm/browser/naming-strategy/DefaultNamingStrategy.js","webpack:///./node_modules/typeorm/browser/error/CannotExecuteNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/CannotConnectAlreadyConnectedError.js","webpack:///./node_modules/typeorm/browser/error/EntityMetadataNotFoundError.js","webpack:///./node_modules/typeorm/browser/migration/Migration.js","webpack:///./node_modules/typeorm/browser/driver/sqlserver/MssqlParameter.js","webpack:///./node_modules/typeorm/browser/migration/MigrationExecutor.js","webpack:///./node_modules/typeorm/browser/error/MissingPrimaryColumnError.js","webpack:///./node_modules/typeorm/browser/error/CircularRelationsError.js","webpack:///./node_modules/typeorm/browser/util/DepGraph.js","webpack:///./node_modules/typeorm/browser/error/DataTypeNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionOptionError.js","webpack:///./node_modules/typeorm/browser/error/InitializedRelationError.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataValidator.js","webpack:///./node_modules/typeorm/browser/error/QueryRunnerProviderAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/error/NoNeedToReleaseEntityManagerError.js","webpack:///./node_modules/typeorm/browser/repository/Repository.js","webpack:///./node_modules/typeorm/browser/repository/TreeRepository.js","webpack:///./node_modules/typeorm/browser/error/FindRelationsNotFoundError.js","webpack:///./node_modules/typeorm/browser/find-options/FindOptionsUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryDoesNotHaveEntityError.js","webpack:///./node_modules/typeorm/browser/repository/AbstractRepository.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryCannotInheritRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotTreeError.js","webpack:///./node_modules/typeorm/browser/repository/RepositoryFactory.js","webpack:///./node_modules/typeorm/browser/error/TreeRepositoryNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/MustBeEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectTopoligicalSorter.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js","webpack:///./node_modules/typeorm/browser/error/SubjectWithoutIdentifierError.js","webpack:///./node_modules/typeorm/browser/error/SubjectRemovedAndUpdatedError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/NestedSetSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotAttachTreeChildrenEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/ClosureSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/tree/MaterializedPathSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotDetermineEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/Subject.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/ManyToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectDatabaseEntityLoader.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/CascadesSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/EntityPersistExecutor.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/SqljsEntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManagerFactory.js","webpack:///./node_modules/typeorm/browser/error/MissingDriverError.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaDriver.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeDriver.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoDriver.js","webpack:///./node_modules/typeorm/browser/driver/postgres/PostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js","webpack:///./node_modules/typeorm/browser/driver/DriverFactory.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDirectoryExportedClassesLoader.js","webpack:///./node_modules/typeorm/browser/container.js","webpack:///./node_modules/typeorm/browser/metadata/IndexMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/EmbeddedMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationIdMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationCountMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/types/EventListenerTypes.js","webpack:///./node_modules/typeorm/browser/metadata-builder/MetadataUtils.js","webpack:///./node_modules/typeorm/browser/metadata/ForeignKeyMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/JunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/UniqueMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/RelationJoinColumnBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/EntityListenerMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/CheckMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/ExclusionMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-args/MetadataArgsStorage.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchemaTransformer.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/logger/SimpleConsoleLogger.js","webpack:///./node_modules/typeorm/browser/logger/AdvancedConsoleLogger.js","webpack:///./node_modules/typeorm/browser/platform/BrowserFileLoggerDummy.js","webpack:///./node_modules/typeorm/browser/logger/DebugLogger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerFactory.js","webpack:///./node_modules/typeorm/browser/cache/RedisQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/DbQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/QueryResultCacheFactory.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/connection/Connection.js","webpack:///./node_modules/typeorm/browser/error/ConnectionNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/AlreadyHasActiveConnectionError.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionManager.js","webpack:///./node_modules/typeorm/browser/platform/BrowserConnectionOptionsReaderDummy.js","webpack:///./node_modules/typeorm/browser/common/EntityTarget.js","webpack:///./node_modules/typeorm/browser/common/ObjectType.js","webpack:///./node_modules/typeorm/browser/common/ObjectLiteral.js","webpack:///./node_modules/typeorm/browser/common/DeepPartial.js","webpack:///./node_modules/typeorm/browser/error/CannotReflectMethodParameterTypeError.js","webpack:///./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js","webpack:///./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/PrimaryColumnCannotBeNullableError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinColumnError.js","webpack:///./node_modules/typeorm/browser/error/CannotGetEntityManagerNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/MetadataWithSuchNameAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/NamingStrategyNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinTableError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/PersistedEntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/ColumnTypeUndefinedError.js","webpack:///./node_modules/typeorm/browser/error/index.js","webpack:///./node_modules/typeorm/browser/decorator/columns/Column.js","webpack:///./node_modules/typeorm/browser/decorator/columns/CreateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/DeleteDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryGeneratedColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/UpdateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/VersionColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ViewColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ObjectIdColumn.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterLoad.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/EventSubscriber.js","webpack:///./node_modules/typeorm/browser/decorator/options/ColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/IndexOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinTableOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/RelationOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/EntityOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/ValueTransformer.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinColumn.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinTable.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationCount.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationId.js","webpack:///./node_modules/typeorm/browser/decorator/entity/Entity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/ChildEntity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/TableInheritance.js","webpack:///./node_modules/typeorm/browser/decorator/entity-view/ViewEntity.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/Transaction.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionManager.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionRepository.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeLevelColumn.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeParent.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeChildren.js","webpack:///./node_modules/typeorm/browser/decorator/tree/Tree.js","webpack:///./node_modules/typeorm/browser/decorator/Index.js","webpack:///./node_modules/typeorm/browser/decorator/Unique.js","webpack:///./node_modules/typeorm/browser/decorator/Check.js","webpack:///./node_modules/typeorm/browser/decorator/Exclusion.js","webpack:///./node_modules/typeorm/browser/decorator/Generated.js","webpack:///./node_modules/typeorm/browser/decorator/EntityRepository.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Any.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Between.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Equal.js","webpack:///./node_modules/typeorm/browser/find-options/operator/IsNull.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/ILike.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Like.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Not.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Raw.js","webpack:///./node_modules/typeorm/browser/find-options/FindConditions.js","webpack:///./node_modules/typeorm/browser/find-options/FindManyOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOneOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperatorType.js","webpack:///./node_modules/typeorm/browser/find-options/JoinOptions.js","webpack:///./node_modules/typeorm/browser/find-options/OrderByCondition.js","webpack:///./node_modules/typeorm/browser/logger/Logger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerOptions.js","webpack:///./node_modules/typeorm/browser/repository/BaseEntity.js","webpack:///./node_modules/typeorm/browser/repository/RemoveOptions.js","webpack:///./node_modules/typeorm/browser/repository/SaveOptions.js","webpack:///./node_modules/typeorm/browser/driver/mongodb/typings.js","webpack:///./node_modules/typeorm/browser/driver/types/DatabaseType.js","webpack:///./node_modules/typeorm/browser/driver/types/ReplicationMode.js","webpack:///./node_modules/typeorm/browser/index.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js","webpack:///./node_modules/typeorm/browser/util/StringUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilderUtils.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///../../../src/client/js/ViewInflater.ts","webpack:///./node_modules/typeorm/browser/subscriber/Broadcaster.js","webpack:///../../../../src/client/js/Legacy/Matomo.ts","webpack:///./node_modules/typeorm/browser/schema-builder/view/View.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///../../../src/client/js/DataManager.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js","webpack:///./node_modules/typeorm/browser/util/ApplyValueTransformers.js","webpack:///./node_modules/typeorm/browser/util/RandomGenerator.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///../../../../src/client/js/Context/MenuSite.ts","webpack:///./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js","webpack:///./node_modules/typeorm/browser/error/DriverPackageNotInstalledError.js","webpack:///./node_modules/typeorm/browser/error/ReturningStatementNotSupportedError.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchema.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///../../src/shared/EasySyncBaseModel.ts","webpack:///../../../../src/client/js/Context/AbstractFragment.ts","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/MenuAction.ts","webpack:///./node_modules/typeorm/node_modules/debug/src/browser.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///../../../../src/client/js/Dialog/Dialog.ts","webpack:///../../../../src/client/js/Toast/Toast.ts","webpack:///./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/OpenSubmenuAction.ts","webpack:///../../../src/client/js/UserManager.ts","webpack:///./node_modules/typeorm/browser/error/UpdateValuesMissingError.js","webpack:///./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///../../../../src/client/js/Context/Context.ts","webpack:///../../../../src/shared/v1/model/User.ts","webpack:///./node_modules/typeorm/browser/error/EntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/EntityColumnNotFound.js","webpack:///./node_modules/typeorm/browser/query-builder/result/UpdateResult.js","webpack:///./node_modules/typeorm/browser/error/LimitOnUpdateNotSupportedError.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/SelectQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/ReturningResultsEntityUpdator.js","webpack:///./node_modules/typeorm/browser/schema-builder/util/TableUtils.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///../../../../src/client/js/Context/UserSite.ts","webpack:///../src/shared.ts","webpack:///../../src/client/EasySyncClientDb.ts","webpack:///../../src/client/LastSyncDates.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/InsertResult.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///../../../../src/client/js/Context/AbstractSite.ts","webpack:///./node_modules/js-helper/dist/client.js","webpack:///../src/BaseDatabase.ts","webpack:///../../../../src/client/js/Site/LoginSite.ts","webpack:///../../../../src/client/js/MenuAction/UserMenuAction.ts","webpack:///../../src/client/ClientFileMedium.ts","webpack:///./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js","webpack:///./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js","webpack:///./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js","webpack:///./node_modules/typeorm/browser/query-builder/Brackets.js","webpack:///./node_modules/typeorm/browser/find-options/operator/In.js","webpack:///./node_modules/typeorm/browser/error/InsertValuesMissingError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/DeleteResult.js","webpack:///./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js","webpack:///./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js","webpack:///../../../../../src/client/js/Context/Menu/NavbarFragment.ts","webpack:///./node_modules/typeorm/browser/query-builder/JoinAttribute.js","webpack:///./node_modules/typeorm/browser/driver/SqlInMemory.js","webpack:///./node_modules/typeorm/browser/query-runner/BaseQueryRunner.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/js-helper/dist/shared/JsonHelper.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/typeorm/browser/query-builder/InsertQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/UpdateQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/DeleteQueryBuilder.js","webpack:///../../../../../src/client/js/Legacy/EventManager/EventManager.ts","webpack:///../../../../src/client/js/Context/TemplateSite.ts","webpack:///../../../../../src/client/js/Context/Menu/Menu.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/AccordionRenderer.ts","webpack:///../../src/shared/EasySyncPartialModel.ts","webpack:///../../src/shared/FileMedium.ts","webpack:///../../../../src/shared/v1/model/Role.ts","webpack:///../../../../src/client/js/MenuAction/StartUserSiteMenuAction.ts","webpack:///../../../src/client/FileWriter/FilePromise.ts","webpack:///./node_modules/typeorm/browser/query-builder/RelationUpdater.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationRemover.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js","webpack:///../../../../src/client/js/ShareManager/ShareManager.ts","webpack:///../src/BaseModel.ts","webpack:///../../src/client/SyncJob.ts","webpack:///../../../src/client/js/Form.ts","webpack:///../../../src/shared/migrations/DeleteUserManagement.ts","webpack:///../../../src/shared/migrations/SetupUserManagement.ts","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///../../src/shared/Translator.ts","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/typeorm/browser/query-builder/SoftDeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/shared/XSSHelper.js","webpack:///../../../../src/client/js/Context/SiteManager.ts","webpack:///./node_modules/js-helper/dist/client/Dragger/DraggedElement.js","webpack:///../../../../src/client/js/DataManager/NotOnlineError.ts","webpack:///../../../src/client/js/HistoryManager.ts","webpack:///../../../../src/client/js/ColorIndicator/ColorIndicator.ts","webpack:///../../../src/client/js/Singleton.ts","webpack:///../../../../../src/client/js/Context/Delegate/MasterSite.ts","webpack:///../../../../src/client/js/Toast/ToastManager.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/DropdownRenderer.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/MenuRenderer.ts","webpack:///../../../../../src/client/js/Context/Menu/Submenu.ts","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeChildFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Dialog/chooseDialog.html","webpack:///../../../../src/client/js/Dialog/ElemChooseDialog.ts","webpack:///../../../../src/client/js/Form/ImageSelectionElement.ts","webpack:///../../../../src/client/js/ShareManager/ShareDialog.ts","webpack:///../../../../src/client/js/Sound/AudioChain.ts","webpack:///../../../src/client/js/translationInit.ts","webpack:///../../../../src/shared/v1/model/Access.ts","webpack:///../../../../src/client/js/Site/ForgotPasswordSite.ts","webpack:///../../../../src/client/js/Site/NotAllowedSite.ts","webpack:///../../../../src/client/js/Dialog/SelectUserDialog.ts","webpack:///../../../src/client/FileWriter/FileTransferPromise.ts","webpack:///../../../src/client/FileWriter/FileWriterPromise.ts","webpack:///../../src/client/ClientModel.ts","webpack:///../../src/client/ClientPartialModel.ts","webpack:///../../../../src/shared/v1/model/AccessEasySyncModel.ts","webpack:///./src/client/img/help.png","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptQueryRunner.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/js-helper/dist/shared/Counter.js","webpack:///./node_modules/js-helper/dist/shared/DateHelper.js","webpack:///./node_modules/js-helper/dist/shared/MigrationHelper.js","webpack:///./node_modules/reflect-metadata/Reflect.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/typeorm/node_modules/debug/src/common.js","webpack:///./node_modules/typeorm/node_modules/ms/index.js","webpack:///./node_modules/js-helper/dist/shared/Prioritized.js","webpack:///./node_modules/js-helper/dist/shared/PromiseWithHandlers.js","webpack:///./node_modules/js-helper/dist/shared/Random.js","webpack:///./node_modules/js-helper/dist/client/Dragger/DragHelper.js","webpack:///./node_modules/js-helper/dist/client/HotkeyManager.js","webpack:///./node_modules/js-helper/dist/client/InputSelect.js","webpack:///./node_modules/cs-event-manager/dist/shared.js","webpack:///./node_modules/cs-event-manager/dist/shared/EventManager.js","webpack:///../../../../src/client/js/Context/ContainerSite.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/container.html","webpack:///../../../../../src/client/js/Context/Delegate/DelegateSite.ts","webpack:///../../../../../src/client/js/Context/Fragment/AbstractWindowFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/abstractWindowTemplate.html","webpack:///../../../../../src/client/js/Context/Fragment/AlphabeticListFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/alphabeticListFragment.html","webpack:///../../../../../src/client/js/Context/Fragment/TabFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/tabFragment.html","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/ErrorAction.ts","webpack:///./node_modules/cordova-sites/dist/client/img/errorIcon.png","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/StartSiteMenuAction.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/navbar.html","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/menuSite.html","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/swipeFragment.html","webpack:///../../../../src/client/js/Dialog/ButtonChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ConfirmDialog.ts","webpack:///../../../../src/client/js/Dialog/ImgChooseDialog.ts","webpack:///../../../../src/client/js/Form/Form.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Form/imageSelectionElement.html","webpack:///../../../../src/client/js/Legacy/ScaleHelper.ts","webpack:///../../../src/client/js/PromiseHelper.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Dialog/shareDialog.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/loginSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/forgotPasswordSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/notAllowedSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/dialog/selectUserDialog.html","webpack:///../../../src/client/js/OfflineUserManager.ts","webpack:///../../src/client/SyncJob_old.ts","webpack:///../../../src/client/editEntitySite/ModifyEntitySite.ts","webpack:///../../../src/client/migration/SetupEasySync.ts","webpack:///../../../../src/client/js/Site/ChangeUserSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/changeUserSite.html","webpack:///../../../../src/client/js/Site/RegistrationSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/registrationSite.html","webpack:///../../../../src/shared/v1/model/UserSyncModel.ts","webpack:///../../../../src/shared/v1/model/UserSyncPartialModel.ts","webpack:///./src/client/img/settings.png","webpack:///./src/client/html/sites/menu.html","webpack:///./src/client/html/sites/level.html","webpack:///./src/client/sound/single_coin_fall_on_concrete_.mp3","webpack:///./src/client/html/sites/end.html","webpack:///./src/client/html/sites/settingsSite.html","webpack:///./src/client/html/sites/tutorialSite.html","webpack:///./src/client/html/fragment/settings.html","webpack:///./src/client/html/sites/credits.html","webpack:///./src/client/html/sites/privacyPolicy.html","webpack:///./src/client/html/sites/impressum.html","webpack:///./src/client/html/sites/contactSite.html","webpack:///./src/client/sass/index.scss","webpack:///./src/shared/model/LevelData.ts","webpack:///./src/shared/model/migration/shared/Setup.ts","webpack:///./src/client/js/wordrotator/Segment/TemplateContainer.js","webpack:///./src/client/js/wordrotator/Segment/Segment.js","webpack:///./src/client/js/wordrotator/Segment/LeafSegment.js","webpack:///./src/client/js/wordrotator/Segment/ParentSegment.js","webpack:///./src/client/js/wordrotator/Level/Level.js","webpack:///./src/client/js/wordrotator/Segment/RowSegment.js","webpack:///./src/client/js/wordrotator/Level/RowLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleLevel.js","webpack:///./src/client/js/wordrotator/Level/RowLevel8.js","webpack:///./src/client/js/wordrotator/Level/RowLevel10.js","webpack:///./src/client/js/wordrotator/Segment/TriangleSegment.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel8.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel12.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel8.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel12.js","webpack:///./src/client/js/wordrotator/Segment/ColumnSegment.js","webpack:///./src/client/js/wordrotator/Level/BigSegmentsLevels.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_0.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_1.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_2.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_1_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_2.js","webpack:///./src/client/js/wordrotator/Level/LevelHelper.ts","webpack:///./src/client/js/Sites/EndSite.ts","webpack:///./src/client/js/model/LevelPlayed.ts","webpack:///./src/client/js/Sites/LevelSite.ts","webpack:///./src/client/js/wordrotator/Level/MainMenuLevel.js","webpack:///./src/client/js/Sites/TutorialSite.ts","webpack:///./src/client/js/Sites/CreditsSite.ts","webpack:///./src/client/js/Sites/PrivacyPolicySite.ts","webpack:///./src/client/js/Sites/ImpressumSite.ts","webpack:///./src/client/js/Sites/ContactSite.ts","webpack:///./src/client/js/Fragment/WordRotatorSettingFragment.ts","webpack:///./src/client/js/Sites/SettingsSite.ts","webpack:///./src/client/js/Sites/MainMenuSite.ts","webpack:///./src/client/js/model/migration/ClientSetup.ts","webpack:///./src/client/sound/brightAndBeautifull__.mp3","webpack:///./src/client/js/script.js"],"names":["TemplateContainer","leafTemplate","parentTemplate","rowTemplate","triangleTemplate","columnTemplate","cloneNode","Segment","element","rotation","parent","rotations","otherSegment","getLevel","Promise","resolve","locks","lockedArray","LeafSegment","leaf","Helper","isNotNull","setLeaf","ViewHelper","removeAllChildren","querySelector","appendChild","document","createTextNode","ParentSegment","children","class","rotatable","userRotationDelta","lastUserRotation","touchendListener","e","now","Date","getTime","target","position","changedTouches","length","elementFromPoint","pageX","pageY","x","y","targetTouches","contains","mouseDownTarget","stopPropagation","preventDefault","segmentClicked","rotate","clickPosition","mouseupListener","_updateElement","getHasWon","firstElem","secondElem","firstPosition","secondPosition","timeout","clickTolerance","rotationDirection","isNull","Math","abs","firstIndex","secondIndex","rotationIndexes","i","canRotate","currentRotation","_updateRotationClass","classList","add","delayPromise","setTimeout","then","remove","checkHasWon","sameAs","isNaN","splice","n","applyRotations","applyLocks","push","getCurrentRotations","locked","getCurrentLocked","checkChildren","nonNull","isSolved","addChild","child","setParent","layer","_getLayer","childContainer","removeEventListener","addEventListener","getElement","createElement","window","initListener","Level","templateContainer","rootSegment","words","startRotations","levelData","hasWon","id","saveAsCurrentAfterCheckWon","wonResolver","giveUpResolver","_shakeLeafs","_shakeLeafsTimeout","_lastRotation","wonPromise","reject","segmentClickedListener","NativeStoragePromise","setItem","JSON","stringify","replace","toUpperCase","self","saveAsCurrentLevel","shouldSave","_getRotatableSegmentsFrom","segment","clearTimeout","shakeLeafs","Random","getIntRandom","listener","_getLeafSegmentsFrom","leafs","getLeafSegments","index","apply","word","leafSegmentTemplate","leafSegments","charAt","RowSegment","onclick","RowLevel","container","wordLength","leafsWordOne","_createLeafsForWord","copyLeafTemplate","leafsWordTwo","copyRowTemplate","copyParentTemplate","setRootSegment","SimpleLevel","RowLevel8","RowLevel10","TriangleSegment","SixWordsRowLevel","leafsWords","parents","triangle","copyTriangleTemplate","rowSegment","SixWordsRowLevel8","SixWordsRowLevel12","FourWordsLevel","FourWordsLevel8","FourWordsLevel12","ColumnSegment","BigSegmentsLevels","bigSegmentPositions","parentSegment","indexOf","copyColumnTemplate","SimpleFourWordsLevel","bigSegmentPosition","SimpleFourWordsLevel10_0","SimpleFourWordsLevel10_1","SimpleFourWordsLevel10_2","SimpleFourWordsLevel10_3","TwoSegmentFourWordsLevel10_0_3","TwoSegmentFourWordsLevel10_1_3","TwoSegmentFourWordsLevel10_0_2","MainMenuLevel","Object","LoginSite","ADD_LOGIN_ACTION","RegistrationSite","ADD_REGISTRATION_ACTION","App","addInitialization","Translator","init","translations","translationGerman","translationEn","fallbackLanguage","markUntranslatedTranslations","NavbarFragment","title","soundManager","SoundManager","getInstance","CHANNELS","MUSIC","music","getItem","audio","loop","volume","muted","play","catch","console","error","UserManager","getMe","addLoginChangeCallback","isLoggedIn","DataManager","_basePath","__HOST_ADDRESS__","onlineCallback","isOnline","Toast","show","assign","BaseDatabase","CONNECTION_OPTIONS","logging","synchronize","migrationsRun","migrations","DeleteUserManagement1000000000000","SetupEasySync1000000000500","SetupUserManagement1000000001000","Setup1000000002000","ClientSetup1000000002001","app","start","MainMenuSite","sql","EasySyncClientDb","rawQuery","res","log","ready","device","platform","navigator","serviceWorker","register"],"mappings":"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AgD,gBAAgB,EAAE,KAAK;AACjJ;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEA;AACA,yCAAyC,6BAA6B;AACtE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;ACZA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,WAAW,mBAAO,CAAC,EAAS;AAC5B,eAAe,mBAAO,CAAC,EAAa;AACpC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,gD;;;;;;;ACrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACU;AACJ;AACJ;AACF;AACQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,qEAAqE,YAAY,8DAAU,QAAQ,EAAE;AACrG;AACA,kFAAkF,YAAY,wEAAe,aAAa,EAAE;AAC5H;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,mEAAmE,YAAY,8DAAU,QAAQ,EAAE;AACnG;AACA,+EAA+E,YAAY,sEAAc,YAAY,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB,EAAE;AACrF,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uBAAuB,EAAE;AAClF,6DAA6D,2BAA2B,EAAE;AAC1F,qEAAqE,2BAA2B,EAAE;AAClG,6DAA6D,2BAA2B,EAAE;AAC1F,2DAA2D,2BAA2B,EAAE;AACxF,mEAAmE,2BAA2B,EAAE;AAChG;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,+BAA+B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,wDAAwD,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2CAA2C,EAAE;AAC5G;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,yCAAyC,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,iDAAiD,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAmD,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD,wDAAwD,uCAAuC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC,EAAE;AACzG;AACA,0EAA0E,iGAAiG,EAAE;AAC7K;AACA;AACA;AACA;AACA,oDAAoD,6BAA6B,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC,EAAE;AACzG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAe,EAAE;AAC5D,wCAAwC,QAAQ,mEAAU,0CAA0C,EAAE;AACtG;AACA,0CAA0C,mCAAmC,EAAE;AAC/E,uCAAuC,QAAQ,8DAAU,eAAe,EAAE;AAC1E,mEAAmE,QAAQ,gEAAW,gBAAgB,EAAE;AACxG,gEAAgE,QAAQ,8DAAU,eAAe,EAAE;AACnG,4EAA4E,QAAQ,sEAAc,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;;AC5QA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qDAAqD,gCAAgC,EAAE;AACvF,qDAAqD,gCAAgC,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB,EAAE;AACjF;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uDAAuD,EAAE;AAC3H;AACA;AACA,kEAAkE,oEAAoE,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,0CAA0C,mEAAa,WAAW,4DAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,yCAAyC,OAAO;AAChD,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;;;;;;;ACpPa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,GAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,gBAAgB;AAChD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA,4CAA4C,IAAI,EAAE;AAClD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,4DAA4D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,kC;;;;;;;AC/RA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;;AClBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACuB;;AAExB;;;;;;;;AC5GA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gIAAgI,4BAA4B;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI,KAAK;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;;AAEA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AJ,OAAe,OAAlE;AACH;;;WAED,iCAA4B;AACxB,UAAI,QAAQ,GAAG,IAAf;AACA,UAAI,QAAQ,GAAG,IAAf;AAEA,UAAI,OAAO,GAAG,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAU,MAAV,EAAoB;AAC1C,gBAAQ,GAAG,OAAX;AACA,gBAAQ,GAAG,MAAX;AACH,OAHa,CAAd;AAIA,aAAO,CAAC,SAAD,CAAP,GAAqB,QAArB;AACA,aAAO,CAAC,QAAD,CAAP,GAAoB,QAApB;AAEA,aAAO,OAAP;AACH;;;;;;AAvXL,wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLyD;AACe;AAClC;AACY;AACQ;AACV;AACD;AACoB;AACT;AACR;AACF;AACQ;AACrB;AACiD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uGAAuG,EAAE;AACxL,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,sHAAsH,8DAA8D,EAAE;AACtL;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,0LAA0L,0BAA0B,EAAE;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA,wGAAwG,uCAAuC,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mEAAmE,EAAE;AAC5K;AACA;AACA,yCAAyC;AACzC,wEAAwE,QAAQ,sCAAS;AACzF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,mGAAmG,+CAA+C,EAAE;AACpJ,yCAAyC;AACzC;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2IAA2I,iDAAiD,EAAE;AAC9L,yCAAyC;AACzC;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2GAA2G,uDAAuD,EAAE;AACpK,yCAAyC;AACzC;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,gDAAgD,sBAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,qGAAqG,yDAAyD,EAAE;AAChK,yCAAyC;AACzC;AACA;AACA,wKAAwK,oBAAoB,EAAE;AAC9L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+FAA+F,yDAAyD,EAAE;AAC1J,yCAAyC;AACzC;AACA;AACA;AACA,uGAAuG,YAAY,kCAAW,SAAS,EAAE;AACzI;AACA;AACA,mJAAmJ,4BAA4B,EAAE;AACjL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA,4GAA4G,yBAAyB,EAAE;AACvI,sGAAsG,yBAAyB,EAAE;AACjI;AACA;AACA,uDAAuD,kCAAW,CAAC,gCAAU;AAC7E,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA,oFAAoF,kDAAW,yCAAyC,0DAAmB;AAC3J;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,uGAAuG,mDAAmD,EAAE;AAC5J,wEAAwE,gCAAU;AAClF,qEAAqE,kCAAW;AAChF;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,iLAAiL,4BAA4B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,mDAAmD,+CAA+C,EAAE,wCAAwC,EAAE;AAC5N,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,0IAA0I,iCAAiC,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,kDAAkD,+CAA+C,EAAE,EAAE,EAAE;AACrL,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+EAA+E,yFAAyF,iDAAiD,EAAE,EAAE,EAAE;AAC/N,4EAA4E,QAAQ,kCAAW,wBAAwB,EAAE;AACzH;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,kFAAkF,0DAA0D,uDAAuD,EAAE,EAAE,EAAE;AACzM,+EAA+E,QAAQ,wCAAc,2BAA2B,EAAE;AAClI;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA,oGAAoG,mDAAmD,EAAE;AACzJ,yCAAyC;AACzC;AACA;AACA,mGAAmG,QAAQ,0CAAe,4BAA4B,EAAE;AACxJ,2IAA2I,iBAAiB,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA;AACA,yFAAyF,0DAA0D,EAAE;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uFAAuF,uDAAuD,EAAE;AAChJ;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yCAAyC,qCAAQ;AACjD;AACA;AACA;AACA;AACA,iLAAiL,wBAAwB,EAAE;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,gFAAgF,qFAAqF,EAAE;AACvK;AACA;AACA,kLAAkL,mBAAmB,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,iFAAiF,uFAAuF,EAAE;AAC1K;AACA;AACA,8LAA8L,oBAAoB,EAAE;AACpN;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ,gCAAU,mEAAmE,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8EAA8E,sBAAK;AACnF;AACA;AACA;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,gEAAgE;AACpJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,8DAA8D;AAClJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;;AAEA;;;;;;;;;ACvsD+C;AACE;AAC4B;AAC9B;AAC4B;AAC3E;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,uEAAuE,+BAA+B,EAAE;AACxG,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wDAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qEAAqE,8CAA8C,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,4DAA4D,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,mBAAmB,4BAAQ;AAC3B,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,+CAA+C,EAAE;AAC/G;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACrhBa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAAkB;AACvC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,CAAiB;AACtC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,GAA0B;AAC/C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,GAA8B;AACnD,aAAa,mBAAO,CAAC,GAAiB;AACtC,aAAa,mBAAO,CAAC,GAAoB;AACzC,kC;;;;;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;;;;;;AAjBL;AAGkB,wBAAW;AACrB,OAAK,EAAE,OADc;AAErB,OAAK,EAAE,OAFc;AAGrB,SAAO,EAAE;AAHY,CAAX;AA0KlB,UAAI,iBAAJ,CAAsB,aAAG,EAAG,CACxB;AACA;AACA;AACA;AACA;AACA;AACH,CAPD,E,CASA;AACA;AACA;AACA;AACA,M;;;;;;AC/LA,YAAY,mBAAO,CAAC,GAAW;AAC/B,UAAU,mBAAO,CAAC,EAAQ;AAC1B,aAAa,mBAAO,CAAC,EAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;ACVA;;AACA;;AACA,kC;;;;;;;ACFA;AAAA;AAAA;AAAyC;AACE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAI,mBAAmB,yBAAyB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;ACrLA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA,mCAAmC,qCAAqC,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;;AC9LA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AAAA;AAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,iCAAiC,8DAAQ,0CAA0C,mBAAmB;AACtG;AACA;AACA,iDAAiD,8DAAQ,sDAAsD,UAAU;AACzH;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,gBAAgB;AACvD;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC9CA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;AC7GA,6BAA6B;AAC7B,uCAAuC;;;;;;;;ACD1B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACnDA;AACA,kBAAkB,mBAAO,CAAC,EAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;ACHD,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;AACA;;AACA;AAEA;;AAEG;;;IACU,U;;;;;AAQT;;;AAGG;AACH,sBAAY,MAAZ,EAAkB;AAAA;;AAAA;;AACd,8BAAM,MAAN;AACA,UAAM,GAAG,gBAAO,OAAP,CAAe,MAAf,EAAuB,EAAvB,CAAT;AAEA,UAAK,gBAAL,GAAwB,MAAM,CAAC,eAAP,IAA0B,MAAK,iBAAvD;AACA,UAAK,iBAAL,GAAyB,MAAM,CAAC,gBAAP,IAA2B,UAApD;AACA,UAAK,iBAAL,GAAyB,MAAM,CAAC,gBAAP,IAA2B,aAApD;AAEA,UAAK,YAAL,GAAoB,MAAK,gBAAL,GAAwB,IAAxB,CAA6B,sBAAY;AAAA,aAAI,MAAK,WAAL,CAA0B,YAAa,CAAC,WAAd,EAA1B,CAAJ;AAAA,KAAzC,CAApB;AARc;AASjB;AAED;;;AAGG;;;;;WACG,qBAAY,QAAZ,EAAoB;;;;;;sBAClB,KAAK,gBAAL,KAA0B,Q;;;;;;AAC1B,uBAAM,KAAK,kBAAL,EAAN;;;;;;oBAIC,KAAK,aAAL,CAAmB,QAAnB,C;;;;;;;;AAIL,oBAAI,OAAO,QAAP,KAAoB,WAAxB,EAAqC;AACjC,0BAAQ,CAAC,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,EAAyC,YAAzC,CAAsD,MAAtD,EAA8D,QAA9D;AACH;;AAED,qBAAK,gBAAL,GAAwB,QAAxB;;AACA,uBAAM,KAAK,kBAAL,EAAN;;;;AAGA,uBAAM,4CAAqB,OAArB,CAA6B,KAAK,iBAAlC,EAAqD,KAAK,gBAA1D,CAAN;;;;;;;;;AACH;AAED;;;;;AAKG;;;;WACH,mBAAU,GAAV,EAAe,IAAf,EAAsB,QAAtB,EAA+B;AAC3B,uFAAuB,GAAvB,EAA4B,IAA5B,EAAkC,gBAAO,OAAP,CAAe,QAAf,EAAyB,KAAK,gBAA9B,CAAlC;AACH;AAGD;;;;;;;;;;;AAWG;;;;WACH,gCAAuB,QAAvB,EAAiC,eAAjC,EAAgD;AAC5C,qBAAe,GAAG,gBAAO,OAAP,CAAe,eAAf,EAAgC,IAAhC,CAAlB;AAEA,WAAK,0BAAL;;AACA,WAAK,qBAAL,CAA2B,GAA3B,CAA+B,KAAK,0BAApC,EAAgE,QAAhE;;AACA,UAAI,eAAJ,EAAqB;AACjB,gBAAQ;AACX;;AACD,aAAO,KAAK,0BAAZ;AACH;AAED;;;;AAIG;;;;WACH,mCAA0B,UAA1B,EAAoC;AAChC,WAAK,qBAAL,CAA2B,MAA3B,CAAkC,UAAlC;AACH;AAED;;AAEG;;;;WACG,4BAAmB,WAAnB,EAA+B;;;;;;;;;AACjC,2BAAW,GAAG,gBAAO,OAAP,CAAe,WAAf,EAA4B,QAA5B,CAAd;;AACA,oBAAI,OAAO,WAAP,KAAuB,WAA3B,EAAwC;AAChC,0BADgC,GACrB,WAAW,CAAC,sBAAZ,CAAmC,KAAK,iBAAxC,CADqB;;AAEpC,uBAAS,CAAT,GAAa,CAAb,EAAgB,GAAhB,GAAsB,QAAQ,CAAC,MAA/B,EAAuC,CAAC,GAAG,GAA3C,EAAgD,CAAC,EAAjD,EAAqD;AAC7C,uBAD6C,GACtC,UAAU,CAAC,QAAX,CAAoB,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,aAApB,CAApB,IAA0D,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,aAApB,CAA1D,GAAgG,QAAQ,CAAC,CAAD,CAAR,CAAY,SAAZ,IAAyB,EADnF;;AAEjD,wBAAI,GAAG,KAAK,EAAR,IAAc,CAAC,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,yBAApB,CAAnB,EAAmE;AAC/D,0BAAI;AACI,mCADJ,GACkB,KAAK,SAAL,CAAe,GAAf,EAAqB,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,iBAApB,MAA2C,SAA5C,GAAyD,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,iBAApB,CAAX,CAAzD,GAA8G,SAAlI,CADlB;;AAEA,4BAAI,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,oBAApB,MAA8C,GAAlD,EAAuD;AACnD,kCAAQ,CAAC,CAAD,CAAR,CAAY,SAAZ,GAAwB,WAAxB;AACH,yBAFD,MAEO;AACH,kCAAQ,CAAC,CAAD,CAAR,CAAY,SAAZ,GAAwB,WAAxB;AACH;;AACD,gCAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,aAApB,IAAqC,GAArC;AACH,uBARD,CAQE,OAAO,GAAP,EAAY;AACV,+BAAO,CAAC,KAAR,CAAc,mCAAmC,GAAjD;AACH;AACJ,qBAdgD,CAgBjD;;;AACA,yBAAS,CAAT,IAAc,QAAQ,CAAC,CAAD,CAAR,CAAY,OAA1B,EAAmC;AAC/B,0BAAI,CAAC,CAAC,UAAF,CAAa,aAAb,KAA+B,CAAC,CAAC,CAAC,QAAF,CAAW,MAAX,CAApC,EAAwD;AACpD,4BAAI;AACA,kCAAQ,CAAC,CAAD,CAAR,CAAY,CAAC,CAAC,MAAF,CAAS,EAAT,EAAa,WAAb,EAAZ,IAA0C,KAAK,SAAL,CAAe,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,CAApB,CAAf,EAAwC,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,CAAC,GAAG,MAAxB,MAAoC,SAArC,GAAkD,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,CAAD,CAAR,CAAY,OAAZ,CAAoB,CAAC,GAAG,MAAxB,CAAX,CAAlD,GAAgG,SAAvI,CAA1C;AACH,yBAFD,CAEE,OAAO,GAAP,EAAY;AACV,iCAAO,CAAC,KAAR,CAAc,mCAAmC,GAAjD;AACH;AACJ;AACJ;AACJ;AACJ,iB,CAED;;;;AACA,uBAAM,gBAAO,YAAP,CAAoB,KAAK,qBAAzB,EAAgD,UAAM,QAAN;AAAA,yBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,8DAAC,QAAQ,CAAC,WAAD,CAAT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAjB;AAAA,iBAAhD,CAAN;;;;;;;;;AAEH;AAED;;;AAGG;;;;WACG,4BAAgB;;;;;;;;AACC,uBAAM,4CAAqB,OAArB,CAA6B,KAAK,iBAAlC,CAAN;;;AAAf,4B;;sBACA,CAAC,UAAU,CAAC,QAAX,CAAoB,YAApB,CAAD,IAAsC,EAAE,YAAY,IAAI,KAAK,aAAvB,C;;;;;AAClC,6B,GAAgB,E;;AAEpB,oBAAI,SAAS,CAAC,QAAV,KAAuB,SAA3B,EAAsC;AAClC,+BAAa,CAAC,IAAd,CAAmB,SAAS,CAAC,QAA7B;AACH;;AAED,oBAAI,eAAe,SAAnB,EAA8B;AAC1B;AACA,+BAAa,GAAG,SAAS,CAAC,SAAV,CAAoB,KAApB,CAA0B,CAA1B,CAAhB;AACH,iB,CAED;;;AACA,6BAAa,CAAC,IAAd,CAAmB,KAAK,iBAAxB,E,CAEA;;AACS,iB,GAAI,C,EAAG,Y,GAAe,aAAa,CAAC,M;;;sBAAQ,CAAC,GAAG,Y;;;;;sBACjD,aAAa,CAAC,CAAD,CAAb,IAAoB,KAAK,a;;;;;AACzB,4BAAY,GAAG,aAAa,CAAC,CAAD,CAA5B;;;;AAF+D,iBAAC,E;;;;;kDAQrE,Y;;;;;;;;;AACV;AAED;;;;;;;AAOG;;;;WACH,mCAA0B,GAA1B,EAA+B,IAA/B,EAAsC,GAAtC,EAA4C,OAA5C,EAAoD;AAChD,aAAO,GAAG,gBAAO,OAAP,CAAe,OAAf,EAAwB,GAAxB,EAA6B,IAA7B,EAAmC,KAAnC,CAAV;AACA,SAAG,GAAG,GAAG,IAAI,MAAb;;AAEA,UAAI,OAAO,QAAP,KAAoB,WAAxB,EAAqC;AACjC,YAAI,QAAQ,GAAG,QAAQ,CAAC,aAAT,CAAuB,GAAvB,CAAf;AACA,gBAAQ,CAAC,OAAT,CAAiB,aAAjB,IAAkC,GAAlC;AACA,gBAAQ,CAAC,SAAT,CAAmB,GAAnB,CAAuB,KAAK,iBAA5B;;AACA,YAAI,IAAI,KAAK,SAAb,EAAwB;AACpB,kBAAQ,CAAC,OAAT,CAAiB,iBAAjB,IAAsC,IAAI,CAAC,SAAL,CAAe,IAAf,CAAtC;AACH;;AACD,YAAI,OAAO,KAAK,IAAhB,EAAsB;AAClB,kBAAQ,CAAC,SAAT,GAAqB,KAAK,SAAL,CAAe,GAAf,EAAoB,IAApB,CAArB;AACA,kBAAQ,CAAC,OAAT,CAAiB,oBAAjB,IAAyC,GAAzC;AACH,SAHD,MAGO;AACH,kBAAQ,CAAC,SAAT,GAAqB,KAAK,SAAL,CAAe,GAAf,EAAoB,IAApB,CAArB;AACH;;AACD,eAAO,QAAP;AACH;AACJ;;;WAED,+BAAmB;AACf,aAAO,KAAK,iBAAZ;AACH;;;WAED,8BAAkB;AACd,aAAO,KAAK,gBAAZ;AACH;;;WAED,uBAAkB;AACd,aAAmB,wBAAiB,WAAjB,EAAnB;AACH;;;WAED,qBAAyB,QAAzB,EAAiC;;;;;;;AACzB,wB,GAAW,UAAU,CAAC,WAAX,E;;qBACX,Q;;;;;kDACoB,QAAS,CAAC,WAAV,CAAsB,QAAtB,C;;;;;;;;;AAE3B;;;WAED,mCAAiC,GAAjC,EAAsC,IAAtC,EAA6C,GAA7C,EAAmD,OAAnD,EAA2D;AACvD,UAAI,QAAQ,GAAG,UAAU,CAAC,WAAX,EAAf;;AACA,UAAI,QAAJ,EAAc;AACV,eAAoB,QAAS,CAAC,yBAAV,CAAoC,GAApC,EAAyC,IAAzC,EAA+C,GAA/C,EAAoD,OAApD,CAApB;AACH;AACJ;;;WAED,gCAA8B,QAA9B,EAAwC,eAAxC,EAAwD;AACpD,UAAI,QAAQ,GAAG,UAAU,CAAC,WAAX,EAAf;;AACA,UAAI,QAAJ,EAAc;AACV,eAAoB,QAAS,CAAC,sBAAV,CAAiC,QAAjC,EAA2C,eAA3C,CAApB;AACH;AACJ;;;WAED,mCAAiC,UAAjC,EAA2C;AACvC,UAAI,QAAQ,GAAG,UAAU,CAAC,WAAX,EAAf;;AACA,UAAI,QAAJ,EAAc;AACV,eAAoB,QAAS,CAAC,yBAAV,CAAoC,UAApC,CAApB;AACH;AACJ;;;WAED,4BAAgC,WAAhC,EAA2C;;;;;;;AACnC,wB,GAAW,UAAU,CAAC,WAAX,E;;qBACX,Q;;;;;kDACoB,QAAS,CAAC,kBAAV,CAA6B,WAA7B,C;;;;;;;;;AAE3B;;;WAED,cAAY,MAAZ,EAAkB;AACd,8BAAiB,QAAjB,GAA4B,IAAI,UAAJ,CAAe,MAAf,CAA5B;AACH;;;;EAnP2B,uB;;AAAhC;AAuPA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,sBAAX,GAAoC,IAApC;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;;AClQA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,4BAA4B,EAAE;AACrG,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACF;AACgB;AACA;AACY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB,EAAE;AAClE,yCAAyC,uCAAuC,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,QAAQ,KAAK,iBAAiB,GAAG,YAAY,UAAU,EAAE,GAAG,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE;AACrH;AACA;AACA;AACA;AACA,gCAAgC,0DAA0D;AAC1F;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC,iBAAiB,IAAI;AACrB;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,+EAAY;AACnH;AACA;AACA,wKAAwK,+EAAY;AACpL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,mGAAmG,+EAAY;AAC/G;AACA;AACA,4IAA4I,+EAAY;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2FAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mFAAmF,EAAE;AACjJ;AACA;AACA;AACA;AACA,wDAAwD,yFAAyF,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wGAA4B;AAClD;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,qCAAqC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,kBAAkB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+CAA+C,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0GAA0G,EAAE;AAC/J;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA,uCAAuC,iCAAiC;AACxE;AACA;AACA;AACA,wCAAwC,mEAAa,KAAK,4DAAM;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,QAAQ,+DAAQ,qCAAqC,EAAE;AACrH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+DAAQ;AAC3E,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yEAAO,+BAA+B,mCAAmC;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,iDAAiD,EAAE;AAC9H,qEAAqE,yBAAyB,EAAE;AAChG;AACA,8EAA8E,mEAAmE,EAAE;AACnJ;AACA;AACA,yEAAyE,8CAA8C,EAAE;AACzH;AACA;AACA;AACA,8BAA8B,6BAA6B;AAC3D;AACA,qBAAqB,0CAA0C,gBAAgB,sBAAsB;AACrG;AACA,QAAQ,0BAA0B,8BAA8B;AAChE;AACA;AACA;AACA,gDAAgD,QAAQ,+DAAQ,4DAA4D,EAAE;AAC9H,oDAAoD,QAAQ,+DAAQ,gEAAgE,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oFAAY,wCAAwC,sFAAc,wCAAwC,uFAAe,wCAAwC,iFAAS;AACzO;AACA;AACA,iEAAiE,sFAAc;AAC/E,kEAAkE,uFAAe;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,sFAAc;AAClF;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;ACpjBA;AACA,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACJA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;;;ACjBA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,4BAA4B,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;;AC3DA;AAAA;AAAA;AAA4C;AACM;AAClD;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,eAAe,8DAAQ,CAAC,8DAAQ,GAAG,iBAAiB,uEAAuE;AAC9I;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;;;;;;;;;;;;;;ACrBkD;AAClD;AACA;AACA,IAAI,WAAK;AACT;AACA,QAAQ,kCAAW,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACgB;;AAEjB;;;;;;;;;;;;ACrCyC;AACT;AACgB;AACwB;AACS;AACjF;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iCAAiC,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA,6HAA6H;AAC7H;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,eAAe,EAAE;AAC3E;AACA;AACA,+CAA+C,6BAA6B,WAAK,SAAS,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,sCAAa,gCAAgC,EAAE;AACjI,wFAAwF,YAAY,kDAAmB,oBAAoB,EAAE;AAC7I,iGAAiG,YAAY,wDAAsB,uBAAuB,EAAE;AAC5J,uDAAuD,SAAS,qCAAQ,GAAG,UAAU,EAAE;AACvF,0DAA0D,SAAS,qCAAQ,GAAG,WAAW,EAAE;AAC3F,uCAAuC;AACvC,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;AChTgF;AACtB;AACpB;AACsB;AACF;AACS;AACK;AACF;AACT;AAC1B;AACyB;AACX;AACoB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qCAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,uBAAY;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAO,CAAC,GAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wDAAwD,iDAAiD,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAA0C,EAAE;AAClG,mDAAmD,yCAAyC,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kCAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8BAA8B,qBAAqB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA,qDAAqD,qCAAQ,CAAC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM,iDAAiD,UAAU;AAC9L;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,iCAAiC,EAAE;AACnC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B,qCAAQ,6CAA6C,UAAU;AACzF;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM;AAChE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,sCAAsC,sDAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC,mDAAY;AAC9C;AACA;AACA,2EAA2E;AAC3E;AACA,iBAAiB;AACjB;AACA,kCAAkC,sDAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uCAAuC,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,uDAAuD,wBAAE,+BAA+B,kDAAkD,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,6DAA6D,gCAAgC,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA,sCAAsC,oDAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,4HAA4H,oCAAoC,EAAE;AAClK;AACA;AACA;AACA,+DAA+D,oCAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAgC,qBAAqB,EAAE;AAChF,qBAAqB,gCAAgC,qBAAqB,EAAE;AAC5E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,2DAA2D,0BAA0B,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qDAAc,sBAAsB,sDAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,oCAAY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACr1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACzB;AACsC;AACd;AACjB;AACd;AAC/C;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0EAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,4BAA4B,6EAAa;AACzC,uCAAuC,6EAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6EAAa;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,6EAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6EAAa;AACrC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,6EAAa;AACzB;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACC;;AAEvB;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClB8C;AACY;AACY;AAChB;AACtD;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wCAAS,+BAA+B,wCAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,4BAA4B,0CAAe;AAC3C;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACzIkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;ACjBkC;AACM;AACxC;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvByD;AACH;AACd;AAC8B;AACF;AACR;AAC5D;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qCAAQ,4DAA4D,yBAAyB;AAChJ;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,gBAAgB;AAC/D;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA,2EAA2E,eAAe;AAC1F;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,QAAQ,sCAAS;AAChF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,0DAA0D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA,oFAAoF,2DAA2D;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,kEAAkE;AACtJ;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC,SAAS;AACT;AACA;AACA,gDAAgD,kCAAkC,EAAE;AACpF;AACA;AACA,kEAAkE,uBAAuB,EAAE;AAC3F,mGAAmG,sDAAsD,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB,EAAE,wBAAwB,yCAAyC,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,sDAAsD,cAAc,4DAA4D,kEAAkE;AAClM,iDAAiD,cAAc,uDAAuD,6DAA6D;AACnL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,0DAA0D,cAAc,4DAA4D,kEAAkE;AACtM,qDAAqD,cAAc,uDAAuD,6DAA6D;AACvL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACnpBkC;AAClC;AACA;AACA,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;ACjOkC;AAClC,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChBkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrB+E;AACN;AAC7B;AACmC;AACnB;AACU;AACZ;AACiB;AACE;AACO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gEAAgE,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAyB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,8DAA8D,EAAE;AACxI,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC,kDAAW;AAC3C;AACA;AACA;AACA,8BAA8B,mDAAyB;AACvD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8BAA8B,kDAAW,sBAAsB,0DAAmB;AAClF,oFAAoF,mEAAmE,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAW;AACzC,uFAAuF,0BAA0B,EAAE;AACnH;AACA,0BAA0B,+CAAuB;AACjD;AACA,8BAA8B,sDAAe;AAC7C,kFAAkF,uBAAuB,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAwB;AACtD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,yBAAyB;AAC9I;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA,6CAA6C,6BAA6B,EAAE;AAC5E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACvNkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,mEAAiC;AACrC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,mDAAmD,0CAAa,0CAA0C,mCAAM;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;ACnN0D;AAChB;AAC4C;AACtF;AACA;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,oFAAoF,wCAAwC,EAAE;AAC9H;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAsD;AAClG,8CAA8C,uDAAuD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4EAA4E,gDAAgD,EAAE;AAC9H,6EAA6E,uBAAuB,EAAE;AACtG,mEAAmE,8EAA8E,EAAE;AACnJ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,qBAAU;AACc;;AAE1B;;;ACpRkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA,sFAAsF,+BAA+B,EAAE,gCAAgC;AACvJ;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACrBiF;AACnC;AAC9C;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0EAA0E,iBAAiB,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iCAAiC,EAAE;AAChF,0CAA0C,uCAAuC,EAAE;AACnF,6CAA6C,wDAAwD,EAAE;AACvG;AACA;AACA,4EAA4E,wDAAwD,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sCAAO;AACvC;AACA;AACA;AACA;AACA;AACA,2EAA2E,2CAA2C,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4CAA4C,EAAE;AAC3H;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACtFuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAkD,EAAE;AAC/G,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,2DAA2D,uEAAuE,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,4CAA4C,EAAE;AACpG;AACA,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8CAA8C,EAAE;AAC1G;AACA,yCAAyC,mCAAM;AAC/C;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,6DAA6D,EAAE;AAC9H,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACiD;;AAElD;;;ACtIkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;AClByG;AACvD;AACqC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6EAAsC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC9FkC;AAClC;AACA;AACA;AACA,IAAI,yFAA4C;AAChD,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuD;;AAExD;;;AClBkC;AACM;AACxC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChCkC;AACM;AACxC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/BkD;AACR;AACkB;AACR;AACpD;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAAc;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kDAAW;AAChE,iCAAiC,sDAAe;AAChD;AACA;AACA,iCAAiC,qBAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AClDkC;AAClC,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;ACdkC;AAClC;AACA;AACA;AACA,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACjB8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,0CAAa,KAAK,mCAAM,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,mDAAmD,EAAE;AACjI,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;;;;;;;ACpK8C;AACF;AAC4B;AACxE;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA;AACA,0DAA0D,gDAAgD;AAC1G,kEAAkE,8CAA8C;AAChH,gCAAgC,4BAAQ;AACxC;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA,0CAA0C,wDAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4BAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mEAAmE,EAAE;AACzI;AACA;AACA;AACA,0EAA0E,wCAAwC,EAAE;AACpH,4BAA4B;AAC5B;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACnLkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;AClB+C;AACA;AAC/C;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,mDAAmD,0DAA0D;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrFkC;AAClC;AACA;AACA;AACA,IAAI,uEAAmC;AACvC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;ACjBsE;AACgC;AACtG;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAA0D;AAC/G;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA,uGAAuG,wDAAwD,EAAE;AACjK;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,0CAA0C,uEAAmC;AAC7E;AACA;AACA;AACA,yBAAyB;AACzB,wGAAwG,0CAAa,CAAC,0CAAa,KAAK,mCAAM,wBAAwB,mCAAM;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/G+C;AAC/C;AACA;AACA;AACA,IAAI,+DAA+B;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,4CAA4C,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AC/DiE;AACb;AACkB;AACU;AACO;AACA;AACjB;AACV;AACQ;AACP;AACc;AACJ;AACkB;AAC7C;AAC5C;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,gFAAgF,4BAA4B,EAAE;AAC9G,6EAA6E,4BAA4B,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,8BAA8B,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA,8FAA8F,kCAAkC,EAAE;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAA6B;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,2DAA6B;AACzC,0EAA0E,+BAA+B,EAAE;AAC3G,0EAA0E,8BAA8B,EAAE;AAC1G,0EAA0E,8BAA8B,EAAE;AAC1G,8EAA8E,kCAAkC,EAAE;AAClH,2EAA2E,gCAAgC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,2GAA2G,EAAE;AACzK;AACA,4DAA4D,+KAA+K,EAAE;AAC7O;AACA,4DAA4D,mIAAmI,EAAE;AACjM;AACA,gEAAgE,+KAA+K,EAAE;AACjP;AACA,6DAA6D,+KAA+K,EAAE;AAC9O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,0GAA0G,EAAE;AACxK;AACA,4DAA4D,8KAA8K,EAAE;AAC5O;AACA,4DAA4D,kIAAkI,EAAE;AAChM;AACA,gEAAgE,8KAA8K,EAAE;AAChP;AACA,6DAA6D,8KAA8K,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,kDAAW;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,iGAAiG,mDAAY;AAC7G;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG,mDAAY;AAC/G,mGAAmG,gDAAS;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,4EAA4E,uDAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,mDAAmD,wCAAW;AAC9D;AACA;AACA,2HAA2H;AAC3H;AACA,iFAAiF,iDAAwB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,iFAAiF,6CAAsB;AACvG;AACA;AACA;AACA;AACA;AACA,iFAAiF,+DAA+B;AAChH;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,gFAAgF,qCAAQ;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,iDAAiD,0BAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,yGAAyG,QAAQ,sCAAS;AAC1H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2DAA6B;AACvE;AACA,yBAAyB;AACzB,0DAA0D,uDAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,6GAA6G,QAAQ,sCAAS;AAC9H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0GAA0G,QAAQ,sCAAS;AAC3H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,6CAA6C,uDAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uIAAuI,wBAAwB,EAAE;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC0B;;AAE3B;;;AC7zBkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACjB8C;AACF;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ,2DAA2D;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kDAAkD;AACtG;AACA,sBAAsB;AACtB;AACA,oDAAoD,6CAA6C;AACjG;AACA;AACA,YAAY,4BAAQ;AACpB;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;;AAEnB;;;;;;AC9OqC;AACU;AACgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,6DAA6D;AAC1J;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6BAA6B,GAAG,sBAAsB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAO;AACtD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,wCAAc;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAO;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AClKqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yFAAyF,6DAA6D;AACtJ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B,GAAG,sBAAsB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+EAA+E,4BAAQ;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAO;AAClD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnJqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAO;AACjD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B,GAAG,sBAAsB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA,mGAAmG;AACnG,qGAAqG;AACrG;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb,SAAS;AACT;AACA;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;AC7MgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,QAAQ,sCAAS;AAC7G;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,uEAAuE,0CAAa,KAAK,mCAAM,gFAAgF,8BAA8B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA,iEAAiE,qCAAQ,sDAAsD,uBAAuB;AACtJ;AACA;AACA;AACA;AACA,uDAAuD,QAAQ,gBAAgB;AAC/E;AACA;AACA;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wDAAwD,EAAE;AAChH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsC;;AAEvC;;;AChK+B;AACM;AACrC;AACA;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;ACnFyD;AACM;AACX;AAC6B;AAC7C;AACgD;AACoB;AAClB;AACV;AACM;AACtC;AAC5C;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,mCAAiB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,4BAAQ;AAClH,mGAAmG,QAAQ,sCAAS;AACpH;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAA0B;AACxF,kEAAkE,eAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,6CAAsB;AAC/F;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,qEAAqE,uDAA2B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,+CAAuB;AAC3E,oDAAoD,mEAAiC;AACrF,oDAAoD,iDAAwB;AAC5E;AACA;AACA;AACA;AACA,4DAA4D,iDAAwB;AACpF;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,sEAAsE,+BAAe;AACrF;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA,kGAAkG,yCAAyC,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qCAAQ;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;;;;ACvMyD;AACU;AACwC;AACZ;AACjC;AACR;AACc;AAC+C;AACU;AACtC;AACvB;AACM;AAC+C;AACzD;AACe;AACF;AACL;AACuB;AACd;AAC3B;AAClD;AACA;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;AACnF;AACA;AACA;AACA;AACA,YAAY,kCAAW,2BAA2B,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,+CAA+C,0FAA0F,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qEAAqE,6EAAsC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,0DAA0D,iCAAgB;AAC1E,gBAAgB,iCAAgB;AAChC,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA,kEAAkE,iCAAgB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,kCAAkC,qCAAQ,CAAC,qCAAQ,GAAG,oBAAoB,KAAK,UAAU;AACzF;AACA,gBAAgB,iCAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA,sDAAsD,kDAAmB;AACzE;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA,uEAAuE,yCAAyC,EAAE;AAClH;AACA;AACA;AACA,gCAAgC,mCAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA+B;AACrD;AACA;AACA,oCAAoC,6BAAc;AAClD,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA;AACA,gDAAgD,qCAAkB;AAClE;AACA;AACA;AACA,gDAAgD,qBAAU;AAC1D;AACA,0BAA0B,yFAA4C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,8BAA8B,mEAAiC;AAC/D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACltB0D;AACV;AAChD;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,2BAAa;AACe;;AAE9B;;;;;;AC7DgD;AACU;AACE;AACF;AACA;AAC1D;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD,uBAAuB,yDAAkB;AACzC,yCAAyC,kCAAW;AACpD,uBAAuB,qCAAkB;AACzC,mBAAmB,2BAAa;AAChC;AACA;AACA,CAAC;AAC+B;;AAEhC;;;ACzBkC;AAClC;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;ACjB0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA,0DAA0D,UAAU,IAAI,QAAQ,YAAY,OAAO,sBAAsB,UAAU;AACnI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;;AAErB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACG;;AAE9B;;;;;;;;;AC9G0D;AACqB;AACrB;AACoB;AACc;AAC5F,IAAI,2BAAa;AACjB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qCAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACG;;AAEzB;;;AC3F0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACO;;AAElC;;;AC9E0D;AACqB;AACb;AACY;AACc;AAC5F,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAO,CAAC,qJAA6B;AAC/D;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACO;;AAE7B;;;;;;;;;;;;ACzF0D;AACoC;AAC9B;AACyB;AACG;AACR;AACzB;AACY;AACvE;AACA;AACA;AACA,IAAI,+BAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yCAAyC,4CAAgB;AACzD,6BAA6B;AAC7B,yBAAyB;AACzB;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,8DAAyB;AACA;;AAE3B;;;ACvM0D;AACqB;AAC3B;AAC0B;AAC9E,IAAI,qBAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,qBAAqB;AACrB,8BAA8B,6BAA6B;AAC3D,qBAAqB;AACrB,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,oDAAoB;AACA;;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvF4E;AACZ;AAC8B;AACF;AACR;AACf;AACZ;AACU;AACE;AACM;AACE;AACV;AACE;AACf;AACK;AACZ;AACd;AACsC;AACvE;AACA;AACA;AACA,IAAI,uCAAmB;AACvB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAAgB;AAClD;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,gEAAgE,EAAE;AAChJ;AACA;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,qEAAqE,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sBAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,6EAA6E,mEAAmE,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,oBAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,wDAAwD,sBAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA,yFAAyF,oBAAoB,EAAE;AAC/G;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,iFAAiF,gEAAgE,EAAE;AACnJ;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,iJAAiJ,oBAAoB,EAAE;AACvK,sFAAsF,kCAAkC,EAAE;AAC1H,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,2IAA2I,oBAAoB,EAAE;AACjK,gFAAgF,kCAAkC,EAAE;AACpH,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kCAAW;AAC9D;AACA;AACA,6BAA6B;AAC7B;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,4DAA4D,kCAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW;AAC/E;AACA,oEAAoE,6CAA6C,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,gFAAgF,oBAAoB,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,iCAAiC,4BAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,kFAAkF,kCAAkC,EAAE;AACtH;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA,mJAAmJ,oBAAoB,EAAE;AACzK,wFAAwF,kCAAkC,EAAE;AAC5H,uDAAuD,sBAAK;AAC5D,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,kCAAW;AAClE;AACA;AACA,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+HAA+H,sCAAsC,EAAE;AACvK,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,2CAA2C,qCAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,kCAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,oBAAoB,EAAE;AAC7K,mGAAmG,yCAAyC,EAAE;AAC9I,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA,6JAA6J,oBAAoB,EAAE;AACnL,yGAAyG,yCAAyC,EAAE;AACpJ,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA,gFAAgF,sGAAsG,EAAE;AACxL;AACA;AACA;AACA;AACA;AACA,mFAAmF,iFAAiF,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,oBAAoB,EAAE;AAC3F;AACA;AACA;AACA;AACA,6IAA6I,oBAAoB,EAAE;AACnK,wFAAwF,kCAAkC,EAAE;AAC5H,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,uDAAuD,gDAAgD,EAAE;AACzG,wDAAwD,gCAAgC,EAAE;AAC1F;AACA,mFAAmF,iCAAiC,EAAE;AACtH,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,oBAAoB,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kCAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,kEAAkE,EAAE;AACxJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,gEAAgE,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,0EAA0E,EAAE;AACxK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,wCAAc,yDAAyD,mCAAmC,EAAE;AACrL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,wEAAwE,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,0CAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB,EAAE;AACnF;AACA,kFAAkF,mCAAmC,EAAE;AACvH;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uIAAuI;AACvI;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAAM;AACnC;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,sCAAS;AAC5G;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA,wDAAwD,sBAAK;AAC7D,yFAAyF,oGAAoG;AAC7L;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,wGAAwG,EAAE;AAC3L,8EAA8E,QAAQ,sCAAS;AAC/F;AACA;AACA,2DAA2D,wCAAW;AACtE;AACA;AACA;AACA;AACA,iEAAiE;AACjE,kFAAkF,kCAAW;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,wBAAwB,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wIAAwI,oDAAoD,EAAE;AAC9L,iIAAiI,mDAAmD,EAAE;AACtL;AACA,oHAAoH;AACpH;AACA,mIAAmI,EAAE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iDAAiD,EAAE,EAAE;AACrD;AACA;AACA;AACA,qEAAqE,4BAAQ;AAC7E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,mGAAmG,iEAAiE,EAAE;AACtK,2DAA2D,kCAAW;AACtE;AACA,2FAA2F,yBAAyB,EAAE;AACtH,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,kGAAkG,iEAAiE,EAAE;AACrK,2DAA2D,gCAAU;AACrE;AACA,0FAA0F,yBAAyB,EAAE;AACrH;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,wEAAwE,4BAAQ;AAChF;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,2DAA2D,wCAAc;AACzE;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,4BAAQ;AACjF;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,wGAAwG,oEAAoE,EAAE;AAC9K;AACA;AACA;AACA,2DAA2D,0CAAe;AAC1E;AACA,kGAAkG,4BAA4B,EAAE;AAChI;AACA,4GAA4G,uCAAuC,EAAE;AACrJ;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA,6CAA6C,uBAAuB,mCAAmC,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,2DAA2D,gCAAU;AACrE;AACA;AACA,2FAA2F,yBAAyB,EAAE;AACtH;AACA;AACA,2FAA2F,+DAA+D,EAAE;AAC5J;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,kDAAkD,EAAE;AACzH;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,kCAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG;AACA,iIAAiI,oBAAoB,EAAE;AACvJ,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB,EAAE;AACxD,oCAAoC,iBAAiB,8GAA8G,EAAE;AACrK,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,qCAAqC,8DAA8D;AACnG;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yDAAyD,oBAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,2EAA2E,iBAAiB;AAC5F,uEAAuE,aAAa;AACpF;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gIAAgI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAgC,EAAE;AACzH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,6CAA6C,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD;AACA,4BAA4B,sBAAK,8DAA8D,sBAAK;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,iCAAiC,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,sEAAsE,oBAAoB,EAAE;AAC5F;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,8EAA8E,6BAA6B,EAAE;AAC7G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAc;AACrE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,wEAAwE,6BAA6B,EAAE;AACvG,4FAA4F,6BAA6B,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,yDAAyD,0CAAe;AACxE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK,sBAAsB,oBAAI;AACzE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0CAAe;AACc;;AAE/B;;;ACp6FkE;AAC4B;AACF;AACR;AACd;AACC;AACvE,IAAI,2DAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,uCAAmB;AACrB;AACA;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2DAA0B;AACgB;;AAE5C;;;AC7L0D;AACE;AACC;AAC6C;AAC/B;AAC3E,IAAI,2CAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,qDAAc;AAChB,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+KAA+K,4DAA4D,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iEAAgC,0JAA0J,4DAA4D,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6CAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2CAAe;AACsB;;AAEvC;;;AC1HiE;AACD;AACZ;AACU;AACT;AACA;AACG;AACa;AACE;AACrB;AACA;AACS;AACZ;AAC6B;AACmB;AACnD;AAC+B;AAC3E;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qDAAc;AACzC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,gDAAS;AACpC;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,2BAAa;AACxC;AACA,2BAA2B,gDAAkB;AAC7C;AACA,2BAA2B,mCAAiB;AAC5C;AACA,2BAA2B,kCAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qBAAU;AACrC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,uDAA2B;AACtD;AACA,0BAA0B,qCAAkB;AAC5C;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,6BAA6B,EAAE;AACxF;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA,kBAAkB;AAClB;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,kJAAkJ,4BAA4B,EAAE;AAChL;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACxH8C;AACI;AAClD;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA,eAAe,wCAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,+CAA+C,0CAAa,KAAK,mCAAM;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACtY8C;AACc;AAC5D;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mCAAmC,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD;AACA;AACA;AACA;AACA,sCAAsC,0CAAa,KAAK,mCAAM;AAC9D,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,8DAA8D,EAAE;AACrI;AACA;AACA,qEAAqE,iEAAiE,EAAE;AACxI;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B,4CAA4C,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE;AAC1G;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B,EAAE;AAC7F,mFAAmF,4BAA4B,EAAE;AACjH;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACnD8C;AACY;AACE;AACA;AACQ;AACV;AAC0B;AACpF;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,oBAAoB,mCAAM;AACpG,6DAA6D,2CAA2C,EAAE;AAC1G;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,0CAA0C,EAAE;AAC/J;AACA,6EAA6E,yBAAyB,EAAE;AACxG;AACA;AACA;AACA,+FAA+F,gEAAgE,EAAE;AACjK;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,0CAA0C,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,yGAAyG,gEAAgE,EAAE;AAC3K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;AC5N4D;AACA;AACQ;AACV;AAC1D;AACA;AACA;AACA;AACA,IAAI,yEAAoC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC+C;;AAEhD;;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,6JAA6J,4BAA4B,EAAE;AAC3L;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACxF0D;AACE;AACA;AACQ;AACP;AACuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uDAAuD;AAChE,SAAS,uDAAuD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAwE;AAC5F,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,mDAAY,qCAAqC,yBAAyB,EAAE;AAC1H,oBAAoB;AACpB;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA,wJAAwJ,uBAAuB,EAAE;AACjL;AACA;AACA,aAAa;AACb;AACA,oBAAoB;AACpB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,8CAA8C,EAAE;AACrI;AACA;AACA,wFAAwF;AACxF;AACA;AACA,cAAc;AACd;AACA,yGAAyG,gEAAgE,EAAE,EAAE;AAC7K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8FAA8F,+CAA+C,EAAE;AAC/I;AACA,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kDAAW,uCAAuC,0DAAmB;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iEAAiE;AACjE,0DAA0D;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC9B8C;AAC0B;AACpB;AACQ;AACA;AACF;AACM;AACA;AACI;AACM;AACA;AAC1B;AACgC;AACc;AACtB;AACI;AAChB;AACF;AACA;AACY;AACH;AACD;AACkB;AACpF;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2DAA6B;AAC9E,wDAAwD,yEAAoC;AAC5F,6CAA6C,mDAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,uHAAuH,EAAE;AACrL;AACA,mEAAmE,8CAA8C,EAAE;AACnH;AACA,2DAA2D,2EAA2E,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC,aAAa;AACb,SAAS;AACT;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA,2DAA2D,yDAAyD,EAAE;AACtH;AACA,2DAA2D,wEAAwE,EAAE;AACrI;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA,iEAAiE,oDAAoD,EAAE;AACvH;AACA,gLAAgL;AAChL;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAW,uCAAuC,0DAAmB;AAChI,8DAA8D,sDAAe,uCAAuC,gDAAS;AAC7H,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+DAA+D,sDAAe;AAC9E;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sDAAe;AACpF,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,iEAAiE,8BAA8B,EAAE;AACjG;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,6DAA6D,0CAAa,KAAK,mCAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,2GAA2G,kCAAkC,EAAE;AAC/I,uHAAuH,mDAAmD,EAAE;AAC5K,SAAS;AACT;AACA;AACA,yCAAyC,8CAA8C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,8EAA8E,EAAE;AACzH,gDAAgD,4DAA4D,EAAE;AAC9G;AACA;AACA,6DAA6D,qDAAqD,EAAE;AACpH,SAAS;AACT;AACA;AACA,8DAA8D,sDAAsD,EAAE;AACtH,SAAS;AACT;AACA;AACA,4DAA4D,qDAAqD,EAAE;AACnH,SAAS;AACT;AACA;AACA,oEAAoE,yDAAyD,EAAE;AAC/H,SAAS;AACT;AACA;AACA,yCAAyC,4CAA4C,EAAE;AACvF;AACA;AACA,6CAA6C,wBAAwB,EAAE;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB,EAAE;AAC5D,2CAA2C,mCAAmC,EAAE;AAChF,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA,mBAAmB,wCAAc;AACjC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8FAA8F,kDAAkD,EAAE;AAClJ,6BAA6B,wCAAc,EAAE,2EAA2E;AACxH;AACA,4GAA4G,uGAAuG,EAAE;AACrN;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wFAAwF,0DAA0D,EAAE;AACpJ;AACA,0CAA0C,wCAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,+BAA+B,EAAE;AAChJ,4FAA4F,yCAAyC,EAAE;AACvI;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAA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A4F,4CAA4C,EAAE;AAC1I;AACA,2FAA2F,gDAAgD,EAAE;AAC7I,kGAAkG,mEAAmE,EAAE;AACvK,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,sFAAsF,yBAAyB,EAAE;AACjH,4FAA4F,+BAA+B,EAAE;AAC7H,wFAAwF,2BAA2B,EAAE;AACrH,4FAA4F,+BAA+B,EAAE;AAC7H,6FAA6F,gCAAgC,EAAE;AAC/H,+FAA+F,kCAAkC,EAAE;AACnI,uFAAuF,0BAA0B,EAAE;AACnH,kEAAkE,0DAA0D,EAAE;AAC9H;AACA,kEAAkE,2BAA2B,EAAE;AAC/F,wEAAwE,8BAA8B,EAAE;AACxG;AACA,wEAAwE,2BAA2B,EAAE;AACrG,8EAA8E,8BAA8B,EAAE;AAC9G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,oJAAoJ,EAAE;AACjO;AACA;AACA;AACA;AACA;AACA,sGAAsG,wEAAwE,EAAE;AAChL,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;AChmBkE;AAClE;AACA;AACA;AACA;AACA;AACA,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA,SAAS;AACT;AACA;AACA,8DAA8D,sCAAsC,EAAE;AACtG;AACA;AACA,4EAA4E,6CAA6C,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mDAAmD,EAAE;AAC5G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC7KiC;AAC0C;AAC3E;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uCAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gEAAgE;AACtH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qCAAQ,2EAA2E,8BAA8B;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,gBAAgB;AACnE;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;AC5O8C;AACwC;AAC1C;AACI;AACE;AACgC;AACC;AACtB;AAC7D;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kCAAkC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,qBAAqB,mCAAM,CAAC,4BAA4B;AAChI,kEAAkE,QAAQ,gBAAgB,iBAAiB,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,mCAAmC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,sBAAsB,mCAAM,CAAC,4BAA4B;AAClI,eAAe,sBAAsB;AACrC;AACA,sCAAsC,QAAQ,gBAAgB,kBAAkB,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kFAAkF,gCAAgC,oCAAY,YAAY,EAAE;AAC5I,kFAAkF,+BAA+B,oCAAY,CAAC,EAAE;AAChI,+BAA+B,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM,CAAC,4BAA4B;AAC1H;AACA,uCAAuC,oCAAY;AACnD;AACA;AACA;AACA,SAAS;AACT,2CAA2C,2CAAqB,kBAAkB,sBAAsB;AACxG,gDAAgD,+CAAuB;AACvE,wCAAwC,2CAAqB;AAC7D,eAAe,0CAAa,CAAC,0CAAa,KAAK,mCAAM,6BAA6B,mCAAM;AACxF;AACA;AACA,CAAC;AACoC;;AAErC;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC9F0D;AAC1D;AACA;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,mBAAmB,6CAAa;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,2BAA2B,6CAAa;AACjE,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa,2BAA2B,6CAAa;AAC7D,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,iCAAiC,6CAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;AC/FkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,IAAI,iCAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;ACzD0B;AACgC;AAC1D;AACA;AACA;AACA,IAAI,uBAAW;AACf;AACA,6BAA6B,iBAAK;AAClC,+BAA+B,iBAAK;AACpC,8BAA8B,iBAAK;AACnC,gCAAgC,iBAAK;AACrC,8BAA8B,iBAAK;AACnC,wBAAwB,iBAAK;AAC7B,yBAAyB,iBAAK;AAC9B,yBAAyB,iBAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAa,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAa,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAa,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;AC9F4D;AACI;AACtB;AACE;AAC5C;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA,+BAA+B,iCAAU;AACzC;AACA,+BAA+B,2CAAqB;AACpD;AACA,+BAA+B,uBAAW;AAC1C;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA;AACA,CAAC;AACwB;;AAEzB;;;AClC+C;AACW;AAC1D;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACtN+C;AACc;AACO;AACE;AAChB;AACtD;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,uCAAuC;AAC3G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,+CAA+C;AACnH;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,yCAAyC;AAC7G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,6CAA6C;AACjH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,0CAA0C;AAC9G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,2CAA2C;AAC/G;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+CAA+C,sDAAe,OAAO,cAAc,uDAAuD;AAC1K;AACA;AACA;AACA,kDAAkD,mDAAY;AAC9D;AACA,mHAAmH,uBAAuB;AAC1I;AACA;AACA;AACA;AACA,gCAAgC,0CAA0C,sDAAe,OAAO,cAAc,6CAA6C;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8DAA8D,sDAAe,GAAG;AAChF;AACA,gDAAgD,cAAc;AAC9D,0CAA0C,cAAc;AACxD,8CAA8C,cAAc;AAC5D,2CAA2C,cAAc;AACzD,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,uCAAuC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAY;AAC1E,qFAAqF,kCAAkC;AACvH;AACA;AACA,4EAA4E,kCAAkC;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,oFAAoF,yBAAyB;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC3PgE;AACN;AAC1D;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0JAA0J,wCAAwC;AAClM;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAqB;AAC5C;AACA;AACA,uBAAuB,qCAAkB;AACzC;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACpC8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,0CAA0C,EAAE;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,2DAA2D,EAAE;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,uEAAuE;AACvE,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0EAA0E,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,wGAAwG,EAAE;AAChN;AACA,aAAa;AACb;AACA,+CAA+C;AAC/C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvN+C;AACiB;AAChE;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,gDAAgD,iCAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,UAAU,mDAAmD,EAAE,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,gCAAgC,EAAE;AAC9I,iHAAiH,gCAAgC,EAAE;AACnJ;AACA;AACA,0GAA0G,gCAAgC,EAAE;AAC5I,mHAAmH,gCAAgC,EAAE;AACrJ;AACA;AACA,kFAAkF,gCAAgC,EAAE;AACpH;AACA;AACA;AACA;AACA,yGAAyG,gCAAgC,EAAE;AAC3I;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uEAAuE,2DAA2D,EAAE;AACpI,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA,kFAAkF,kEAAkE,EAAE;AACtJ,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,4BAA4B,8BAA8B,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,yEAAyE,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;AChSyD;AACwB;AACQ;AACQ;AACd;AAChB;AACP;AACc;AACY;AACqB;AAC7B;AACtB;AACgB;AACC;AACjB;AACmB;AACD;AACT;AACI;AAClC;AACmC;AACZ;AACR;AACkC;AAChC;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAa;AACvC,0BAA0B,2BAAa;AACvC;AACA,4DAA4D,2CAAqB;AACjF,oDAAoD,+CAAuB;AAC3E,kCAAkC,6BAAc;AAChD,oCAAoC,iCAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yDAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,qEAAkC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,oBAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAsD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,qBAAqB;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sDAAe,2BAA2B,kDAAW,2BAA2B,0DAAmB;AACxJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kDAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4CAA4C,yDAAkB;AAC9D;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAkB;AAC9C;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yCAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,mDAAyB;AACrE,0CAA0C,+CAAuB;AACjE;AACA;AACA,QAAQ,kCAAW,eAAe,2BAA2B;AAC7D;AACA;AACA,QAAQ,kCAAW,eAAe,mCAAmC;AACrE;AACA;AACA,QAAQ,kCAAW,eAAe,yBAAyB;AAC3D;AACA;AACA,8FAA8F,sCAAsC,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;AC7hBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClB0C;AACiC;AACgB;AAC3F;AACA;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iCAAiC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sEAAsE,iCAAiC,EAAE;AACzG;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wDAAwD,EAAE;AACrI;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC7D+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2DAAuB;AAC3B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AC5FU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFkC;AAClC;AACA;AACA;AACA;AACA,IAAI,2EAAqC;AACzC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgD;;AAEjD;;;;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;;;;;;;;;;AClBkC;AAClC,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;AClBkC;AAClC;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClBkC;AAClC;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;ACxBkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;;;;ACnBkC;AAClC;AACA;AACA,IAAI,2CAAqB;AACzB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACxBkC;AAClC;AACA;AACA,IAAI,iFAAwC;AAC5C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmD;;AAEpD;;;AClBkC;AAClC;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,yDAA4B;AAChC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;ACjBkC;AAClC;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2C;;AAE5C;;;ACjBkC;AAClC;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;ACrBwD;AACN;AACF;AACK;AACA;AACX;AACK;AACF;AACA;AACF;AACO;AACF;AACH;AACI;AACX;AACQ;AACV;AACiB;AACJ;AACI;AACU;AACL;AACJ;AACG;AACV;AACE;AACR;AACa;AACJ;AACT;AACG;AACL;AACF;AACY;AACS;AAChB;AACS;AACR;AACO;AACO;AACf;AACG;AACH;AACI;AACY;AACjB;AACG;AACD;AACH;AACL;AACiB;AACO;AACD;AACV;AACD;AACI;AACR;AACO;AACI;AACL;AACP;;AAE1C;;;AC9DgD;AACgC;AAChF;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA;AACA,0BAA0B,iDAAwB;AAClD;AACA;AACA,gBAAgB,sBAAsB,iBAAiB,sDAAsD;AAC7G,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;;;AC9DgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtDgD;AACgC;AACoB;AACpG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAwB;AAC9C;AACA;AACA,sBAAsB,qEAAkC;AACxD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACpDgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA,SAAS;AACT;AACA;;AAEA;;;ACbU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,iHAAiH;AACjH;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC9BgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAChD;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACrBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,sFAAsF,uBAAuB;AAC7G,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtB8C;AAC8D;AACrG;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB;AAC9E;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uEAAuE;AACvE,wEAAwE,0CAAa,kBAAkB,mCAAM;AAC7G;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA,6BAA6B,sDAAe;AAC5C;AACA;AACA,6BAA6B,6BAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;;AAEA;;;ACpFgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAC0D;AAC1G;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2EAAqC;AAC3D;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACtBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC/BkD;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;;AAEA;;;AC5B6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8BAA8B,wBAAwB;AACtD;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;;;;ACf+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA;AACA,aAAa,sBAAsB;AACnC;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACV+C;AACxC;AACP;AACA,mBAAmB,oCAAY;AAC/B;AACA,eAAe,oCAAY;AAC3B;;AAEA;;;ACRU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFsE;AAC7B;AACS;AAClD;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW;AACnC;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2DAA2D,0CAAa,oBAAoB,mCAAM;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;ACjPU;;AAEV;;;ACFU;;AAEV;;;ACFgF;;AAEhF;;;ACFU;;AAEV;;;ACFU;;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACF+C;AAC/C;AACA;AAC0B;AACyC;AACO;AAC3B;AACU;AACsB;AAC/E;AACA;AACA;AAC4B;AACU;AACF;AACG;AACF;AACb;AACmB;AACU;AACA;AACM;AACT;AACG;AACH;AACH;AACI;AACD;AACF;AACE;AACA;AACC;AACA;AACA;AACG;AACJ;AACD;AACK;AACD;AACD;AACF;AACG;AACJ;AACD;AACC;AACD;AACA;AACD;AACK;AACH;AACP;AACK;AACK;AACD;AACC;AACO;AACG;AACb;AACL;AACE;AACR;AACJ;AACC;AACD;AACI;AACA;AACO;AACD;AACI;AACF;AACH;AACI;AACE;AACO;AACV;AACD;AACI;AACO;AACZ;AACA;AACE;AACC;AACD;AACF;AACI;AACL;AACK;AACA;AAChB;AACO;AACQ;AACF;AACT;AACM;AACK;AACC;AACR;AACA;AACI;AACC;AACF;AACF;AACS;AACC;AACG;AACC;AACL;AACC;AACN;AACJ;AACG;AACG;AACG;AAC6B;AAC1B;AACc;AACP;AACY;AACA;AACA;AACA;AACI;AACxB;AACe;AACA;AACA;AACM;AACvB;AACgB;AACc;AACpB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAa;AACnC;AACA,qDAAqD,uCAAmB;AACxE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE,WAAW,sCAAS;AACpB,eAAe,wCAAW;AAC1B,sCAAsC,2DAAuB;AAC7D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP,WAAW,gBAAgB,CAAC,mCAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA,6CAA6C,2DAAuB;AACpE;AACA;AACA;AACA;AACA,kEAAkE,+CAA+C,EAAE;AACnH,6FAA6F,6BAA6B,EAAE;AAC5H;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACxSA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,mCAAmC,mEAAa,KAAK,4DAAM;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;;AC/DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAC3B;AACA;AACA;AACA;AACA;AACO;AACP,kCAAkC,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iDAAiD,kEAAkE,EAAE;AACrH;AACA;AACA;AACA;AACO;AACP,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM,2CAA2C;AACjD;AACO;AACP,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,+BAA+B,EAAE;AAC9F;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,cAAc;AAC3C,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACjGA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;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CAAC,WAAP,CAAmB,GAAnB,EAxBmC,CA0BnC;AACA;;AAEA,aAAO,MAAP;AACH;AAED;;;;;AAKG;;;;WACH,sBAAoB,IAApB,EAA0B,EAA1B,EAA4B;AACzB,aAAO,oBAAW,YAAX,CAAwB,IAAxB,EAA8B,EAA9B,CAAP;AACF;AAED;;;AAGG;;;;WACH,6BAA2B,OAA3B,EAAkC;AAC9B,UAAI,QAAQ,GAAG,EAAf,CAD8B,CAG9B;;AACA,aAAO,CAAC,UAAR,CAAmB,OAAnB,CAA2B,eAAK,EAAG;AAC/B,gBAAQ,CAAC,IAAT,CAAc,KAAd;AACH,OAFD;AAIA,UAAI,MAAM,GAAG,OAAO,CAAC,aAArB;AACA,cAAQ,CAAC,OAAT,CAAiB,eAAK,EAAG;AACrB,eAAO,CAAC,WAAR,CAAoB,KAApB;AACA,cAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,OAA3B;AACH,OAHD;AAIA,aAAO,CAAC,MAAR;AACH;;;;;;AArKL;AACmB,wBAAyB,IAAzB,C;;;;;;;ACRnB;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnbA;;AACA;;IAEa,M;;;;;;;WAWT,gBAAW;AAAA;;AACP,YAAM,CAAC,iBAAP,GAA2B,IAAI,OAAJ,CAAY,UAAO,OAAP;AAAA,eAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACnC,yBAAM,4CAAqB,OAArB,CAA6B,MAAM,CAAC,iBAApC,EAAuD,GAAvD,CAAN;;AADmC;AACjD,6BADiD;;AAAA,uBAEjD,mBAAO,MAAP,CAAc,WAAd,CAFiD;AAAA;AAAA;AAAA;;AAAA;AAGnC,yBAAM,MAAM,CAAC,cAAP,EAAN;;AAHmC;AAGjD,6BAHiD;AAAA;AAIjD,yBAAM,4CAAqB,OAArB,CAA6B,MAAM,CAAC,iBAApC,EAAuD,WAAvD,CAAN;;AAJiD;AAAA;AAAA;;AAAA;AAMjD,6BAAW,GAAI,WAAW,KAAK,GAA/B;AANiD;AAOjD,yBAAM,MAAM,CAAC,QAAP,CAAgB,WAAhB,CAAN;;AAPiD;AASrD,yBAAO,CAAC,WAAD,CAAP;;AATqD;AAAA;AAAA;AAAA;AAAA;AAAA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,OAAP,CAAe,SAAf,EAAyB,WAAW,CAAC,SAArC,CAAX;AACA,aAAO,SAAQ,IAAK,GAAD,GAAQ,GAAR,GAAc,EAAlB,CAAf;AACH;;;WAED,mBAAiB,MAAjB,EAAyB,KAAzB,EAA8B;AAC1B,iBAAW,CAAC,kBAAZ,CAA+B,MAA/B,IAAyC,KAAzC;AACH;;;;;;AApOL;AAMW,6BAAiB,IAAjB;AAiOX,WAAW,CAAC,kBAAZ,GAAiC,EAAjC;AACA,WAAW,CAAC,SAAZ,GAAwB,EAAxB;AACA,WAAW,CAAC,cAAZ,GAA6B,EAA7B,C;;;;;;;AC/OA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;;ACvCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D,uBAAuB,QAAQ;AAC/B;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;AC5IA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA,UAAU,mBAAO,CAAC,GAAe;AACjC,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,EAAe;AACvC,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,qBAAqB,mBAAO,CAAC,GAAmB;AAChD;;AAEA,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;;;;;;;ACfA;AACA,cAAc,mBAAO,CAAC,CAAW;AACjC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA,6BAA6B;AAC7B;AACA;AACA,qDAAqD,OAAO,EAAE;AAC9D;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,GAAY;AAClC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,GAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,eAAe;AACzB;AACA;AACA;AACA,wCAAwC;AACxC;AACA,8BAA8B;AAC9B,6BAA6B;AAC7B,+BAA+B;AAC/B,mCAAmC;AACnC,SAAS,iCAAiC;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;;AACA,IAAM,mBAAmB,GAAG,mBAAO,CAAC,GAAD,CAAnC;;AACA;;AACA;;AACA;AAEA;;;;AAIG;;;IACU,Q;;;;;AAGT;;;;;;AAMG;AACH,oBAAY,WAAZ,EAAyB,IAAzB,EAA+B,YAA/B,EAA4C;AAAA;;AAAA;;AACxC,+BAAM,WAAN,EAAmB,IAAnB,EAAyB,gBAAO,OAAP,CAAe,YAAf,EAA6B,mBAA7B,CAAzB,EAA4E,eAA5E;AACA,UAAK,eAAL,GAAuB,IAAI,+BAAJ,+BAAvB;;AACA,UAAK,WAAL,CAAiB,kBAAjB,EAAqC,MAAK,eAA1C;;AAHwC;AAI3C;;;;WAED,6BAAiB;AACb,aAAO,KAAK,eAAZ;AACH;AAED;;;;;AAKG;;;;WACG,qBAAY,mBAAZ,EAA+B;AAAA;;;;;;;;;;;;;;;;;AACvB,uBAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,CAAN;;;AAAN,mB;AACJ,qBAAK,YAAL,CAAkB,KAAK,eAAvB;iDACO,G;;;;;;;;;AACV;;;WAED,yBAAa;AACT,WAAK,eAAL,CAAqB,QAArB;AACH;;;WAGK,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;;AACV,qBAAK,eAAL,CAAqB,eAArB,CAAqC,KAAK,MAAL,CAAY,yBAAZ,CAArC;;kDACO,G;;;;;;;;;AACV;AAED;;;;AAIG;;;;WACH,wBAAY;AACR;;AACA,UAAI,KAAK,MAAL,CAAY,OAAZ,IAAuB,KAAK,MAAL,KAAgB,kBAAQ,aAAnD,EAAiE;AAC7D,aAAK,eAAL,CAAqB,eAArB,CAAqC,KAAK,MAAL,CAAY,OAAjD;AACH;AACJ;AAED;;;;AAIG;;;;WACH,sBAAa,MAAb,EAAmB,CAAG;;;;EA5DI,2B;;AAA9B,4B;;;;;;;ACXA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AAC0B;AACR;AACf;AACN;AACN;AACU;AACU;AACvB;AACiB;AACtC;AACoC;AACA;AACtB;AACoB;AACnE;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,4GAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA,gFAAgF,sCAAsC,EAAE;AACxH;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,sEAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,wDAAwD,yEAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAK;AACtC,mCAAmC,qDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA;AACA,4DAA4D,qFAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,yEAAyE,6CAA6C;AACtH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,8FAA8F,wDAAwD,EAAE;AACxJ;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qFAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,oDAAoD,EAAE;AACpJ,6FAA6F,wCAAwC,EAAE;AACvI,8FAA8F,0CAA0C,EAAE;AAC1I,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI,sFAAsF,iCAAiC,EAAE;AACzH,uFAAuF,mCAAmC,EAAE;AAC5H,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,2DAA2D,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,sFAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,yDAAyD,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oFAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4DAA4D,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+CAA+C,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6FAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAkD,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,8CAA8C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mFAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,4CAA4C,EAAE;AAC/G;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,yBAAyB,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sEAAI;AACnD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,gFAAgF,8BAA8B,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,+DAAS;AAC5G;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA,wDAAwD,yEAAK,EAAE,wBAAwB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oDAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,qFAAW;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,2BAA2B,EAAE;AAC/I;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA,6CAA6C;AAC7C,yEAAyE,gEAAQ,8CAA8C,2BAA2B,EAAE;AAC5J;AACA,mHAAmH,iGAAiG,EAAE;AACtN,8GAA8G,6BAA6B,EAAE;AAC7I,wHAAwH,2BAA2B,EAAE;AACrJ;AACA;AACA,2DAA2D,6FAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA;AACA,uHAAuH,oCAAoC,EAAE;AAC7J,iEAAiE;AACjE;AACA;AACA;AACA;AACA,sFAAsF,sFAAW;AACjG;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,oFAAU,EAAE,yCAAyC;AAC3H;AACA;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,gHAAgH,2CAA2C,EAAE;AAC7J;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA,sFAAsF,mFAAU;AAChG;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA,6FAA6F,gBAAgB,EAAE;AAC/G;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA,qEAAqE,wDAAwD,EAAE;AAC/H;AACA;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,sFAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA,sFAAsF,0CAA0C,EAAE;AAClI;AACA;AACA;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,yEAAK;AACpD;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,mFAAU;AACzD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,wBAAwB,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,kCAAkC,EAAE;AACzH,qFAAqF,kCAAkC,EAAE;AACzH;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA,+CAA+C,qDAAK;AACpD,iDAAiD,qDAAK;AACtD;AACA;AACA;AACA;AACA;AACA,2CAA2C,qDAAK;AAChD,6CAA6C,qDAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,sFAAe;AACoB;;AAErC;;;;;;;;AChuDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;ACXA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJa;AACb,IAAI,mBAAO,CAAC,EAAgB;AAC5B,gBAAgB,mBAAO,CAAC,EAAY;AACpC,eAAe,mBAAO,CAAC,EAAW;AAClC,cAAc,mBAAO,CAAC,EAAU;AAChC,gBAAgB,mBAAO,CAAC,CAAW;AACnC,eAAe,mBAAO,CAAC,GAAU;AACjC,gBAAgB,mBAAO,CAAC,GAAiB;AACzC,YAAY,mBAAO,CAAC,EAAQ;AAC5B,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,qBAAqB,mBAAO,CAAC,EAAkB;AAC/C,aAAa,mBAAO,CAAC,EAAS;AAC9B,oBAAoB,mBAAO,CAAC,GAAiB;AAC7C,kBAAkB,mBAAO,CAAC,EAAe;AACzC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,wBAAwB,mBAAO,CAAC,EAAsB;AACtD,oBAAoB,mBAAO,CAAC,EAAiB;AAC7C,YAAY,mBAAO,CAAC,EAAQ;AAC5B,gBAAgB,mBAAO,CAAC,GAAY;AACpC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,oBAAoB,mBAAO,CAAC,GAAkB;AAC9C,eAAe,mBAAO,CAAC,EAAkB;AACzC,uBAAuB,mBAAO,CAAC,EAAe;AAC9C,aAAa,mBAAO,CAAC,EAAgB;AACrC,kBAAkB,mBAAO,CAAC,GAA4B;AACtD,YAAY,mBAAO,CAAC,EAAQ;AAC5B,YAAY,mBAAO,CAAC,EAAQ;AAC5B,0BAA0B,mBAAO,CAAC,EAAkB;AACpD,4BAA4B,mBAAO,CAAC,GAAmB;AACvD,2BAA2B,mBAAO,CAAC,GAAwB;AAC3D,uBAAuB,mBAAO,CAAC,GAAsB;AACrD,kBAAkB,mBAAO,CAAC,GAAc;AACxC,oBAAoB,mBAAO,CAAC,GAAgB;AAC5C,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,kBAAkB,mBAAO,CAAC,GAAe;AACzC,wBAAwB,mBAAO,CAAC,GAAsB;AACtD,YAAY,mBAAO,CAAC,EAAc;AAClC,cAAc,mBAAO,CAAC,EAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB,0BAA0B,EAAE,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAgC;AACzF;AACA,OAAO;AACP;AACA;AACA,6EAA6E,YAAY;AACzF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,6CAA6C,EAAE;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mDAAmD;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,oCAAoC;AACpC;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,8DAA8D;AAC9D;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB,sBAAsB,EAAE,EAAE;AACnD;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,uBAAuB;AACvB,2BAA2B;AAC3B,0BAA0B;AAC1B,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,aAAa;AACvC,OAAO;AACP;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,uDAAuD,6BAA6B,EAA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,aAAO,KAAK,KAAZ;AACH;AAED;;;;AAIG;;;;WACH,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACH;;;;;;AA7OL;AAkBI;;;AAGG;;AACY,oBAAiB,CAAjB;AA0NnB;;;;;AAKG;;AACH,UAAU,CAAC,WAAX,GAAyB,QAAzB;AACA;;;;;AAKG;;AACH,UAAU,CAAC,gBAAX,GAA8B,SAA9B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,eAAX,GAA6B,QAA7B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,cAAX,GAA4B,OAA5B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,UAAX,GAAwB,OAAxB,C;;;;;;ACvRA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,GAAU;;AAEnC,OAAO,WAAW;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;AC5QA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,EAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,EAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;;AACA;;AACA;;IAEa,M;AAcT,kBAAY,OAAZ,EAAqB,KAArB,EAA0B;AAAA;;AAAA;;AACtB,SAAK,SAAL,GAAiB,IAAjB;AACA,SAA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AACrC,UAAU,mBAAO,CAAC,GAAe;AACjC,kBAAkB,mBAAO,CAAC,GAAkB;AAC5C,eAAe,mBAAO,CAAC,GAAe;AACtC,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,GAAe;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAO,CAAC,GAAS;AACnB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACxCA;AACA,YAAY,mBAAO,CAAC,GAAyB;AAC7C,iBAAiB,mBAAO,CAAC,GAAkB;;AAE3C;AACA;AACA;;;;;;;ACNA;AACA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,GAAe;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACZA;AACA,kBAAkB,mBAAO,CAAC,EAAQ;AAClC;AACA,0CAA0C,mBAAO,CAAC,EAAS,6BAA6B;AACxF;AACA;AACA;;;;;;;ACNA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,GAAW;AAChC,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;A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;;;;EAtEqB,0B;;AAA1B;AAyEA,sCAAa,QAAb,CAAsB,IAAtB,E;;;;;;;AC7EA;AAAA;AAAA;AAAkC;AACM;AACxC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,mDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACvCA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACpBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBsE;AACf;AACvD,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B,oFAAoF,QAAQ,sCAAS;AACrG;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,kCAAW;AAC5I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,oIAAoI,kCAAW;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kCAAW;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE,4BAA4B,8BAA8B,EAAE;AAChI;AACA;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,kCAAW;AAC5F;AACA,qCAAqC,IAAI;AACzC,iCAAiC;AACjC;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM;AAClG;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrN4D;AAC5D,IAAI,iFAAwC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAmB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmD;;AAEpD;;;ACrD+C;AAC/C,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,0FAA0F,QAAQ,sCAAS;AAC3G;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA,0JAA0J,8CAA8C,EAAE;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC8B;;AAE/B;;;ACnHkE;AAClE,IAAI,uFAA2C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAsB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsD;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;ACrDiF;AAC7B;AAC8C;AAC5B;AACqC;AACd;AACI;AACN;AAC3C;AACwB;AACS;AACf;AACgD;AACvC;AACgD;AAC7E;AACmD;AACvC;AACS;AACN;AACyB;AACa;AAC/B;AAClB;AACE;AACgC;AACZ;AACL;AACnE;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU,uBAAuB,EAAE,EAAE;AACpJ;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,6CAA6C,sDAAsD;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wDAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAiC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,gCAAgC,sCAAa;AAC7C;AACA;AACA;AACA,0DAA0D;AAC1D,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0CAAa,KAAK,mCAAM;AACtE,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E,4DAA4D,0CAAa,KAAK,mCAAM;AACpF;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI;AACA,qCAAqC,kDAAkD;AACvF,6FAA6F,6CAA6C,EAAE;AAC5I;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF,wCAAwC,yBAAyB,uFAAuF,EAAE,EAAE;AAC5J;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAqE,EAAE;AAC7G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0DAA0D,6FAA6F,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAc;AAC5C,0EAA0E,uCAAuC,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kDAAW,sCAAsC,0DAAmB,sCAAsC,gDAAS;AACtK;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAAmC;AAC7D;AACA,mDAAmD,oDAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mDAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB;AAC1F;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,mDAAY;AACvD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB,sBAAsB,mDAAY;AAC5H;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,uCAAuC,EAAE;AACvH;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM,4CAA4C,iCAAiC,EAAE;AAC/I;AACA,oCAAoC,0CAAa,KAAK,mCAAM;AAC5D,uEAAuE,mEAAmE,EAAE;AAC5I,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kIAAkI,8CAA8C,EAAE;AAClL,yBAAyB,0CAAa,CAAC,0CAAa,KAAK,mCAAM,YAAY,mCAAM;AACjF;AACA,gFAAgF,mEAAmE,EAAE;AACrJ;AACA;AACA,uDAAuD,kDAAW,uCAAuC,0DAAmB;AAC5H;AACA;AACA;AACA;AACA,uDAAuD,qDAAc;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sDAAe;AACtE;AACA;AACA;AACA;AACA,oFAAoF,kCAAW;AAC/F;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4EAA4E,uCAAuC,EAAE;AACrH;AACA;AACA;AACA,4DAA4D,mEAAmE,EAAE;AACjI,SAAS;AACT;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe,sCAAsC,qDAAc;AACjH;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,kDAAW;AACzD;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA,iFAAiF,uEAAuE,EAAE,aAAa;AACvK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE,eAAe;AACzH;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,0FAAuC;AAC7E;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA,+CAA+C,iCAAgB;AAC/D,kDAAkD,uCAAmB;AACrE,4DAA4D,iFAAwC;AACpG;AACA,+DAA+D,uFAA2C;AAC1G;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA,2DAA2D,kCAAW;AACtE;AACA;AACA,wCAAwC,kCAAW;AACnD;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA,sCAAsC,kCAAW;AACjD,oEAAoE,wBAAwB,EAAE;AAC9F,qEAAqE,+BAA+B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,4CAA4C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA;AACA,8CAA8C,8CAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,kCAAW;AACjF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,kCAAW;AACxF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,kCAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oCAAY;AACgB;;AAE9B;;;;;;;;ACtoDA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,uCAAuC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,0CAA0C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAA+C;AACH;AACiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sGAAsG,QAAQ,+DAAS;AACvH;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA;AACA,8FAA8F,gFAAY;AAC1G;AACA;AACA;AACA,iDAAiD,IAAI;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,wDAAwD,EAAE;AACrK,yHAAyH,wDAAwD,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,+EAA+E,gFAAY;AAC3F;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAAQ;AAChD;AACA,iCAAiC;AACjC;AACA,mGAAmG;AACnG;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uFAAuF,wDAAwD,EAAE;AACjJ,mFAAmF,wDAAwD,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;;;ACvLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AACtD;AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;ACrBa;AACb;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZa;;AAEb,cAAc,mBAAO,CAAC,GAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBa;AACb,mBAAO,CAAC,GAAmB;AAC3B,eAAe,mBAAO,CAAC,EAAa;AACpC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B,cAAc,mBAAO,CAAC,EAAY;AAClC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;AC/FA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAc;AACjC,kBAAkB,mBAAO,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,aAAG;AAAA,WAAI,GAAG,CAAC,iBAAJ,EAAJ;AAAA,GAAzB,CAAN;AAAA,CAA3D;;AAqdnB,cAAc,CAAC,KAAf,GAAuB,cAAvB;AACA,cAAc,CAAC,cAAf,GAAgC,EAAhC,C;;;;;;;AC1fA;AAAA;AAAA;AAAA;AAAiC;AACuB;AACN;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,iCAAiC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,0EAA0E,EAAE;AAC3K,oCAAoC;AACpC;AACA;AACA,sCAAsC,8DAAQ,mDAAmD,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4EAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACwB;;AAEzB;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;ACZgF;AACxC;AACY;AACpD,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,sEAAsE,+BAA+B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,yEAAyE,iCAAiC,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wEAAwE,wCAAwC,EAAE;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,iDAAiD,sBAAK;AACtD;AACA,mDAAmD,sBAAK;AACxD;AACA,yEAAyE,0CAAa,KAAK,mCAAM;AACjG,2EAA2E,0CAAa,KAAK,mCAAM;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;ACpcA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA,YAAY,mBAAO,CAAC,EAAQ;;;;;;;ACA5B,aAAa,mBAAO,CAAC,GAAW;AAChC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;ACHA,eAAe,mBAAO,CAAC,EAAW;AAClC;;;;;;;ACDA;AACA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc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AEA;AACA;AACA;;;;;;;;ACjCa;;AAEb,kBAAkB,mBAAO,CAAC,GAAU;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACzDa;AACb,SAAS,mBAAO,CAAC,GAAc;;AAE/B;AACA;AACA;AACA;AACA;;;;;;;ACPA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAe;AACjC,aAAa,mBAAO,CAAC,EAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAQ;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnFa;AACb,aAAa,mBAAO,CAAC,EAAW;AAChC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAY;AAClC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,EAAS;AAC5B,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,YAAY,mBAAO,CAAC,EAAU;AAC9B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,GAAa;AACnC,WAAW,mBAAO,CAAC,EAAgB;AACnC,SAAS,mBAAO,CAAC,EAAc;AAC/B,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,QAAQ,UAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB,uBAAuB,EAAE,EAAE;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,uBAAuB;AACvB,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;ACLzC;AACA;AACA;;;;;;;ACFA;AACA,kBAAkB,mBAAO,CAAC,GAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHY;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACjKA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACT;AACA;AACL;AAC8C;AACtB;AACG;AACM;AAC5B;AACU;AACP;AACA;AACuB;AACpF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,yEAAY;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA,4FAA4F,wFAAY;AACxG;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,iCAAiC,EAAE;AACnJ;AACA;AACA;AACA,2FAA2F,+CAA+C,EAAE;AAC5I;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH,mGAAmG,6CAA6C,EAAE;AAClJ;AACA,uDAAuD,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AACpL,mGAAmG,qEAAqE,EAAE;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D,qEAAqE,wFAAY,8EAA8E;AAC/J;AACA;AACA,8CAA8C,uFAAW,sCAAsC,+FAAmB;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,uFAAW,sCAAsC,+FAAmB;AAC5I;AACA;AACA;AACA,qEAAqE,2FAAe;AACpF;AACA;AACA;AACA;AACA,kDAAkD,wFAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB,GAAG;AACzH;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAW,sCAAsC,+FAAmB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA;AACA;AACA,8CAA8C,2FAAe;AAC7D;AACA;AACA,2CAA2C,+IAA+I,EAAE;AAC5L,yCAAyC,wDAAwD,EAAE;AACnG,8DAA8D,eAAe;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,wFAAY;AACpE,wDAAwD,yGAAoB;AAC5E,wDAAwD,uFAAW;AACnE,wDAAwD,+FAAmB;AAC3E,wDAAwD,2FAAe;AACvE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAA0C,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,2EAA2E,iCAAiC,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wFAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,YAAY,QAAQ,EAAE,0BAA0B;AACpG;AACA,+GAA+G;AAC/G;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,gCAAgC,6EAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wFAAY,gEAAgE,yGAAoB,uCAAuC,qFAAS,GAAG;AACnN,0FAA0F;AAC1F;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yGAAoB,uCAAuC,qFAAS;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gGAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC5kBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACP;AACP;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AAC5B;AACgB;AACR;AACe;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA,8DAA8D,0FAAc;AAC5E;AACA;AACA;AACA,mEAAmE,uFAAW;AAC9E;AACA;AACA;AACA,mEAAmE,+FAAmB;AACtF;AACA;AACA;AACA,mEAAmE,+FAAmB,GAAG;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW;AAC3E,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA,YAAY,+EAAc;AAC1B;AACA;AACA;AACA,8BAA8B,yFAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,gEAAgE,qFAAS;AACzE;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA,gCAAgC;AAChC;AACA;AACA,+DAA+D,uFAAW;AAC1E,+DAA+D,+FAAmB;AAClF,+DAA+D,wFAAY;AAC3E,+DAA+D,yGAAoB;AACnF,+DAA+D,qFAAS;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,yHAAyH;AACzH;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,4DAA4D,qFAAS;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uFAAW;AACtE,2DAA2D,+FAAmB;AAC9E,2DAA2D,wFAAY;AACvE,2DAA2D,yGAAoB;AAC/E,2DAA2D,qFAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH;AACA;AACA;AACA,0BAA0B,6GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iGAAwB;AAC1C;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC1gBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACX;AACf;AACwB;AACH;AACd;AAC8C;AACzC;AACA;AACU;AAC5B;AAC4C;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,6BAA6B,4DAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD;AACA;AACA;AACA,mDAAmD,+FAAmB;AACtE;AACA;AACA;AACA,mDAAmD,2FAAe,sBAAsB,0FAAc,sBAAsB,2FAAe;AAC3I;AACA;AACA;AACA;AACA,mDAAmD,wFAAY;AAC/D;AACA;AACA,mDAAmD,+FAAmB,GAAG;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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mB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA,6EAA6E,mDAAY,mDAAmD,gDAAS;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACpJsE;AACtE;AACA;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACvG0D;AACZ;AACM;AACA;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,yCAAoB;AACxB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA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AO,CAAC,GAAS;AAC5B,gBAAgB,mBAAO,CAAC,GAAc;AACtC,iCAAiC,mBAAO,CAAC,GAA2B;AACpE,cAAc,mBAAO,CAAC,GAAY;AAClC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C,EAAE,mBAAO,CAAC,EAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,kCAAkC;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA,uBAAuB,mBAAO,CAAC,GAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E,mBAAO,CAAC,GAAsB;AAC9B,mBAAO,CAAC,GAAgB;AACxB,UAAU,mBAAO,CAAC,EAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD,mBAAO,CAAC,GAAgB;AACxE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;AC7RY;AACb;AACA,gBAAgB,mBAAO,CAAC,EAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACjBA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,2BAA2B,mBAAO,CAAC,GAA2B;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXa;AACb,SAAS,mBAAO,CAAC,EAAc;AAC/B,aAAa,mBAAO,CAAC,EAAkB;AACvC,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,kBAAkB,mBAAO,CAAC,GAAgB;AAC1C,WAAW,mBAAO,CAAC,GAAc;AACjC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACpFA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,WAAW,mBAAO,CAAC,EAAgB;AACnC,WAAW,mBAAO,CAAC,GAAgB;AACnC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,EAAW;AACjC;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,aAAa,mBAAO,CAAC,GAAkB;AACvC,cAAc,mBAAO,CAAC,EAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAgB;AACtC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,aAAa,mBAAO,CAAC,GAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA,6BAA6B;AAC7B,uCAAuC;;;;;;;ACDvC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;;AAEG;;;IACU,U;AAiBT;;;A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I,CAAC,MAAD,CAAjC,GAA4C,KAAnD;AACH,OAFM,CAAP;AAGH;;;;;;AAnLL;AAsLA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;AC7LA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACtIA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACnQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AAC1B;AACwB;AACH;AACd;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AACJ;AACxB;AACgB;AAChB;AAC7D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,0FAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yGAA4B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH;AACrH;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW;AAC7D;AACA;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kEAAY;AACoB;;AAElC;;;;;;;;AC3Ya;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB,kBAAkB;AAC5D,SAAS;AACT;AACA;AACA;AACA,qC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AAEA;;AAEG;;;IACU,W;AAoBT;;AAEG;AACH;AAAA;;AACI,SAAK,OAAL,GAAe,KAAf;AACH;AAhBD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ACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,4GAAyB;AACC;;AAE5B;;;;;;;;ACzFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACX;AACU;AACc;AAC5F;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4GAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACQ;;AAE9B;;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC4D;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2EAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8GAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,4GAAyB;AACQ;;AAEnC;;;;;;;;ACxEA;AAAA;AAAA;AAAA;AAA8C;AACC;AACQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,uBAAuB,EAAE;AAChH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,+CAA+C,QAAQ,uEAAW,iEAAiE,EAAE;AAC/L;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,sDAAsD,QAAQ,uEAAW,iEAAiE,EAAE;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0EAA0E,eAAe,uEAAW,8FAA8F,EAAE;AACpM;AACA,2EAA2E,yDAAyD,EAAE;AACtI,aAAa;AACb;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,mCAAmC,EAAE,eAAe;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,wBAAwB,EAAE;AAC7I;AACA,sCAAsC,uEAAW;AACjD;AACA;AACA;AACA;AACA,qEAAqE,uGAAuG,EAAE;AAC9K;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mCAAmC,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA,kBAAkB;AAClB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAQ;AAC5B;AACA;AACA;AACA,8EAA8E,mBAAmB,EAAE;AACnG;AACA;AACA,uGAAuG,mBAAmB,EAAE;AAC5H,uHAAuH;AACvH;AACA,sBAAsB;AACtB;AACA,yFAAyF,mBAAmB,EAAE;AAC9G;AACA;AACA,kGAAkG,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA,iBAAiB,IAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,iFAAiF,EAAE;AAC1I;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA,wDAAwD,uEAAW,kEAAkE;AACrI;AACA;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAA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B,mBAAO,CAAC,EAAkB;AAC3C,cAAc,mBAAO,CAAC,EAAkB;AACxC,cAAc,mBAAO,CAAC,GAAoB;AAC1C,YAAY,mBAAO,CAAC,EAAgB;AACpC,YAAY,mBAAO,CAAC,GAAgB;AACpC,UAAU,mBAAO,CAAC,EAAc;AAChC,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE,mBAAO,CAAC,EAAgB;AAC1B,EAAE,mBAAO,CAAC,GAAe;AACzB;;AAEA,sBAAsB,mBAAO,CAAC,EAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BA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;AACjC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,mBAAmB,mBAAO,CAAC,GAAmB;AAC9C,aAAa,mBAAO,CAAC,GAAkB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAU;AACxB;AACA,kBAAkB;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACjHY;AACb,cAAc,mBAAO,CAAC,CAAW;AACjC,aAAa,mBAAO,CAAC,EAAU;AAC/B,mBAAmB,mBAAO,CAAC,GAAmB;AAC9C;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,sBAAsB;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACjBD;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC,8BAA8B,4BAA4B;;;;;;;ACH1D;AACA,cAAc,mBAAO,CAAC,CAAW;AACjC,gBAAgB,mBAAO,CAAC,EAAW;;AAEnC;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC,8BAA8B,YAAY,mBAAO,CAAC,GAAe,GAAG;;;;;;;ACHpE;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AA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CA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACvCY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,iBAAiB,mBAAO,CAAC,GAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,iBAAiB,mBAAO,CAAC,GAAyB;;AAElD;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC9BY;;AAEb,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,yBAAyB,mBAAO,CAAC,GAAwB;AACzD,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAyB;AACtD,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yBAAyB,EAAE;;AAEhE;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACrID,aAAa,mBAAO,CAAC,EAAW;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC;AACA;AACA;AACA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AAC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A;AACA;AACA;AACA;;AAEA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,SAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3uBA,mBAAO,CAAC,GAAuB;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;;;;;;;ACD3C;AACA,cAAc,mBAAO,CAAC,GAAW;;AAEjC,oBAAoB,SAAS,mBAAO,CAAC,GAAW,GAAG;;;;;;;ACHnD,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;AC7DA;AACA,gBAAgB,mBAAO,CAAC,GAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,GAAc;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;AAC3C,iBAAiB,mBAAO,CAAC,GAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA,eAAe,mBAAO,CAAC,GAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,GAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;ACfA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA,kBAAkB,mBAAO,CAAC,GAAgB,MAAM,mBAAO,CAAC,GAAU;AAClE,+BAA+B,mBAAO,CAAC,GAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;ACFD,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,GAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACrBa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,sC;;;;;;;AClFa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,EAAS;AACnC,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,mEAAmE;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2C;;;;;;ACnNA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mDAAmD;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,6BAA6B,gBAAgB,kBAAkB;AAC/D;AACA;AACA;AACA;AACA,+BAA+B,4CAA4C;AAC3E;AACA,mCAAmC,wBAAwB,kBAAkB,EAAE;AAC/E,mCAAmC,yBAAyB,EAAE,EAAE;AAChE;AACA,uCAAuC,8BAA8B;AACrE,uCAAuC,mBAAmB,EAAE;AAC5D;AACA,uCAAuC,qDAAqD;AAC5F,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,aAAa;AAChF,qEAAqE,aAAa;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B,EAAE;AAClE;AACA;AACA,iBAAiB;AACjB,oDAAoD,+CAA+C;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0DAA0D;AAC5G,oDAAoD,4DAA4D;AAChH,qDAAqD,4DAA4D;AACjH,2DAA2D,uBAAuB;AAClF,6DAA6D,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB,EAAE;AAC/D;AACA;AACA,iBAAiB;AACjB,sDAAsD,6BAA6B;AACnF,sDAAsD,0CAA0C;AAChG,yDAAyD,gCAAgC;AACzF,mDAAmD,mBAAmB;AACtE,kDAAkD,yBAAyB;AAC3E,oDAAoD,2BAA2B;AAC/E,qDAAqD,4BAA4B;AACjF,2DAA2D,oBAAoB;AAC/E,6DAA6D,oBAAoB;AACjF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B;AACtF;AACA;AACA;AACA;AACA,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;;;;;;;;AC1mC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC7FY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;ACpFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACpDA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,GAAI;AACpC;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;ACpQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACjKa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;AClHa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+C;;;;;;;AC7Ba;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kC;;;;;;;AChCa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,GAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,mDAAmD;AAClF;AACA,SAAS;AACT;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,iEAAiE;AAChG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,iEAAiE;AACjG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;ACxEa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC;AAClC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;ACtEa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAkB;AAC3C,qBAAqB,mBAAO,CAAC,EAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uC;;;;;;;ACpIa;AACb;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,SAAS,mBAAO,CAAC,GAAuB;;;;;;;;ACL3B;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D,oBAAoB,mBAAO,CAAC,EAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;;AACA,IAAM,iBAAiB,GAAG,mBAAO,CAAE,GAAF,CAAjC;AAEA;;AAEG;;;IACU,a;;;;;AAET;;;;;AAKG;AACH,yBAAY,WAAZ,EAAyB,IAAzB,EAA6B;AAAA;;AAAA,6BACnB,WADmB,EACN,IADM,EACA,iBADA,EACmB,eADn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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 289);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Dummy driver classes for replacement via `package.json` in browser builds.\n * Using those classes reduces the build size by one third.\n *\n * If we don't include those dummy classes (and just disable the driver import\n * with `false` in `package.json`) typeorm will throw an error on runtime and\n * during webpack builds even if those driver are not used.\n */\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoDriver = /** @class */ (function () {\n function MongoDriver() {\n }\n return MongoDriver;\n}());\nexport { MongoDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoQueryRunner = /** @class */ (function () {\n function MongoQueryRunner() {\n }\n return MongoQueryRunner;\n}());\nexport { MongoQueryRunner };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoEntityManager = /** @class */ (function () {\n function MongoEntityManager() {\n }\n return MongoEntityManager;\n}());\nexport { MongoEntityManager };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoRepository = /** @class */ (function () {\n function MongoRepository() {\n }\n return MongoRepository;\n}());\nexport { MongoRepository };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar PostgresDriver = /** @class */ (function () {\n function PostgresDriver() {\n }\n return PostgresDriver;\n}());\nexport { PostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiDriver = /** @class */ (function () {\n function AuroraDataApiDriver() {\n }\n return AuroraDataApiDriver;\n}());\nexport { AuroraDataApiDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar CockroachDriver = /** @class */ (function () {\n function CockroachDriver() {\n }\n return CockroachDriver;\n}());\nexport { CockroachDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiPostgresDriver = /** @class */ (function () {\n function AuroraDataApiPostgresDriver() {\n }\n return AuroraDataApiPostgresDriver;\n}());\nexport { AuroraDataApiPostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqlServerDriver = /** @class */ (function () {\n function SqlServerDriver() {\n }\n return SqlServerDriver;\n}());\nexport { SqlServerDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SapDriver = /** @class */ (function () {\n function SapDriver() {\n }\n return SapDriver;\n}());\nexport { SapDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MysqlDriver = /** @class */ (function () {\n function MysqlDriver() {\n }\n return MysqlDriver;\n}());\nexport { MysqlDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar OracleDriver = /** @class */ (function () {\n function OracleDriver() {\n }\n return OracleDriver;\n}());\nexport { OracleDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqliteDriver = /** @class */ (function () {\n function SqliteDriver() {\n }\n return SqliteDriver;\n}());\nexport { SqliteDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar BetterSqlite3Driver = /** @class */ (function () {\n function BetterSqlite3Driver() {\n }\n return BetterSqlite3Driver;\n}());\nexport { BetterSqlite3Driver };\n\n//# sourceMappingURL=BrowserDisabledDriversDummy.js.map\n","/**\n * This class stores query and its parameters\n */\nvar Query = /** @class */ (function () {\n function Query(query, parameters) {\n this.query = query;\n this.parameters = parameters;\n }\n return Query;\n}());\nexport { Query };\n\n//# sourceMappingURL=Query.js.map\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/js/Context/UserSite\"), exports);\n__exportStar(require(\"./client/js/Dialog/SelectUserDialog\"), exports);\n__exportStar(require(\"./client/js/MenuAction/StartUserSiteMenuAction\"), exports);\n__exportStar(require(\"./client/js/MenuAction/UserMenuAction\"), exports);\n__exportStar(require(\"./client/js/OfflineUserManager\"), exports);\n__exportStar(require(\"./client/js/Site/ChangeUserSite\"), exports);\n__exportStar(require(\"./client/js/Site/ForgotPasswordSite\"), exports);\n__exportStar(require(\"./client/js/Site/LoginSite\"), exports);\n__exportStar(require(\"./client/js/Site/NotAllowedSite\"), exports);\n__exportStar(require(\"./client/js/Site/RegistrationSite\"), exports);\n__exportStar(require(\"./client/js/UserManager\"), exports);\n__exportStar(require(\"./client/js/translationInit\"), exports);\n//# sourceMappingURL=client.js.map","import { TableColumn } from \"./TableColumn\";\nimport { TableIndex } from \"./TableIndex\";\nimport { TableForeignKey } from \"./TableForeignKey\";\nimport { TableUtils } from \"../util/TableUtils\";\nimport { TableUnique } from \"./TableUnique\";\nimport { TableCheck } from \"./TableCheck\";\nimport { TableExclusion } from \"./TableExclusion\";\n/**\n * Table in the database represented in this class.\n */\nvar Table = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Table(options) {\n /**\n * Table columns.\n */\n this.columns = [];\n /**\n * Table indices.\n */\n this.indices = [];\n /**\n * Table foreign keys.\n */\n this.foreignKeys = [];\n /**\n * Table unique constraints.\n */\n this.uniques = [];\n /**\n * Table check constraints.\n */\n this.checks = [];\n /**\n * Table exclusion constraints.\n */\n this.exclusions = [];\n /**\n * Indicates if table was just created.\n * This is needed, for example to check if we need to skip primary keys creation\n * for new tables.\n */\n this.justCreated = false;\n if (options) {\n this.name = options.name;\n if (options.columns)\n this.columns = options.columns.map(function (column) { return new TableColumn(column); });\n if (options.indices)\n this.indices = options.indices.map(function (index) { return new TableIndex(index); });\n if (options.foreignKeys)\n this.foreignKeys = options.foreignKeys.map(function (foreignKey) { return new TableForeignKey(foreignKey); });\n if (options.uniques)\n this.uniques = options.uniques.map(function (unique) { return new TableUnique(unique); });\n if (options.checks)\n this.checks = options.checks.map(function (check) { return new TableCheck(check); });\n if (options.exclusions)\n this.exclusions = options.exclusions.map(function (exclusion) { return new TableExclusion(exclusion); });\n if (options.justCreated !== undefined)\n this.justCreated = options.justCreated;\n this.engine = options.engine;\n }\n }\n Object.defineProperty(Table.prototype, \"primaryColumns\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n get: function () {\n return this.columns.filter(function (column) { return column.isPrimary; });\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n Table.prototype.clone = function () {\n return new Table({\n name: this.name,\n columns: this.columns.map(function (column) { return column.clone(); }),\n indices: this.indices.map(function (constraint) { return constraint.clone(); }),\n foreignKeys: this.foreignKeys.map(function (constraint) { return constraint.clone(); }),\n uniques: this.uniques.map(function (constraint) { return constraint.clone(); }),\n checks: this.checks.map(function (constraint) { return constraint.clone(); }),\n exclusions: this.exclusions.map(function (constraint) { return constraint.clone(); }),\n justCreated: this.justCreated,\n engine: this.engine,\n });\n };\n /**\n * Add column and creates its constraints.\n */\n Table.prototype.addColumn = function (column) {\n this.columns.push(column);\n };\n /**\n * Remove column and its constraints.\n */\n Table.prototype.removeColumn = function (column) {\n var foundColumn = this.columns.find(function (c) { return c.name === column.name; });\n if (foundColumn)\n this.columns.splice(this.columns.indexOf(foundColumn), 1);\n };\n /**\n * Adds unique constraint.\n */\n Table.prototype.addUniqueConstraint = function (uniqueConstraint) {\n this.uniques.push(uniqueConstraint);\n if (uniqueConstraint.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === uniqueConstraint.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = true;\n }\n };\n /**\n * Removes unique constraint.\n */\n Table.prototype.removeUniqueConstraint = function (removedUnique) {\n var foundUnique = this.uniques.find(function (unique) { return unique.name === removedUnique.name; });\n if (foundUnique) {\n this.uniques.splice(this.uniques.indexOf(foundUnique), 1);\n if (foundUnique.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === foundUnique.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = false;\n }\n }\n };\n /**\n * Adds check constraint.\n */\n Table.prototype.addCheckConstraint = function (checkConstraint) {\n this.checks.push(checkConstraint);\n };\n /**\n * Removes check constraint.\n */\n Table.prototype.removeCheckConstraint = function (removedCheck) {\n var foundCheck = this.checks.find(function (check) { return check.name === removedCheck.name; });\n if (foundCheck) {\n this.checks.splice(this.checks.indexOf(foundCheck), 1);\n }\n };\n /**\n * Adds exclusion constraint.\n */\n Table.prototype.addExclusionConstraint = function (exclusionConstraint) {\n this.exclusions.push(exclusionConstraint);\n };\n /**\n * Removes exclusion constraint.\n */\n Table.prototype.removeExclusionConstraint = function (removedExclusion) {\n var foundExclusion = this.exclusions.find(function (exclusion) { return exclusion.name === removedExclusion.name; });\n if (foundExclusion) {\n this.exclusions.splice(this.exclusions.indexOf(foundExclusion), 1);\n }\n };\n /**\n * Adds foreign keys.\n */\n Table.prototype.addForeignKey = function (foreignKey) {\n this.foreignKeys.push(foreignKey);\n };\n /**\n * Removes foreign key.\n */\n Table.prototype.removeForeignKey = function (removedForeignKey) {\n var fk = this.foreignKeys.find(function (foreignKey) { return foreignKey.name === removedForeignKey.name; });\n if (fk)\n this.foreignKeys.splice(this.foreignKeys.indexOf(fk), 1);\n };\n /**\n * Adds index.\n */\n Table.prototype.addIndex = function (index, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n this.indices.push(index);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we mark this column as unique\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column)\n column.isUnique = true;\n }\n };\n /**\n * Removes index.\n */\n Table.prototype.removeIndex = function (tableIndex, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n var index = this.indices.find(function (index) { return index.name === tableIndex.name; });\n if (index) {\n this.indices.splice(this.indices.indexOf(index), 1);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we move `unique` attribute from its column\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column_1 = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column_1)\n column_1.isUnique = this.indices.some(function (ind) { return ind.columnNames.length === 1 && ind.columnNames[0] === column_1.name && !!index.isUnique; });\n }\n }\n };\n Table.prototype.findColumnByName = function (name) {\n return this.columns.find(function (column) { return column.name === name; });\n };\n /**\n * Returns all column indices.\n */\n Table.prototype.findColumnIndices = function (column) {\n return this.indices.filter(function (index) {\n return !!index.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column foreign keys.\n */\n Table.prototype.findColumnForeignKeys = function (column) {\n return this.foreignKeys.filter(function (foreignKey) {\n return !!foreignKey.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column uniques.\n */\n Table.prototype.findColumnUniques = function (column) {\n return this.uniques.filter(function (unique) {\n return !!unique.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column checks.\n */\n Table.prototype.findColumnChecks = function (column) {\n return this.checks.filter(function (check) {\n return !!check.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table from a given entity metadata.\n */\n Table.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n engine: entityMetadata.engine,\n columns: entityMetadata.columns\n .filter(function (column) { return column; })\n .map(function (column) { return TableUtils.createTableColumnOptions(column, driver); }),\n indices: entityMetadata.indices\n .filter(function (index) { return index.synchronize === true; })\n .map(function (index) { return TableIndex.create(index); }),\n uniques: entityMetadata.uniques.map(function (unique) { return TableUnique.create(unique); }),\n checks: entityMetadata.checks.map(function (check) { return TableCheck.create(check); }),\n exclusions: entityMetadata.exclusions.map(function (exclusion) { return TableExclusion.create(exclusion); }),\n };\n return new Table(options);\n };\n return Table;\n}());\nexport { Table };\n\n//# sourceMappingURL=Table.js.map\n","import { __read, __spreadArray } from \"tslib\";\nvar OrmUtils = /** @class */ (function () {\n function OrmUtils() {\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Chunks array into peaces.\n */\n OrmUtils.chunk = function (array, size) {\n return Array.from(Array(Math.ceil(array.length / size)), function (_, i) {\n return array.slice(i * size, i * size + size);\n });\n };\n OrmUtils.splitClassesAndStrings = function (clsesAndStrings) {\n return [\n (clsesAndStrings).filter(function (cls) { return typeof cls !== \"string\"; }),\n (clsesAndStrings).filter(function (str) { return typeof str === \"string\"; }),\n ];\n };\n OrmUtils.groupBy = function (array, propertyCallback) {\n return array.reduce(function (groupedArray, value) {\n var key = propertyCallback(value);\n var grouped = groupedArray.find(function (i) { return i.id === key; });\n if (!grouped) {\n grouped = { id: key, items: [] };\n groupedArray.push(grouped);\n }\n grouped.items.push(value);\n return groupedArray;\n }, []);\n };\n OrmUtils.uniq = function (array, criteriaOrProperty) {\n return array.reduce(function (uniqueArray, item) {\n var found = false;\n if (criteriaOrProperty instanceof Function) {\n var itemValue_1 = criteriaOrProperty(item);\n found = !!uniqueArray.find(function (uniqueItem) { return criteriaOrProperty(uniqueItem) === itemValue_1; });\n }\n else if (typeof criteriaOrProperty === \"string\") {\n found = !!uniqueArray.find(function (uniqueItem) { return uniqueItem[criteriaOrProperty] === item[criteriaOrProperty]; });\n }\n else {\n found = uniqueArray.indexOf(item) !== -1;\n }\n if (!found)\n uniqueArray.push(item);\n return uniqueArray;\n }, []);\n };\n OrmUtils.isObject = function (item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n };\n /**\n * Deep Object.assign.\n *\n * @see http://stackoverflow.com/a/34749873\n */\n OrmUtils.mergeDeep = function (target) {\n var _a, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n if (!sources.length)\n return target;\n var source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (var key in source) {\n var value = source[key];\n if (key === \"__proto__\" || value instanceof Promise)\n continue;\n if (this.isObject(value)\n && !(value instanceof Map)\n && !(value instanceof Set)\n && !(value instanceof Date)\n && !(value instanceof Buffer)\n && !(value instanceof RegExp)) {\n if (!target[key])\n Object.assign(target, (_a = {}, _a[key] = Object.create(Object.getPrototypeOf(value)), _a));\n this.mergeDeep(target[key], value);\n }\n else {\n Object.assign(target, (_b = {}, _b[key] = value, _b));\n }\n }\n }\n return this.mergeDeep.apply(this, __spreadArray([target], __read(sources)));\n };\n /**\n * Deep compare objects.\n *\n * @see http://stackoverflow.com/a/1144249\n */\n OrmUtils.deepCompare = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var i, l, leftChain, rightChain;\n if (arguments.length < 1) {\n return true; // Die silently? Don't know how to handle such case, please help...\n // throw \"Need two or more arguments to compare\";\n }\n for (i = 1, l = arguments.length; i < l; i++) {\n leftChain = []; // Todo: this can be cached\n rightChain = [];\n if (!this.compare2Objects(leftChain, rightChain, arguments[0], arguments[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * Check if two entity-id-maps are the same\n */\n OrmUtils.compareIds = function (firstId, secondId) {\n if (firstId === undefined || firstId === null || secondId === undefined || secondId === null)\n return false;\n // Optimized version for the common case\n if (((typeof firstId.id === \"string\" && typeof secondId.id === \"string\") ||\n (typeof firstId.id === \"number\" && typeof secondId.id === \"number\")) &&\n Object.keys(firstId).length === 1 &&\n Object.keys(secondId).length === 1) {\n return firstId.id === secondId.id;\n }\n return OrmUtils.deepCompare(firstId, secondId);\n };\n /**\n * Transforms given value into boolean value.\n */\n OrmUtils.toBoolean = function (value) {\n if (typeof value === \"boolean\")\n return value;\n if (typeof value === \"string\")\n return value === \"true\" || value === \"1\";\n if (typeof value === \"number\")\n return value > 0;\n return false;\n };\n /**\n * Composes an object from the given array of keys and values.\n */\n OrmUtils.zipObject = function (keys, values) {\n return keys.reduce(function (object, column, index) {\n object[column] = values[index];\n return object;\n }, {});\n };\n /**\n * Compares two arrays.\n */\n OrmUtils.isArraysEqual = function (arr1, arr2) {\n if (arr1.length !== arr2.length)\n return false;\n return arr1.every(function (element) {\n return arr2.indexOf(element) !== -1;\n });\n };\n // -------------------------------------------------------------------------\n // Private methods\n // -------------------------------------------------------------------------\n OrmUtils.compare2Objects = function (leftChain, rightChain, x, y) {\n var p;\n // remember that NaN === NaN returns false\n // and isNaN(undefined) returns true\n if (Number.isNaN(x) && Number.isNaN(y))\n return true;\n // Compare primitives and functions.\n // Check if both arguments link to the same object.\n // Especially useful on the step where we compare prototypes\n if (x === y)\n return true;\n // Unequal, but either is null or undefined (use case: jsonb comparasion)\n // PR #3776, todo: add tests\n if (x === null || y === null || x === undefined || y === undefined)\n return false;\n // Fix the buffer compare bug.\n // See: https://github.com/typeorm/typeorm/issues/3654\n if ((typeof x.equals === \"function\" || x.equals instanceof Function) && x.equals(y))\n return true;\n // Works in case when functions are created in constructor.\n // Comparing dates is a common scenario. Another built-ins?\n // We can even handle functions passed across iframes\n if ((typeof x === \"function\" && typeof y === \"function\") ||\n (x instanceof Date && y instanceof Date) ||\n (x instanceof RegExp && y instanceof RegExp) ||\n (x instanceof String && y instanceof String) ||\n (x instanceof Number && y instanceof Number))\n return x.toString() === y.toString();\n // At last checking prototypes as good as we can\n if (!(x instanceof Object && y instanceof Object))\n return false;\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x))\n return false;\n if (x.constructor !== y.constructor)\n return false;\n if (x.prototype !== y.prototype)\n return false;\n // Check for infinitive linking loops\n if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1)\n return false;\n // Quick checking of one object being a subset of another.\n // todo: cache the structure of arguments[0] for performance\n for (p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n }\n for (p in x) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n switch (typeof (x[p])) {\n case \"object\":\n case \"function\":\n leftChain.push(x);\n rightChain.push(y);\n if (!this.compare2Objects(leftChain, rightChain, x[p], y[p])) {\n return false;\n }\n leftChain.pop();\n rightChain.pop();\n break;\n default:\n if (x[p] !== y[p]) {\n return false;\n }\n break;\n }\n }\n return true;\n };\n return OrmUtils;\n}());\nexport { OrmUtils };\n\n//# sourceMappingURL=OrmUtils.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst JsonHelper_1 = require(\"./JsonHelper\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable, ...args) {\n return Helper.isAllNull(...arguments);\n }\n static isAllNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable, ...args) {\n return Helper.isAllNotNull(...arguments);\n }\n static isAllNotNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNotNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n return JsonHelper_1.JsonHelper.deepCopy(obj);\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n static isMobileApp() {\n return (typeof device !== \"undefined\" && device.platform !== \"browser\");\n }\n static toSnakeCase(camelCase) {\n return camelCase.replace(/([A-Z])/g, function (find, something, position) { return ((position > 0) ? \"_\" : \"\") + find[0].toLowerCase(); });\n }\n static wait(timeout, result) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(() => {\n r(result);\n }, timeout);\n });\n });\n }\n static timeout(time, otherPromise, timeoutResult) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.race([otherPromise, Helper.wait(time).then(() => {\n if (timeoutResult === undefined) {\n return Promise.reject();\n }\n else {\n return timeoutResult;\n }\n })]);\n });\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","/**\n * Broadcaster execution result - promises executed by operations and number of executed listeners and subscribers.\n */\nvar BroadcasterResult = /** @class */ (function () {\n function BroadcasterResult() {\n /**\n * Number of executed listeners and subscribers.\n */\n this.count = 0;\n /**\n * Promises returned by listeners and subscribers which needs to be awaited.\n */\n this.promises = [];\n }\n return BroadcasterResult;\n}());\nexport { BroadcasterResult };\n\n//# sourceMappingURL=BroadcasterResult.js.map\n","/**\n * Find Operator used in Find Conditions.\n */\nvar FindOperator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function FindOperator(type, value, useParameter, multipleParameters, getSql, objectLiteralParameters) {\n if (useParameter === void 0) { useParameter = true; }\n if (multipleParameters === void 0) { multipleParameters = false; }\n this._type = type;\n this._value = value;\n this._useParameter = useParameter;\n this._multipleParameters = multipleParameters;\n this._getSql = getSql;\n this._objectLiteralParameters = objectLiteralParameters;\n }\n Object.defineProperty(FindOperator.prototype, \"useParameter\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Indicates if parameter is used or not for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.useParameter;\n return this._useParameter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"multipleParameters\", {\n /**\n * Indicates if multiple parameters must be used for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.multipleParameters;\n return this._multipleParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"type\", {\n /**\n * Gets the Type of this FindOperator\n */\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"value\", {\n /**\n * Gets the final value needs to be used as parameter value.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.value;\n return this._value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"objectLiteralParameters\", {\n /**\n * Gets ObjectLiteral parameters.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.objectLiteralParameters;\n return this._objectLiteralParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"child\", {\n /**\n * Gets the child FindOperator if it exists\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value;\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"getSql\", {\n /**\n * Gets the SQL generator\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.getSql;\n return this._getSql;\n },\n enumerable: false,\n configurable: true\n });\n return FindOperator;\n}());\nexport { FindOperator };\n\n//# sourceMappingURL=FindOperator.js.map\n","/**\n * Browser's implementation of the platform-specific tools.\n *\n * This file gonna replace PlatformTools for browser environment.\n * For node.js environment this class is not getting packaged.\n * Don't use methods of this class in the code, use PlatformTools methods instead.\n */\nvar PlatformTools = /** @class */ (function () {\n function PlatformTools() {\n }\n /**\n * Gets global variable where global stuff can be stored.\n */\n PlatformTools.getGlobalVariable = function () {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n // NativeScript uses global, not window\n return global;\n }\n };\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n PlatformTools.load = function (name) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: require(\\\"\" + name + \"\\\").\");\n return \"\";\n };\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n PlatformTools.pathNormalize = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.normalize(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Gets file extension. Does \"path.extname\".\n */\n PlatformTools.pathExtname = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.extname(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n PlatformTools.pathResolve = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.resolve(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n PlatformTools.fileExist = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.existsSync(\\\"\" + pathStr + \"\\\").\");\n return false;\n };\n PlatformTools.dotenv = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: dotenv.config({ path: \\\"\" + pathStr + \"\\\" }).\");\n };\n /**\n * Gets environment variable.\n */\n PlatformTools.getEnvVariable = function (name) {\n // if (this.type === \"browser\")\n // throw new Error(`This option/function is not supported in the browser environment. Failed operation: process.env[\"${name}\"].`);\n return undefined;\n };\n PlatformTools.readFileSync = function (filename) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.readFileSync(\\\"\" + filename + \"\\\").\");\n return null;\n };\n PlatformTools.appendFileSync = function (filename, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.appendFileSync(\\\"\" + filename + \"\\\").\");\n };\n PlatformTools.writeFile = function (path, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.writeFile(\\\"\" + path + \"\\\").\");\n return Promise.reject(null);\n };\n /**\n * Highlights sql string to be print in the console.\n */\n PlatformTools.highlightSql = function (sql) {\n return sql;\n };\n /**\n * Highlights json string to be print in the console.\n */\n PlatformTools.highlightJson = function (json) {\n return json;\n };\n /**\n * Logging functions needed by AdvancedConsoleLogger (but here without chalk)\n */\n PlatformTools.logInfo = function (prefix, info) {\n console.info(prefix + \" \", info);\n };\n PlatformTools.logError = function (prefix, error) {\n console.error(prefix + \" \", error);\n };\n PlatformTools.logWarn = function (prefix, warning) {\n console.warn(prefix + \" \", warning);\n };\n PlatformTools.log = function (message) {\n console.log(message);\n };\n PlatformTools.warn = function (message) {\n return message;\n };\n /**\n * Type of the currently running platform.\n */\n PlatformTools.type = \"browser\";\n return PlatformTools;\n}());\nexport { PlatformTools };\n/**\n * These classes are needed for stream operations or\n * in the mongodb driver. Both aren't supported in the browser.\n */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n }\n return EventEmitter;\n}());\nexport { EventEmitter };\nvar Readable = /** @class */ (function () {\n function Readable() {\n }\n return Readable;\n}());\nexport { Readable };\nvar Writable = /** @class */ (function () {\n function Writable() {\n }\n return Writable;\n}());\nexport { Writable };\nif (typeof window !== \"undefined\") {\n window.Buffer = require(\"buffer/\").Buffer;\n}\n// NativeScript uses global, not window\nif (typeof global !== \"undefined\") {\n global.Buffer = require(\"buffer/\").Buffer;\n}\n\n//# sourceMappingURL=BrowserPlatformTools.js.map\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst Translator_1 = require(\"../Translator\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable) {\n return (variable === null || variable === undefined);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable) {\n return !Helper.isNull(variable);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string|never}\n */\n static strftime(sFormat, date, useUTC, makePersistentTranslation) {\n useUTC = Helper.nonNull(useUTC, false);\n makePersistentTranslation = Helper.nonNull(makePersistentTranslation, true);\n date = Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, function (sMatch) {\n return {\n '%a': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDaysShort[nDay]).outerHTML : Translator_1.Translator.translate(aDaysShort[nDay]),\n '%A': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDays[nDay]).outerHTML : Translator_1.Translator.translate(aDays[nDay]),\n '%b': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth].slice(0, 3)).outerHTML : Translator_1.Translator.translate(aMonths[nMonth].slice(0, 3)),\n '%B': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth]).outerHTML : Translator_1.Translator.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = Helper.cloneJson(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = Helper.cloneJson(obj[i]);\n }\n return cloneO;\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n // debugger;\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n // static getIndexedObject(array, keyValue) {\n // let obj = {};\n // for (let i = 0, n = array.length; i < n; i++) {\n // obj[array[i][keyValue]] = array[i];\n // }\n // return obj;\n // }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n if (array instanceof Map) {\n array = Array.from(array.values());\n }\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { Table } from \"./table/Table\";\nimport { TableColumn } from \"./table/TableColumn\";\nimport { TableForeignKey } from \"./table/TableForeignKey\";\nimport { TableIndex } from \"./table/TableIndex\";\nimport { TableUtils } from \"./util/TableUtils\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { TableUnique } from \"./table/TableUnique\";\nimport { TableCheck } from \"./table/TableCheck\";\nimport { TableExclusion } from \"./table/TableExclusion\";\nimport { View } from \"./view/View\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates complete tables schemas in the database based on the entity metadatas.\n *\n * Steps how schema is being built:\n * 1. load list of all tables with complete column and keys information from the db\n * 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata\n * 3. create new tables that does not exist in the db, but exist in the metadata\n * 4. drop all columns exist (left old) in the db table, but does not exist in the metadata\n * 5. add columns from metadata which does not exist in the table\n * 6. update all exist columns which metadata has changed\n * 7. update primary keys - update old and create new primary key from changed columns\n * 8. create foreign keys which does not exist in the table yet\n * 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore\n */\nvar RdbmsSchemaBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RdbmsSchemaBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates complete schemas for the given entity metadatas.\n */\n RdbmsSchemaBuilder.prototype.build = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 12, 18, 20]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 7:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 9];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 11];\n return [4 /*yield*/, this.queryRunner.commitTransaction()];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 20];\n case 12:\n error_1 = _a.sent();\n _a.label = 13;\n case 13:\n _a.trys.push([13, 16, , 17]);\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 15];\n return [4 /*yield*/, this.queryRunner.rollbackTransaction()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18: return [4 /*yield*/, this.queryRunner.release()];\n case 19:\n _a.sent();\n return [7 /*endfinally*/];\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns sql queries to be executed by schema builder.\n */\n RdbmsSchemaBuilder.prototype.log = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 9, 11]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 5:\n _a.sent();\n this.queryRunner.enableSqlMemory();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 6:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 8];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [2 /*return*/, this.queryRunner.getMemorySql()];\n case 9:\n // its important to disable this mode despite the fact we are release query builder\n // because there exist drivers which reuse same query runner. Also its important to disable\n // sql memory after call of getMemorySql() method because last one flushes sql memory.\n this.queryRunner.disableSqlMemory();\n return [4 /*yield*/, this.queryRunner.release()];\n case 10:\n _a.sent();\n return [7 /*endfinally*/];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"entityToSyncMetadatas\", {\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.synchronize && metadata.tableType !== \"entity-child\" && metadata.tableType !== \"view\"; });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"viewEntityToSyncMetadatas\", {\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.tableType === \"view\" && metadata.synchronize; });\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Executes schema sync operations in a proper order.\n * Order of operations matter here.\n */\n RdbmsSchemaBuilder.prototype.executeSchemaSyncOperationsInProperOrder = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.dropOldViews()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.dropOldForeignKeys()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.dropOldIndices()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.dropOldChecks()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.dropOldExclusions()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.dropCompositeUniqueConstraints()];\n case 6:\n _a.sent();\n // await this.renameTables();\n return [4 /*yield*/, this.renameColumns()];\n case 7:\n // await this.renameTables();\n _a.sent();\n return [4 /*yield*/, this.createNewTables()];\n case 8:\n _a.sent();\n return [4 /*yield*/, this.dropRemovedColumns()];\n case 9:\n _a.sent();\n return [4 /*yield*/, this.addNewColumns()];\n case 10:\n _a.sent();\n return [4 /*yield*/, this.updatePrimaryKeys()];\n case 11:\n _a.sent();\n return [4 /*yield*/, this.updateExistColumns()];\n case 12:\n _a.sent();\n return [4 /*yield*/, this.createNewIndices()];\n case 13:\n _a.sent();\n return [4 /*yield*/, this.createNewChecks()];\n case 14:\n _a.sent();\n return [4 /*yield*/, this.createNewExclusions()];\n case 15:\n _a.sent();\n return [4 /*yield*/, this.createCompositeUniqueConstraints()];\n case 16:\n _a.sent();\n return [4 /*yield*/, this.createForeignKeys()];\n case 17:\n _a.sent();\n return [4 /*yield*/, this.createViews()];\n case 18:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata.\n */\n RdbmsSchemaBuilder.prototype.dropOldForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_1, this_1, _a, _b, metadata, e_1_1;\n var e_1, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_1 = function (metadata) {\n var table, tableForeignKeysToDrop;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_1.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n tableForeignKeysToDrop = table.foreignKeys.filter(function (tableForeignKey) {\n var metadataFK = metadata.foreignKeys.find(function (metadataForeignKey) { return foreignKeysMatch(tableForeignKey, metadataForeignKey); });\n return !metadataFK\n || (metadataFK.onDelete && metadataFK.onDelete !== tableForeignKey.onDelete)\n || (metadataFK.onUpdate && metadataFK.onUpdate !== tableForeignKey.onUpdate);\n });\n if (tableForeignKeysToDrop.length === 0)\n return [2 /*return*/, \"continue\"];\n this_1.connection.logger.logSchemaBuild(\"dropping old foreign keys of \" + table.name + \": \" + tableForeignKeysToDrop.map(function (dbForeignKey) { return dbForeignKey.name; }).join(\", \"));\n // drop foreign keys from the database\n return [4 /*yield*/, this_1.queryRunner.dropForeignKeys(table, tableForeignKeysToDrop)];\n case 1:\n // drop foreign keys from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_1(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _d.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rename tables\n */\n RdbmsSchemaBuilder.prototype.renameTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Renames columns.\n * Works if only one column per table was changed.\n * Changes only column name. If something besides name was changed, these changes will be ignored.\n */\n RdbmsSchemaBuilder.prototype.renameColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_2, this_2, _a, _b, metadata, e_2_1;\n var e_2, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_2 = function (metadata) {\n var table, renamedMetadataColumns, renamedTableColumns, renamedColumn;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_2.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n if (metadata.columns.length !== table.columns.length)\n return [2 /*return*/, \"continue\"];\n renamedMetadataColumns = metadata.columns.filter(function (column) {\n return !table.columns.find(function (tableColumn) {\n return tableColumn.name === column.databaseName\n && tableColumn.type === _this.connection.driver.normalizeType(column)\n && tableColumn.isNullable === column.isNullable\n && tableColumn.isUnique === _this.connection.driver.normalizeIsUnique(column);\n });\n });\n if (renamedMetadataColumns.length === 0 || renamedMetadataColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (column) {\n return column.databaseName === tableColumn.name\n && _this.connection.driver.normalizeType(column) === tableColumn.type\n && column.isNullable === tableColumn.isNullable\n && _this.connection.driver.normalizeIsUnique(column) === tableColumn.isUnique;\n });\n });\n if (renamedTableColumns.length === 0 || renamedTableColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedColumn = renamedTableColumns[0].clone();\n renamedColumn.name = renamedMetadataColumns[0].databaseName;\n this_2.connection.logger.logSchemaBuild(\"renaming column \\\"\" + renamedTableColumns[0].name + \"\\\" in to \\\"\" + renamedColumn.name + \"\\\"\");\n return [4 /*yield*/, this_2.queryRunner.renameColumn(table, renamedTableColumns[0], renamedColumn)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_2(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_2_1 = _d.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_3, this_3, _a, _b, metadata, e_3_1;\n var e_3, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_3 = function (metadata) {\n var table, dropQueries;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_3.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n dropQueries = table.indices\n .filter(function (tableIndex) {\n var indexMetadata = metadata.indices.find(function (index) { return index.name === tableIndex.name; });\n if (indexMetadata) {\n if (indexMetadata.synchronize === false)\n return false;\n if (indexMetadata.isUnique !== tableIndex.isUnique)\n return true;\n if (indexMetadata.isSpatial !== tableIndex.isSpatial)\n return true;\n if (_this.connection.driver.isFullTextColumnTypeSupported() && indexMetadata.isFulltext !== tableIndex.isFulltext)\n return true;\n if (indexMetadata.columns.length !== tableIndex.columnNames.length)\n return true;\n return !indexMetadata.columns.every(function (column) { return tableIndex.columnNames.indexOf(column.databaseName) !== -1; });\n }\n return true;\n })\n .map(function (tableIndex) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.connection.logger.logSchemaBuild(\"dropping an index: \\\"\" + tableIndex.name + \"\\\" from table \" + table.name);\n return [4 /*yield*/, this.queryRunner.dropIndex(table, tableIndex)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(dropQueries)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_3 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_3(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _d.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_4, this_4, _a, _b, metadata, e_4_1;\n var e_4, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_4 = function (metadata) {\n var table, oldChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_4.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldChecks = table.checks.filter(function (tableCheck) {\n return !metadata.checks.find(function (checkMetadata) { return checkMetadata.name === tableCheck.name; });\n });\n if (oldChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_4.connection.logger.logSchemaBuild(\"dropping old check constraint: \" + oldChecks.map(function (check) { return \"\\\"\" + check.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_4.queryRunner.dropCheckConstraints(table, oldChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_4 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_4(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_4_1 = _d.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_5, this_5, _a, _b, metadata, e_5_1;\n var e_5, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_5 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_5.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = table.uniques.filter(function (tableUnique) {\n return tableUnique.columnNames.length > 1 && !metadata.uniques.find(function (uniqueMetadata) { return uniqueMetadata.name === tableUnique.name; });\n });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_5.connection.logger.logSchemaBuild(\"dropping old unique constraint: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_5.queryRunner.dropUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_5 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_5(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_5_1 = _d.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_6, this_6, _a, _b, metadata, e_6_1;\n var e_6, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_6 = function (metadata) {\n var table, oldExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_6.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldExclusions = table.exclusions.filter(function (tableExclusion) {\n return !metadata.exclusions.find(function (exclusionMetadata) { return exclusionMetadata.name === tableExclusion.name; });\n });\n if (oldExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_6.connection.logger.logSchemaBuild(\"dropping old exclusion constraint: \" + oldExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_6.queryRunner.dropExclusionConstraints(table, oldExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_6 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_6(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_6_1 = _d.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates tables that do not exist in the database yet.\n * New tables are created without foreign and primary keys.\n * Primary key only can be created in conclusion with auto generated column.\n */\n RdbmsSchemaBuilder.prototype.createNewTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_7, this_7, _a, _b, metadata, e_7_1;\n var e_7, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_7 = function (metadata) {\n var existTable, table;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existTable = this_7.queryRunner.loadedTables.find(function (table) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullTableName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n return table.name === fullTableName;\n });\n if (existTable)\n return [2 /*return*/, \"continue\"];\n this_7.connection.logger.logSchemaBuild(\"creating a new table: \" + metadata.tablePath);\n table = Table.create(metadata, this_7.connection.driver);\n return [4 /*yield*/, this_7.queryRunner.createTable(table, false, false)];\n case 1:\n _e.sent();\n this_7.queryRunner.loadedTables.push(table);\n return [2 /*return*/];\n }\n });\n };\n this_7 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_7(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_7_1 = _d.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_8, this_8, _a, _b, metadata, e_8_1;\n var e_8, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_8 = function (metadata) {\n var existView, view;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existView = this_8.queryRunner.loadedViews.find(function (view) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existView)\n return [2 /*return*/, \"continue\"];\n this_8.connection.logger.logSchemaBuild(\"creating a new view: \" + metadata.tablePath);\n view = View.create(metadata, this_8.connection.driver);\n return [4 /*yield*/, this_8.queryRunner.createView(view)];\n case 1:\n _e.sent();\n this_8.queryRunner.loadedViews.push(view);\n return [2 /*return*/];\n }\n });\n };\n this_8 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.viewEntityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_8(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_8_1 = _d.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_9, this_9, _a, _b, view, e_9_1;\n var e_9, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_9 = function (view) {\n var existViewMetadata;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existViewMetadata = this_9.viewEntityToSyncMetadatas.find(function (metadata) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existViewMetadata)\n return [2 /*return*/, \"continue\"];\n this_9.connection.logger.logSchemaBuild(\"dropping an old view: \" + view.name);\n // drop an old view\n return [4 /*yield*/, this_9.queryRunner.dropView(view)];\n case 1:\n // drop an old view\n _e.sent();\n this_9.queryRunner.loadedViews.splice(this_9.queryRunner.loadedViews.indexOf(view), 1);\n return [2 /*return*/];\n }\n });\n };\n this_9 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.queryRunner.loadedViews), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n view = _b.value;\n return [5 /*yield**/, _loop_9(view)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_9_1 = _d.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all columns that exist in the table, but does not exist in the metadata (left old).\n * We drop their keys too, since it should be safe.\n */\n RdbmsSchemaBuilder.prototype.dropRemovedColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_10, this_10, _a, _b, metadata, e_10_1;\n var e_10, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_10 = function (metadata) {\n var table, droppedTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_10.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n droppedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (columnMetadata) { return columnMetadata.databaseName === tableColumn.name; });\n });\n if (droppedTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_10.connection.logger.logSchemaBuild(\"columns dropped in \" + table.name + \": \" + droppedTableColumns.map(function (column) { return column.name; }).join(\", \"));\n // drop columns from the database\n return [4 /*yield*/, this_10.queryRunner.dropColumns(table, droppedTableColumns)];\n case 1:\n // drop columns from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_10 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_10(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_10_1 = _d.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Adds columns from metadata which does not exist in the table.\n * Columns are created without keys.\n */\n RdbmsSchemaBuilder.prototype.addNewColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_11, this_11, _a, _b, metadata, e_11_1;\n var e_11, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_11 = function (metadata) {\n var table, newColumnMetadatas, newTableColumnOptions, newTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_11.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newColumnMetadatas = metadata.columns.filter(function (columnMetadata) {\n return !table.columns.find(function (tableColumn) { return tableColumn.name === columnMetadata.databaseName; });\n });\n if (newColumnMetadatas.length === 0)\n return [2 /*return*/, \"continue\"];\n newTableColumnOptions = this_11.metadataColumnsToTableColumnOptions(newColumnMetadatas);\n newTableColumns = newTableColumnOptions.map(function (option) { return new TableColumn(option); });\n if (newTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_11.connection.logger.logSchemaBuild(\"new columns added: \" + newColumnMetadatas.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_11.queryRunner.addColumns(table, newTableColumns)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_11 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_11(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_11_1 = _d.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n RdbmsSchemaBuilder.prototype.updatePrimaryKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_12, this_12, _a, _b, metadata, e_12_1;\n var e_12, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_12 = function (metadata) {\n var table, primaryMetadataColumns, primaryTableColumns, changedPrimaryColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_12.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n primaryMetadataColumns = metadata.columns.filter(function (column) { return column.isPrimary; });\n primaryTableColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (!(primaryTableColumns.length !== primaryMetadataColumns.length && primaryMetadataColumns.length > 1)) return [3 /*break*/, 2];\n changedPrimaryColumns = primaryMetadataColumns.map(function (primaryMetadataColumn) {\n return new TableColumn(TableUtils.createTableColumnOptions(primaryMetadataColumn, _this.connection.driver));\n });\n return [4 /*yield*/, this_12.queryRunner.updatePrimaryKeys(table, changedPrimaryColumns)];\n case 1:\n _e.sent();\n _e.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n };\n this_12 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_12(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_12_1 = _d.sent();\n e_12 = { error: e_12_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_12) throw e_12.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Update all exist columns which metadata has changed.\n * Still don't create keys. Also we don't touch foreign keys of the changed columns.\n */\n RdbmsSchemaBuilder.prototype.updateExistColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_13, this_13, _a, _b, metadata, e_13_1;\n var e_13, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_13 = function (metadata) {\n var table, changedColumns, changedColumns_1, changedColumns_1_1, changedColumn, e_14_1, changedColumns_2, changedColumns_2_1, changedColumn, e_15_1, changedColumns_3, changedColumns_3_1, changedColumn, e_16_1, newAndOldTableColumns;\n var e_14, _e, e_15, _f, e_16, _g;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n table = this_13.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n changedColumns = this_13.connection.driver.findChangedColumns(table.columns, metadata.columns);\n if (changedColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n _h.label = 1;\n case 1:\n _h.trys.push([1, 6, 7, 8]);\n changedColumns_1 = (e_14 = void 0, __values(changedColumns)), changedColumns_1_1 = changedColumns_1.next();\n _h.label = 2;\n case 2:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 5];\n changedColumn = changedColumns_1_1.value;\n return [4 /*yield*/, this_13.dropColumnReferencedForeignKeys(metadata.tablePath, changedColumn.databaseName)];\n case 3:\n _h.sent();\n _h.label = 4;\n case 4:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_14_1 = _h.sent();\n e_14 = { error: e_14_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_e = changedColumns_1.return)) _e.call(changedColumns_1);\n }\n finally { if (e_14) throw e_14.error; }\n return [7 /*endfinally*/];\n case 8:\n _h.trys.push([8, 13, 14, 15]);\n changedColumns_2 = (e_15 = void 0, __values(changedColumns)), changedColumns_2_1 = changedColumns_2.next();\n _h.label = 9;\n case 9:\n if (!!changedColumns_2_1.done) return [3 /*break*/, 12];\n changedColumn = changedColumns_2_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeIndices(metadata.tablePath, changedColumn.databaseName)];\n case 10:\n _h.sent();\n _h.label = 11;\n case 11:\n changedColumns_2_1 = changedColumns_2.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_15_1 = _h.sent();\n e_15 = { error: e_15_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (changedColumns_2_1 && !changedColumns_2_1.done && (_f = changedColumns_2.return)) _f.call(changedColumns_2);\n }\n finally { if (e_15) throw e_15.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!!(this_13.connection.driver instanceof MysqlDriver || this_13.connection.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 23];\n _h.label = 16;\n case 16:\n _h.trys.push([16, 21, 22, 23]);\n changedColumns_3 = (e_16 = void 0, __values(changedColumns)), changedColumns_3_1 = changedColumns_3.next();\n _h.label = 17;\n case 17:\n if (!!changedColumns_3_1.done) return [3 /*break*/, 20];\n changedColumn = changedColumns_3_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeUniques(metadata.tablePath, changedColumn.databaseName)];\n case 18:\n _h.sent();\n _h.label = 19;\n case 19:\n changedColumns_3_1 = changedColumns_3.next();\n return [3 /*break*/, 17];\n case 20: return [3 /*break*/, 23];\n case 21:\n e_16_1 = _h.sent();\n e_16 = { error: e_16_1 };\n return [3 /*break*/, 23];\n case 22:\n try {\n if (changedColumns_3_1 && !changedColumns_3_1.done && (_g = changedColumns_3.return)) _g.call(changedColumns_3);\n }\n finally { if (e_16) throw e_16.error; }\n return [7 /*endfinally*/];\n case 23:\n newAndOldTableColumns = changedColumns.map(function (changedColumn) {\n var oldTableColumn = table.columns.find(function (column) { return column.name === changedColumn.databaseName; });\n var newTableColumnOptions = TableUtils.createTableColumnOptions(changedColumn, _this.connection.driver);\n var newTableColumn = new TableColumn(newTableColumnOptions);\n return {\n oldColumn: oldTableColumn,\n newColumn: newTableColumn\n };\n });\n if (newAndOldTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_13.connection.logger.logSchemaBuild(\"columns changed in \\\"\" + table.name + \"\\\". updating: \" + changedColumns.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_13.queryRunner.changeColumns(table, newAndOldTableColumns)];\n case 24:\n _h.sent();\n return [2 /*return*/];\n }\n });\n };\n this_13 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_13(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_13_1 = _d.sent();\n e_13 = { error: e_13_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_13) throw e_13.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite indices which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_14, this_14, _a, _b, metadata, e_17_1;\n var e_17, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_14 = function (metadata) {\n var table, newIndices;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_14.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newIndices = metadata.indices\n .filter(function (indexMetadata) { return !table.indices.find(function (tableIndex) { return tableIndex.name === indexMetadata.name; }) && indexMetadata.synchronize === true; })\n .map(function (indexMetadata) { return TableIndex.create(indexMetadata); });\n if (newIndices.length === 0)\n return [2 /*return*/, \"continue\"];\n this_14.connection.logger.logSchemaBuild(\"adding new indices \" + newIndices.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_14.queryRunner.createIndices(table, newIndices)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_14 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_14(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_17_1 = _d.sent();\n e_17 = { error: e_17_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_17) throw e_17.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createNewChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_15, this_15, _a, _b, metadata, e_18_1;\n var e_18, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_15 = function (metadata) {\n var table, newChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_15.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newChecks = metadata.checks\n .filter(function (checkMetadata) { return !table.checks.find(function (tableCheck) { return tableCheck.name === checkMetadata.name; }); })\n .map(function (checkMetadata) { return TableCheck.create(checkMetadata); });\n if (newChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_15.connection.logger.logSchemaBuild(\"adding new check constraints: \" + newChecks.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_15.queryRunner.createCheckConstraints(table, newChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_15 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_15(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_18_1 = _d.sent();\n e_18 = { error: e_18_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_18) throw e_18.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite uniques which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_16, this_16, _a, _b, metadata, e_19_1;\n var e_19, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_16 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_16.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = metadata.uniques\n .filter(function (uniqueMetadata) { return uniqueMetadata.columns.length > 1 && !table.uniques.find(function (tableUnique) { return tableUnique.name === uniqueMetadata.name; }); })\n .map(function (uniqueMetadata) { return TableUnique.create(uniqueMetadata); });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_16.connection.logger.logSchemaBuild(\"adding new unique constraints: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_16.queryRunner.createUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_16 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_16(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_19_1 = _d.sent();\n e_19 = { error: e_19_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_19) throw e_19.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates exclusions which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_17, this_17, _a, _b, metadata, e_20_1;\n var e_20, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_17 = function (metadata) {\n var table, newExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_17.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newExclusions = metadata.exclusions\n .filter(function (exclusionMetadata) { return !table.exclusions.find(function (tableExclusion) { return tableExclusion.name === exclusionMetadata.name; }); })\n .map(function (exclusionMetadata) { return TableExclusion.create(exclusionMetadata); });\n if (newExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_17.connection.logger.logSchemaBuild(\"adding new exclusion constraints: \" + newExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_17.queryRunner.createExclusionConstraints(table, newExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_17 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_17(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_20_1 = _d.sent();\n e_20 = { error: e_20_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_20) throw e_20.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates foreign keys which does not exist in the table yet.\n */\n RdbmsSchemaBuilder.prototype.createForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_18, this_18, _a, _b, metadata, e_21_1;\n var e_21, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_18 = function (metadata) {\n var table, newKeys, dbForeignKeys;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_18.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newKeys = metadata.foreignKeys\n .filter(function (foreignKey) {\n return !table.foreignKeys.find(function (dbForeignKey) { return foreignKeysMatch(dbForeignKey, foreignKey); });\n });\n if (newKeys.length === 0)\n return [2 /*return*/, \"continue\"];\n dbForeignKeys = newKeys.map(function (foreignKeyMetadata) { return TableForeignKey.create(foreignKeyMetadata); });\n this_18.connection.logger.logSchemaBuild(\"creating a foreign keys: \" + newKeys.map(function (key) { return key.name; }).join(\", \") + \" on table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_18.queryRunner.createForeignKeys(table, dbForeignKeys)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_18 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_18(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_21_1 = _d.sent();\n e_21 = { error: e_21_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_21) throw e_21.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all foreign keys where given column of the given table is being used.\n */\n RdbmsSchemaBuilder.prototype.dropColumnReferencedForeignKeys = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, tablesWithFK, columnForeignKey, clonedTable, tablesWithFK_1, tablesWithFK_1_1, tableWithFK, e_22_1;\n var e_22, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n tablesWithFK = [];\n columnForeignKey = table.foreignKeys.find(function (foreignKey) { return foreignKey.columnNames.indexOf(columnName) !== -1; });\n if (columnForeignKey) {\n clonedTable = table.clone();\n clonedTable.foreignKeys = [columnForeignKey];\n tablesWithFK.push(clonedTable);\n table.removeForeignKey(columnForeignKey);\n }\n this.queryRunner.loadedTables.forEach(function (loadedTable) {\n var dependForeignKeys = loadedTable.foreignKeys.filter(function (foreignKey) {\n return foreignKey.referencedTableName === tablePath && foreignKey.referencedColumnNames.indexOf(columnName) !== -1;\n });\n if (dependForeignKeys.length > 0) {\n var clonedTable = loadedTable.clone();\n clonedTable.foreignKeys = dependForeignKeys;\n tablesWithFK.push(clonedTable);\n dependForeignKeys.forEach(function (dependForeignKey) { return loadedTable.removeForeignKey(dependForeignKey); });\n }\n });\n if (!(tablesWithFK.length > 0)) return [3 /*break*/, 8];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, 7, 8]);\n tablesWithFK_1 = __values(tablesWithFK), tablesWithFK_1_1 = tablesWithFK_1.next();\n _b.label = 2;\n case 2:\n if (!!tablesWithFK_1_1.done) return [3 /*break*/, 5];\n tableWithFK = tablesWithFK_1_1.value;\n this.connection.logger.logSchemaBuild(\"dropping related foreign keys of \" + tableWithFK.name + \": \" + tableWithFK.foreignKeys.map(function (foreignKey) { return foreignKey.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropForeignKeys(tableWithFK, tableWithFK.foreignKeys)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n tablesWithFK_1_1 = tablesWithFK_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_22_1 = _b.sent();\n e_22 = { error: e_22_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (tablesWithFK_1_1 && !tablesWithFK_1_1.done && (_a = tablesWithFK_1.return)) _a.call(tablesWithFK_1);\n }\n finally { if (e_22) throw e_22.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite indices, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeIndices = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedIndices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedIndices = table.indices.filter(function (index) { return index.columnNames.length > 1 && index.columnNames.indexOf(columnName) !== -1; });\n if (relatedIndices.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related indices of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedIndices.map(function (index) { return index.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropIndices(table, relatedIndices)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite uniques, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeUniques = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedUniques;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedUniques = table.uniques.filter(function (unique) { return unique.columnNames.length > 1 && unique.columnNames.indexOf(columnName) !== -1; });\n if (relatedUniques.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related unique constraints of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedUniques.map(function (unique) { return unique.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropUniqueConstraints(table, relatedUniques)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new columns from the given column metadatas.\n */\n RdbmsSchemaBuilder.prototype.metadataColumnsToTableColumnOptions = function (columns) {\n var _this = this;\n return columns.map(function (columnMetadata) { return TableUtils.createTableColumnOptions(columnMetadata, _this.connection.driver); });\n };\n /**\n * Creates typeorm service table for storing user defined Views.\n */\n RdbmsSchemaBuilder.prototype.createTypeormMetadataTable = function () {\n return __awaiter(this, void 0, void 0, function () {\n var options, typeormMetadataTable;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n options = this.connection.driver.options;\n typeormMetadataTable = this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n return [4 /*yield*/, this.queryRunner.createTable(new Table({\n name: typeormMetadataTable,\n columns: [\n {\n name: \"type\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataType }),\n isNullable: false\n },\n {\n name: \"database\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataDatabase }),\n isNullable: true\n },\n {\n name: \"schema\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataSchema }),\n isNullable: true\n },\n {\n name: \"table\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataTable }),\n isNullable: true\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataName }),\n isNullable: true\n },\n {\n name: \"value\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataValue }),\n isNullable: true\n },\n ]\n }), true)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return RdbmsSchemaBuilder;\n}());\nexport { RdbmsSchemaBuilder };\nfunction foreignKeysMatch(tableForeignKey, metadataForeignKey) {\n return (tableForeignKey.name === metadataForeignKey.name)\n && (tableForeignKey.referencedTableName === metadataForeignKey.referencedTablePath);\n}\n\n//# sourceMappingURL=RdbmsSchemaBuilder.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { DateUtils } from \"../../util/DateUtils\";\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\n/**\n * Organizes communication with sqlite DBMS.\n */\nvar AbstractSqliteDriver = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteDriver(connection) {\n /**\n * Indicates if replication is enabled.\n */\n this.isReplicated = false;\n /**\n * Indicates if tree tables are supported by this driver.\n */\n this.treeSupport = true;\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n this.supportedDataTypes = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support length by a driver.\n */\n this.withLengthColumnTypes = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n /**\n * Gets list of spatial column data types.\n */\n this.spatialTypes = [];\n /**\n * Gets list of column data types that support precision by a driver.\n */\n this.withPrecisionColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support scale by a driver.\n */\n this.withScaleColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n this.mappedDataTypes = {\n createDate: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n this.connection = connection;\n this.options = connection.options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n AbstractSqliteDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AbstractSqliteDriver.prototype.afterConnect = function () {\n return Promise.resolve();\n };\n /**\n * Closes connection with database.\n */\n AbstractSqliteDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(function (err) { return err ? fail(err) : ok(); });\n })];\n });\n });\n };\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n AbstractSqliteDriver.prototype.createSchemaBuilder = function () {\n return new RdbmsSchemaBuilder(this.connection);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AbstractSqliteDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n if (value === null || value === undefined)\n return value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n }\n else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value);\n }\n return value;\n };\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n AbstractSqliteDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n value = DateUtils.normalizeHydratedDate(value);\n }\n else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return value;\n };\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n AbstractSqliteDriver.prototype.escapeQueryWithParameters = function (sql, parameters, nativeParameters) {\n var builtParameters = Object.keys(nativeParameters).map(function (key) {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n return nativeParameters[key];\n });\n if (!parameters || !Object.keys(parameters).length)\n return [sql, builtParameters];\n var keys = Object.keys(parameters).map(function (parameter) { return \"(:(\\\\.\\\\.\\\\.)?\" + parameter + \"\\\\b)\"; }).join(\"|\");\n sql = sql.replace(new RegExp(keys, \"g\"), function (key) {\n var value;\n var isArray = false;\n if (key.substr(0, 4) === \":...\") {\n isArray = true;\n value = parameters[key.substr(4)];\n }\n else {\n value = parameters[key.substr(1)];\n }\n if (isArray) {\n return value.map(function (v) {\n builtParameters.push(v);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }).join(\", \");\n }\n else if (value instanceof Function) {\n return value();\n }\n else {\n builtParameters.push(value);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, builtParameters];\n };\n /**\n * Escapes a column name.\n */\n AbstractSqliteDriver.prototype.escape = function (columnName) {\n return \"\\\"\" + columnName + \"\\\"\";\n };\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. \"myDB\".\"mySchema\".\"myTable\"\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n AbstractSqliteDriver.prototype.buildTableName = function (tableName, schema, database) {\n return tableName;\n };\n /**\n * Creates a database type from a given column metadata.\n */\n AbstractSqliteDriver.prototype.normalizeType = function (column) {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n }\n else if (column.type === String) {\n return \"varchar\";\n }\n else if (column.type === Date) {\n return \"datetime\";\n }\n else if (column.type === Boolean) {\n return \"boolean\";\n }\n else if (column.type === \"uuid\") {\n return \"varchar\";\n }\n else if (column.type === \"simple-array\") {\n return \"text\";\n }\n else if (column.type === \"simple-json\") {\n return \"text\";\n }\n else if (column.type === \"simple-enum\") {\n return \"varchar\";\n }\n else {\n return column.type || \"\";\n }\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeDefault = function (columnMetadata) {\n var defaultValue = columnMetadata.default;\n if (typeof defaultValue === \"number\") {\n return \"\" + defaultValue;\n }\n else if (typeof defaultValue === \"boolean\") {\n return defaultValue === true ? \"1\" : \"0\";\n }\n else if (typeof defaultValue === \"function\") {\n return defaultValue();\n }\n else if (typeof defaultValue === \"string\") {\n return \"'\" + defaultValue + \"'\";\n }\n else if (defaultValue === null) {\n return undefined;\n }\n else {\n return defaultValue;\n }\n };\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeIsUnique = function (column) {\n return column.entityMetadata.uniques.some(function (uq) { return uq.columns.length === 1 && uq.columns[0] === column; });\n };\n /**\n * Calculates column length taking into account the default length values.\n */\n AbstractSqliteDriver.prototype.getColumnLength = function (column) {\n return column.length ? column.length.toString() : \"\";\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.createFullType = function (column) {\n var type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n if (column.isArray)\n type += \" array\";\n return type;\n };\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainMasterConnection = function () {\n return Promise.resolve();\n };\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainSlaveConnection = function () {\n return Promise.resolve();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n AbstractSqliteDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex, entityNum) {\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n var value;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n if (!value)\n return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n AbstractSqliteDriver.prototype.findChangedColumns = function (tableColumns, columnMetadatas) {\n var _this = this;\n return columnMetadatas.filter(function (columnMetadata) {\n var tableColumn = tableColumns.find(function (c) { return c.name === columnMetadata.databaseName; });\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== _this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || _this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== _this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n });\n };\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n AbstractSqliteDriver.prototype.isReturningSqlSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n AbstractSqliteDriver.prototype.isUUIDGenerationSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports fulltext indices.\n */\n AbstractSqliteDriver.prototype.isFullTextColumnTypeSupported = function () {\n return false;\n };\n /**\n * Creates an escaped parameter.\n */\n AbstractSqliteDriver.prototype.createParameter = function (parameterName, index) {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n AbstractSqliteDriver.prototype.createDatabaseConnection = function () {\n throw new Error(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AbstractSqliteDriver.prototype.loadDependencies = function () {\n // dependencies have to be loaded in the specific driver\n };\n return AbstractSqliteDriver;\n}());\nexport { AbstractSqliteDriver };\n\n//# sourceMappingURL=AbstractSqliteDriver.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Counter\"), exports);\n__exportStar(require(\"./shared/DateHelper\"), exports);\n__exportStar(require(\"./shared/Helper\"), exports);\n__exportStar(require(\"./shared/JsonHelper\"), exports);\n__exportStar(require(\"./shared/MigrationHelper\"), exports);\n__exportStar(require(\"./shared/Prioritized\"), exports);\n__exportStar(require(\"./shared/PromiseWithHandlers\"), exports);\n__exportStar(require(\"./shared/Random\"), exports);\n__exportStar(require(\"./shared/XSSHelper\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SoundManager = void 0;\nconst AudioChain_1 = require(\"./AudioChain\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst App_1 = require(\"../App\");\nconst DataManager_1 = require(\"../DataManager\");\nclass SoundManager {\n constructor() {\n this.channels = {};\n if ('AudioContext' in window) {\n this.context = new AudioContext();\n }\n else if ('webkitAudioContext' in window) {\n // @ts-ignore\n this.context = new webkitAudioContext();\n }\n else {\n throw new Error(\"No audio context found!\");\n }\n this.context.onstatechange = function () {\n console.log(\"stateChange from context\", arguments);\n };\n this.context.oncomplete = function () {\n console.log(\"onComplete from context\", arguments);\n };\n window.addEventListener(\"visibilitychange\", (e) => {\n // console.log(\"visibility Change event\", e);\n this.handleVisibilityChange();\n });\n //For safari\n let checkVisibility = () => {\n this.handleVisibilityChange();\n setTimeout(checkVisibility, 500);\n };\n checkVisibility();\n }\n static getInstance() {\n if (Helper_1.Helper.isNull(SoundManager._instance)) {\n SoundManager._instance = new SoundManager();\n }\n return SoundManager._instance;\n }\n isNotSuspended() {\n // return false;\n return this.context.state !== \"suspended\";\n }\n set(options, channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let audioObject = Helper_1.Helper.nonNull(this.channels[channel], {});\n if (typeof options === \"string\") {\n options = { audio: options };\n }\n let audio = options.audio;\n if (Helper_1.Helper.isNotNull(audio)) {\n audioObject.loadedPromise = DataManager_1.DataManager.loadAsset(audio, \"raw\").then(res => res.arrayBuffer()).then(arrayBuffer => {\n return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n }).catch(e => console.error(e));\n // audioObject.loadedPromise = fetch(audio).then(res => res.arrayBuffer()).then(arrayBuffer => {\n // return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n // }).catch(e => console.error(e));\n this.stop(channel);\n }\n audioObject.muted = Helper_1.Helper.nonNull(options.muted, audioObject.muted, false);\n audioObject.volume = Helper_1.Helper.nonNull(options.volume, audioObject.volume, 1);\n audioObject.loop = Helper_1.Helper.nonNull(options.loop, audioObject.loop, false);\n audioObject.timeOffset = Helper_1.Helper.nonNull(options.timeOffset, audioObject.timeOffset, 0);\n this.channels[channel] = audioObject;\n if (audioObject.muted) {\n this.stop(channel);\n }\n return this.channels[channel];\n }\n resumeContext() {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.context.resume === \"function\") {\n return this.context.resume();\n }\n });\n }\n play(channel, audioOrOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n this.resumeContext();\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNull(audioOrOptions)) {\n audioOrOptions = {};\n }\n else if (!(typeof audioOrOptions === \"object\")) {\n audioOrOptions = {\n audio: audioOrOptions\n };\n }\n audioOrOptions.timeOffset = Helper_1.Helper.nonNull(audioOrOptions.timeOffset, 0);\n this.stop(channel);\n this.set(audioOrOptions, channel);\n if (!this.channels[channel].muted) {\n let buffer = yield this.channels[channel].loadedPromise;\n let source = new AudioChain_1.AudioChain(this.context, buffer, (sourceNode) => {\n let gain = this.context.createGain();\n gain.gain.value = this.channels[channel].volume;\n sourceNode.connect(gain);\n gain.connect(this.context.destination);\n });\n source.setBuffer(buffer);\n //to prevent gap in mp3-files\n source.setLooping(this.channels[channel].loop, 0.3, buffer.duration - 0.3);\n this.channels[channel].source = source;\n yield source.start();\n }\n return this.channels[channel];\n });\n }\n stop(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let oldAudio = this.channels[channel];\n if (Helper_1.Helper.isNotNull(oldAudio) && Helper_1.Helper.isNotNull(oldAudio.source)) {\n oldAudio.source.stop();\n }\n }\n get(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n return this.channels[channel];\n }\n resume(channel) {\n return __awaiter(this, void 0, void 0, function* () {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNotNull(this.channels[channel]) && !this.channels[channel].muted && Helper_1.Helper.isNotNull(this.channels[channel].source)) {\n return this.channels[channel].source.resume();\n }\n });\n }\n stopAll() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.stop();\n }\n }\n }\n resumeAllIfNotMuted() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k]) && !this.channels[k].muted && Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.resume();\n }\n }\n }\n handleVisibilityChange() {\n if (document.hidden) {\n this.stopAll();\n }\n else {\n this.resumeAllIfNotMuted();\n }\n }\n}\nexports.SoundManager = SoundManager;\nSoundManager.CHANNELS = {\n MUSIC: \"music\",\n SOUND: \"sound\",\n DEFAULT: \"default\"\n};\nApp_1.App.addInitialization(app => {\n // PauseSite.onPauseListeners.push(() => {\n // SoundManager.getInstance().stopAll();\n // });\n // PauseSite.onStartListeners.push(() => {\n // SoundManager.getInstance().resumeAllIfNotMuted();\n // });\n});\n// AndroidBridge.addDefinition(() => {\n// window[\"soundManagerInstance\"] = SoundManager.getInstance();\n// window[\"soundManagerInstance\"][\"stopAll\"] = window[\"soundManagerInstance\"].stopAll;\n// window[\"soundManagerInstance\"][\"resumeAllIfNotMuted\"] = window[\"soundManagerInstance\"].resumeAllIfNotMuted;\n// });\n//# sourceMappingURL=SoundManager.js.map","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./BaseDatabase\"));\n__export(require(\"./BaseModel\"));\n__export(require(\"./cordova-sites-database\"));\n//# sourceMappingURL=cordova-sites-database.js.map","import { __read, __values } from \"tslib\";\nimport { hash } from \"../util/StringUtils\";\n/**\n * Common driver utility functions.\n */\nvar DriverUtils = /** @class */ (function () {\n function DriverUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n */\n DriverUtils.buildDriverOptions = function (options, buildOptions) {\n var e_1, _a;\n if (options.url) {\n var urlDriverOptions = this.parseConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * buildDriverOptions for MongodDB only to support replica set\n */\n DriverUtils.buildMongoDBDriverOptions = function (options, buildOptions) {\n var e_2, _a;\n if (options.url) {\n var urlDriverOptions = this.parseMongoDBConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * Builds column alias from given alias name and column name.\n *\n * If alias length is greater than the limit (if any) allowed by the current\n * driver, replaces it with a hashed string.\n *\n * @param driver Current `Driver`.\n * @param alias Alias part.\n * @param column Name of the column to be concatened to `alias`.\n *\n * @return An alias allowing to select/transform the target `column`.\n */\n DriverUtils.buildColumnAlias = function (_a, alias, column) {\n var maxAliasLength = _a.maxAliasLength;\n var columnAliasName = alias + \"_\" + column;\n if (maxAliasLength && maxAliasLength > 0 && columnAliasName.length > maxAliasLength) {\n return hash(columnAliasName, { length: maxAliasLength });\n }\n return columnAliasName;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Extracts connection data from the connection url.\n */\n DriverUtils.parseConnectionUrl = function (url) {\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n var _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined\n };\n };\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n */\n DriverUtils.parseMongoDBConnectionUrl = function (url) {\n var _a;\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n var afterQuestionMark = \"\";\n var host = undefined;\n var port = undefined;\n var hostReplicaSet = undefined;\n var replicaSet = undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params to get replica set\n afterQuestionMark = afterBase.substr((afterBase.indexOf(\"?\") + 1), afterBase.length);\n replicaSet = afterQuestionMark.split(\"=\")[1];\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n if (replicaSet) {\n hostReplicaSet = hostAndPort;\n }\n else {\n _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n }\n return {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined,\n replicaSet: replicaSet || undefined\n };\n };\n return DriverUtils;\n}());\nexport { DriverUtils };\n\n//# sourceMappingURL=DriverUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Provides utilities to transform hydrated and persisted data.\n */\nvar DateUtils = /** @class */ (function () {\n function DateUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes date object hydrated from the database.\n */\n DateUtils.normalizeHydratedDate = function (mixedDate) {\n if (!mixedDate)\n return mixedDate;\n return typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n };\n /**\n * Converts given value into date string in a \"YYYY-MM-DD\" format.\n */\n DateUtils.mixedDateToDateString = function (value) {\n if (value instanceof Date)\n return this.formatZerolessValue(value.getFullYear()) + \"-\" + this.formatZerolessValue(value.getMonth() + 1) + \"-\" + this.formatZerolessValue(value.getDate());\n return value;\n };\n /**\n * Converts given value into date object.\n */\n DateUtils.mixedDateToDate = function (mixedDate, toUtc, useMilliseconds) {\n if (toUtc === void 0) { toUtc = false; }\n if (useMilliseconds === void 0) { useMilliseconds = true; }\n var date = typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n if (toUtc)\n date = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n if (!useMilliseconds)\n date.setUTCMilliseconds(0);\n return date;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedDateToTimeString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n if (value instanceof Date)\n return this.formatZerolessValue(value.getHours()) +\n \":\" + this.formatZerolessValue(value.getMinutes()) +\n (!skipSeconds ? \":\" + this.formatZerolessValue(value.getSeconds()) : \"\");\n return value;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToDate = function (value) {\n if (typeof value === \"string\") {\n var _a = __read(value.split(\":\"), 3), hours = _a[0], minutes = _a[1], seconds = _a[2];\n var date = new Date();\n if (hours)\n date.setHours(parseInt(hours));\n if (minutes)\n date.setMinutes(parseInt(minutes));\n if (seconds)\n date.setSeconds(parseInt(seconds));\n return date;\n }\n return value;\n };\n /**\n * Converts given string value with \"-\" separator into a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n value = value instanceof Date ? (value.getHours() + \":\" + value.getMinutes() + (!skipSeconds ? \":\" + value.getSeconds() : \"\")) : value;\n if (typeof value === \"string\") {\n return value.split(\":\")\n .map(function (v) { return v.length === 1 ? \"0\" + v : v; }) // append zero at beginning if we have a first-zero-less number\n .join(\":\");\n }\n return value;\n };\n /**\n * Converts given value into datetime string in a \"YYYY-MM-DD HH-mm-ss\" format.\n */\n DateUtils.mixedDateToDatetimeString = function (value, useMilliseconds) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n var finalValue = this.formatZerolessValue(value.getFullYear()) + \"-\" +\n this.formatZerolessValue(value.getMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getDate()) + \" \" +\n this.formatZerolessValue(value.getHours()) + \":\" +\n this.formatZerolessValue(value.getMinutes()) + \":\" +\n this.formatZerolessValue(value.getSeconds());\n if (useMilliseconds)\n finalValue += \".\" + this.formatMilliseconds(value.getMilliseconds());\n value = finalValue;\n }\n return value;\n };\n /**\n * Converts given value into utc datetime string in a \"YYYY-MM-DD HH-mm-ss.sss\" format.\n */\n DateUtils.mixedDateToUtcDatetimeString = function (value) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n return this.formatZerolessValue(value.getUTCFullYear()) + \"-\" +\n this.formatZerolessValue(value.getUTCMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getUTCDate()) + \" \" +\n this.formatZerolessValue(value.getUTCHours()) + \":\" +\n this.formatZerolessValue(value.getUTCMinutes()) + \":\" +\n this.formatZerolessValue(value.getUTCSeconds()) + \".\" +\n this.formatMilliseconds(value.getUTCMilliseconds());\n }\n return value;\n };\n /**\n * Converts each item in the given array to string joined by \",\" separator.\n */\n DateUtils.simpleArrayToString = function (value) {\n if (Array.isArray(value)) {\n return value\n .map(function (i) { return String(i); })\n .join(\",\");\n }\n return value;\n };\n /**\n * Converts given string to simple array split by \",\" separator.\n */\n DateUtils.stringToSimpleArray = function (value) {\n if (value instanceof String || typeof value === \"string\") {\n if (value.length > 0) {\n return value.split(\",\");\n }\n else {\n return [];\n }\n }\n return value;\n };\n DateUtils.simpleJsonToString = function (value) {\n return JSON.stringify(value);\n };\n DateUtils.stringToSimpleJson = function (value) {\n return typeof value === \"string\" ? JSON.parse(value) : value;\n };\n DateUtils.simpleEnumToString = function (value) {\n return \"\" + value;\n };\n DateUtils.stringToSimpleEnum = function (value, columnMetadata) {\n if (columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in poosible enum options\n value = parseInt(value);\n }\n return value;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatZerolessValue = function (value) {\n if (value < 10)\n return \"0\" + value;\n return String(value);\n };\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatMilliseconds = function (value) {\n if (value < 10) {\n return \"00\" + value;\n }\n else if (value < 100) {\n return \"0\" + value;\n }\n else {\n return String(value);\n }\n };\n return DateUtils;\n}());\nexport { DateUtils };\n\n//# sourceMappingURL=DateUtils.js.map\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","import { __values } from \"tslib\";\nvar ObjectUtils = /** @class */ (function () {\n function ObjectUtils() {\n }\n /**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target The target object to copy to.\n * @param sources One or more source objects from which to copy properties\n */\n ObjectUtils.assign = function (target) {\n var e_1, _a, e_2, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n try {\n for (var sources_1 = __values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {\n var source = sources_1_1.value;\n try {\n for (var _c = (e_2 = void 0, __values(Object.getOwnPropertyNames(source))), _d = _c.next(); !_d.done; _d = _c.next()) {\n var prop = _d.value;\n target[prop] = source[prop];\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n return ObjectUtils;\n}());\nexport { ObjectUtils };\n\n//# sourceMappingURL=ObjectUtils.js.map\n","/**\n * Table's columns in the database represented in this class.\n */\nvar TableColumn = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableColumn(options) {\n /**\n * Indicates if column is NULL, or is NOT NULL in the database.\n */\n this.isNullable = false;\n /**\n * Indicates if column is auto-generated sequence.\n */\n this.isGenerated = false;\n /**\n * Indicates if column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if column has unique value.\n */\n this.isUnique = false;\n /**\n * Indicates if column stores array.\n */\n this.isArray = false;\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n this.length = \"\";\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n if (options) {\n this.name = options.name;\n this.type = options.type || \"\";\n this.length = options.length || \"\";\n this.width = options.width;\n this.charset = options.charset;\n this.collation = options.collation;\n this.precision = options.precision;\n this.scale = options.scale;\n this.zerofill = options.zerofill || false;\n this.unsigned = this.zerofill ? true : (options.unsigned || false);\n this.default = options.default;\n this.onUpdate = options.onUpdate;\n this.isNullable = options.isNullable || false;\n this.isGenerated = options.isGenerated || false;\n this.generationStrategy = options.generationStrategy;\n this.isPrimary = options.isPrimary || false;\n this.isUnique = options.isUnique || false;\n this.isArray = options.isArray || false;\n this.comment = options.comment;\n this.enum = options.enum;\n this.enumName = options.enumName;\n this.asExpression = options.asExpression;\n this.generatedType = options.generatedType;\n this.spatialFeatureType = options.spatialFeatureType;\n this.srid = options.srid;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this column to a new column with exact same properties as this column has.\n */\n TableColumn.prototype.clone = function () {\n return new TableColumn({\n name: this.name,\n type: this.type,\n length: this.length,\n width: this.width,\n charset: this.charset,\n collation: this.collation,\n precision: this.precision,\n scale: this.scale,\n zerofill: this.zerofill,\n unsigned: this.unsigned,\n enum: this.enum,\n enumName: this.enumName,\n asExpression: this.asExpression,\n generatedType: this.generatedType,\n default: this.default,\n onUpdate: this.onUpdate,\n isNullable: this.isNullable,\n isGenerated: this.isGenerated,\n generationStrategy: this.generationStrategy,\n isPrimary: this.isPrimary,\n isUnique: this.isUnique,\n isArray: this.isArray,\n comment: this.comment,\n spatialFeatureType: this.spatialFeatureType,\n srid: this.srid\n });\n };\n return TableColumn;\n}());\nexport { TableColumn };\n\n//# sourceMappingURL=TableColumn.js.map\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewHelper = void 0;\nclass ViewHelper {\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n from.childNodes.forEach(child => {\n children.push(child);\n });\n children.forEach(child => {\n from.removeChild(child);\n to.appendChild(child);\n });\n return to;\n }\n static insertAfter(newChild, referenceChild) {\n const parent = referenceChild.parentNode;\n if (parent) {\n if (parent.lastChild === referenceChild) {\n parent.appendChild(newChild);\n }\n else {\n parent.insertBefore(newChild, referenceChild.nextSibling);\n }\n return true;\n }\n return false;\n }\n}\nexports.ViewHelper = ViewHelper;\n//# sourceMappingURL=ViewHelper.js.map","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst NativeStoragePromise_1 = require(\"./NativeStoragePromise\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"../../shared/Translator\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator extends Translator_1.Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config) {\n super(config);\n config = Helper_1.Helper.nonNull(config, {});\n this._currentLanguage = config.currentLanguage || this._fallbackLanguage;\n this._nativeStorageKey = config.nativeStorageKey || \"language\";\n this._translationClass = config.translationClass || \"translation\";\n this._initPromise = this.loadUserLanguage().then(userLanguage => this.setLanguage(userLanguage.toLowerCase()));\n }\n /**\n * Setzt die neue Sprache, updated alle Übersetzungen. Speichert danach die aktuelle Sprache in NativeStorage\n * @param language\n */\n setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._currentLanguage === language) {\n yield this.updateTranslations();\n return;\n }\n if (!this._translations[language]) {\n return;\n }\n if (typeof document !== 'undefined') {\n document.getElementsByTagName(\"html\")[0].setAttribute(\"lang\", language);\n }\n this._currentLanguage = language;\n yield this.updateTranslations();\n //zum schluss => Falls setzen des Keys fehlschlägt, wird trotzdem noch übersetzt\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this._nativeStorageKey, this._currentLanguage);\n });\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @returns {*}\n */\n translate(key, args, language) {\n return super.translate(key, args, Helper_1.Helper.nonNull(language, this._currentLanguage));\n }\n /**\n * Fügt eine Callback hinzu, die aufgerufen wird, sobald die Seite übersetzt wird. Sollte genutzt werden, um Teile\n * zu übersetzen, die nicht per HTML übersetzt werden können, die der Document Title\n *\n * wenn callImmediately true ist (default), wird die Callback sofort einmal ausgeführt\n *\n * Gibt die CallbackId zurück\n *\n * @param callback\n * @param callImmediately\n * @returns {number}\n */\n addTranslationCallback(callback, callImmediately) {\n callImmediately = Helper_1.Helper.nonNull(callImmediately, true);\n this._lastTranslationCallbackId++;\n this._translationCallbacks.set(this._lastTranslationCallbackId, callback);\n if (callImmediately) {\n callback();\n }\n return this._lastTranslationCallbackId;\n }\n /**\n * Entfernt die Callback anhand der gegebenen ID\n *\n * @param callbackId\n */\n removeTranslationCallback(callbackId) {\n this._translationCallbacks.delete(callbackId);\n }\n /**\n * Updated die aktuellen übersetzungen\n */\n updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n baseElement = Helper_1.Helper.nonNull(baseElement, document);\n if (typeof baseElement !== 'undefined') {\n let elements = baseElement.getElementsByClassName(this._translationClass);\n for (let i = 0, max = elements.length; i < max; i++) {\n let key = (Translator._isValid(elements[i].dataset[\"translation\"]) ? elements[i].dataset[\"translation\"] : (elements[i].innerText || \"\"));\n if (key !== \"\" && !elements[i].dataset[\"onlyTranslateAttributes\"]) {\n try {\n let translation = this.translate(key, (elements[i].dataset[\"translationArgs\"] !== undefined) ? JSON.parse(elements[i].dataset[\"translationArgs\"]) : undefined);\n if (elements[i].dataset[\"translationUseText\"] === \"1\") {\n elements[i].innerText = translation;\n }\n else {\n elements[i].innerHTML = translation;\n }\n elements[i].dataset[\"translation\"] = key;\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n //Übersetzung von Attributen\n for (let k in elements[i].dataset) {\n if (k.startsWith(\"translation\") && !k.endsWith(\"Args\")) {\n try {\n elements[i][k.substr(11).toLowerCase()] = this.translate(elements[i].dataset[k], (elements[i].dataset[k + \"Args\"] !== undefined) ? JSON.parse(elements[i].dataset[k + \"Args\"]) : undefined);\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n }\n }\n }\n //Call translation callbacks\n yield Helper_1.Helper.asyncForEach(this._translationCallbacks, (callback) => __awaiter(this, void 0, void 0, function* () { return callback(baseElement); }));\n // this._translationCallbacks.forEach(callback => callback(baseElement));\n });\n }\n /**\n * Lädt die im NativeStorage gespeicherte Sprache oder - falls diese nicht vorhanden ist - die vom User untersütze Sprache im Browser\n * @returns {Promise<*>}\n */\n loadUserLanguage() {\n return __awaiter(this, void 0, void 0, function* () {\n let userLanguage = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this._nativeStorageKey);\n if (!Translator._isValid(userLanguage) || !(userLanguage in this._translations)) {\n let userLanguages = [];\n if (navigator.language !== undefined) {\n userLanguages.push(navigator.language);\n }\n if (\"languages\" in navigator) {\n //.slice(0) klont das Array. Behebt einen Bug in Firefox\n userLanguages = navigator.languages.slice(0);\n }\n //sicherstellen, dass überhaupt eine Sprache gefunden wird\n userLanguages.push(this._fallbackLanguage);\n // if (userLanguages !== undefined) {\n for (let i = 0, numLanguages = userLanguages.length; i < numLanguages; i++) {\n if (userLanguages[i] in this._translations) {\n userLanguage = userLanguages[i];\n break;\n }\n }\n // }\n }\n return userLanguage;\n });\n }\n /**\n * Erstellt eine neue Übersetzung, welche auch übersetzt wird, wenn die Sprache geändert wird\n * @param key\n * @param args\n * @param tag\n * @param useText\n * @returns {any}\n */\n makePersistentTranslation(key, args, tag, useText) {\n useText = Helper_1.Helper.nonNull(useText, tag, args, false);\n tag = tag || \"span\";\n if (typeof document !== 'undefined') {\n let htmlElem = document.createElement(tag);\n htmlElem.dataset[\"translation\"] = key;\n htmlElem.classList.add(this._translationClass);\n if (args !== undefined) {\n htmlElem.dataset[\"translationArgs\"] = JSON.stringify(args);\n }\n if (useText === true) {\n htmlElem.innerText = this.translate(key, args);\n htmlElem.dataset[\"translationUseText\"] = \"1\";\n }\n else {\n htmlElem.innerHTML = this.translate(key, args);\n }\n return htmlElem;\n }\n }\n getTranslationClass() {\n return this._translationClass;\n }\n getCurrentLanguage() {\n return this._currentLanguage;\n }\n static getInstance() {\n return Translator_1.Translator.getInstance();\n }\n static setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.setLanguage(language);\n }\n });\n }\n static makePersistentTranslation(key, args, tag, useText) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.makePersistentTranslation(key, args, tag, useText);\n }\n }\n static addTranslationCallback(callback, callImmediately) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addTranslationCallback(callback, callImmediately);\n }\n }\n static removeTranslationCallback(callbackId) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.removeTranslationCallback(callbackId);\n }\n }\n static updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.updateTranslations(baseElement);\n }\n });\n }\n static init(config) {\n Translator_1.Translator.instance = new Translator(config);\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.logMissingTranslations = true;\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table unique constraint stored in this class.\n */\nvar TableUnique = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableUnique(options) {\n /**\n * Columns that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableUnique.prototype.clone = function () {\n return new TableUnique({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames))\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates unique from the unique metadata object.\n */\n TableUnique.create = function (uniqueMetadata) {\n return new TableUnique({\n name: uniqueMetadata.name,\n columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; })\n });\n };\n return TableUnique;\n}());\nexport { TableUnique };\n\n//# sourceMappingURL=TableUnique.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * This metadata contains all information about entity's column.\n */\nvar ColumnMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ColumnMetadata(options) {\n /**\n * Type's length in the database.\n */\n this.length = \"\";\n /**\n * Indicates if this column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if this column is generated (auto increment or generated other way).\n */\n this.isGenerated = false;\n /**\n * Indicates if column can contain nulls or not.\n */\n this.isNullable = false;\n /**\n * Indicates if column is selected by query builder or not.\n */\n this.isSelect = true;\n /**\n * Indicates if column is inserted by default or not.\n */\n this.isInsert = true;\n /**\n * Indicates if column allows updates or not.\n */\n this.isUpdate = true;\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n /**\n * Indicates if this column is an array.\n */\n this.isArray = false;\n /**\n * Indicates if column is virtual. Virtual columns are not mapped to the entity.\n */\n this.isVirtual = false;\n /**\n * Indicates if column is discriminator. Discriminator columns are not mapped to the entity.\n */\n this.isDiscriminator = false;\n /**\n * Indicates if column is tree-level column. Tree-level columns are used in closure entities.\n */\n this.isTreeLevel = false;\n /**\n * Indicates if this column contains an entity creation date.\n */\n this.isCreateDate = false;\n /**\n * Indicates if this column contains an entity update date.\n */\n this.isUpdateDate = false;\n /**\n * Indicates if this column contains an entity delete date.\n */\n this.isDeleteDate = false;\n /**\n * Indicates if this column contains an entity version.\n */\n this.isVersion = false;\n /**\n * Indicates if this column contains an object id.\n */\n this.isObjectId = false;\n /**\n * Indicates if this column is nested set's left column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetLeft = false;\n /**\n * Indicates if this column is nested set's right column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetRight = false;\n /**\n * Indicates if this column is materialized path's path column.\n * Used only in tree entities with materialized path type.\n */\n this.isMaterializedPath = false;\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.referencedColumn = options.referencedColumn;\n if (options.args.target)\n this.target = options.args.target;\n if (options.args.propertyName)\n this.propertyName = options.args.propertyName;\n if (options.args.options.name)\n this.givenDatabaseName = options.args.options.name;\n if (options.args.options.type)\n this.type = options.args.options.type;\n if (options.args.options.length)\n this.length = options.args.options.length ? options.args.options.length.toString() : \"\";\n if (options.args.options.width)\n this.width = options.args.options.width;\n if (options.args.options.charset)\n this.charset = options.args.options.charset;\n if (options.args.options.collation)\n this.collation = options.args.options.collation;\n if (options.args.options.primary)\n this.isPrimary = options.args.options.primary;\n if (options.args.options.default === null) // to make sure default: null is the same as nullable: true\n this.isNullable = true;\n if (options.args.options.nullable !== undefined)\n this.isNullable = options.args.options.nullable;\n if (options.args.options.select !== undefined)\n this.isSelect = options.args.options.select;\n if (options.args.options.insert !== undefined)\n this.isInsert = options.args.options.insert;\n if (options.args.options.update !== undefined)\n this.isUpdate = options.args.options.update;\n if (options.args.options.readonly !== undefined)\n this.isUpdate = !options.args.options.readonly;\n if (options.args.options.comment)\n this.comment = options.args.options.comment;\n if (options.args.options.default !== undefined)\n this.default = options.args.options.default;\n if (options.args.options.onUpdate)\n this.onUpdate = options.args.options.onUpdate;\n if (options.args.options.scale !== null && options.args.options.scale !== undefined)\n this.scale = options.args.options.scale;\n if (options.args.options.zerofill) {\n this.zerofill = options.args.options.zerofill;\n this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n }\n if (options.args.options.unsigned)\n this.unsigned = options.args.options.unsigned;\n if (options.args.options.precision !== undefined)\n this.precision = options.args.options.precision;\n if (options.args.options.enum) {\n if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) {\n this.enum = Object.keys(options.args.options.enum)\n .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them\n .map(function (key) { return options.args.options.enum[key]; });\n }\n else {\n this.enum = options.args.options.enum;\n }\n }\n if (options.args.options.enumName) {\n this.enumName = options.args.options.enumName;\n }\n if (options.args.options.asExpression) {\n this.asExpression = options.args.options.asExpression;\n this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : \"VIRTUAL\";\n }\n if (options.args.options.hstoreType)\n this.hstoreType = options.args.options.hstoreType;\n if (options.args.options.array)\n this.isArray = options.args.options.array;\n if (options.args.mode) {\n this.isVirtual = options.args.mode === \"virtual\";\n this.isTreeLevel = options.args.mode === \"treeLevel\";\n this.isCreateDate = options.args.mode === \"createDate\";\n this.isUpdateDate = options.args.mode === \"updateDate\";\n this.isDeleteDate = options.args.mode === \"deleteDate\";\n this.isVersion = options.args.mode === \"version\";\n this.isObjectId = options.args.mode === \"objectId\";\n }\n if (options.args.options.transformer)\n this.transformer = options.args.options.transformer;\n if (options.args.options.spatialFeatureType)\n this.spatialFeatureType = options.args.options.spatialFeatureType;\n if (options.args.options.srid !== undefined)\n this.srid = options.args.options.srid;\n if (this.isTreeLevel)\n this.type = options.connection.driver.mappedDataTypes.treeLevel;\n if (this.isCreateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.createDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; };\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.createDatePrecision;\n }\n if (this.isUpdateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.updateDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; };\n if (!this.onUpdate)\n this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision;\n }\n if (this.isDeleteDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.deleteDate;\n if (!this.isNullable)\n this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision;\n }\n if (this.isVersion)\n this.type = options.connection.driver.mappedDataTypes.version;\n if (options.closureType)\n this.closureType = options.closureType;\n if (options.nestedSetLeft)\n this.isNestedSetLeft = options.nestedSetLeft;\n if (options.nestedSetRight)\n this.isNestedSetRight = options.nestedSetRight;\n if (options.materializedPath)\n this.isMaterializedPath = options.materializedPath;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates entity id map from the given entity ids array.\n */\n ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) {\n var _a;\n var _this = this;\n if (useDatabaseName === void 0) { useDatabaseName = false; }\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_1 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_1(propertyNames, map[propertyName]);\n return map;\n }\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((_this.generationStrategy === \"increment\" || _this.generationStrategy === \"rowid\") && _this.type === \"bigint\" && value !== null)\n value = String(value);\n map[useDatabaseName ? _this.databaseName : _this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_1(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((this.generationStrategy === \"increment\" || this.generationStrategy === \"rowid\") && this.type === \"bigint\" && value !== null)\n value = String(value);\n return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a;\n }\n };\n /**\n * Extracts column value and returns its column name with this value in a literal object.\n * If column is in embedded (or recursive embedded) it returns complex literal object.\n *\n * Examples what this method can return depend if this column is in embeds.\n * { id: 1 } or { title: \"hello\" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } }\n */\n ColumnMetadata.prototype.getEntityValueMap = function (entity, options) {\n var _a, _b;\n var _this = this;\n var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will.\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) {\n var propertyName = propertyNames.shift();\n if (value === undefined)\n return map;\n if (propertyName) {\n var submap = {};\n extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap);\n if (Object.keys(submap).length > 0) {\n map[propertyName] = submap;\n }\n return map;\n }\n if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null))\n map[_this.propertyName] = value[_this.propertyName];\n return map;\n };\n var map = {};\n extractEmbeddedColumnValue_2(propertyNames, entity, map);\n return Object.keys(map).length > 0 ? map : undefined;\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) {\n var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) {\n var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]);\n if (value === undefined)\n return map;\n return OrmUtils.mergeDeep(map, value);\n }, {});\n if (Object.keys(map).length > 0)\n return _a = {}, _a[this.propertyName] = map, _a;\n return undefined;\n }\n else {\n if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null))\n return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b;\n return undefined;\n }\n }\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n ColumnMetadata.prototype.getEntityValue = function (entity, transform) {\n if (transform === void 0) { transform = false; }\n if (entity === undefined || entity === null)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n var value = undefined;\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_3 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity);\n if (embeddedObject) {\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(entity);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator) && !(relatedEntity instanceof Function)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof FindOperator) && !(entity[this.propertyName] instanceof Function)) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n if (transform && this.transformer)\n value = ApplyValueTransformers.transformTo(this.transformer, value);\n return value;\n };\n /**\n * Sets given entity's column value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n */\n ColumnMetadata.prototype.setEntityValue = function (entity, value) {\n var _this = this;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_4(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n // we write a deep object in this entity only if the column is virtual\n // because if its not virtual it means the user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) {\n if (!(this.propertyName in entity)) {\n entity[this.propertyName] = {};\n }\n entity[this.propertyName][this.referencedColumn.propertyName] = value;\n }\n else {\n entity[this.propertyName] = value;\n }\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n ColumnMetadata.prototype.build = function (connection) {\n this.propertyPath = this.buildPropertyPath();\n this.propertyAliasName = this.propertyPath.replace(\".\", \"_\");\n this.databaseName = this.buildDatabaseName(connection);\n this.databasePath = this.buildDatabasePath();\n this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []);\n return this;\n };\n ColumnMetadata.prototype.buildPropertyPath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.propertyName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName)\n path += \".\" + this.referencedColumn.propertyName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabasePath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.databaseName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName)\n path += \".\" + this.referencedColumn.databaseName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabaseName = function (connection) {\n var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : [];\n if (connection.driver instanceof MongoDriver) // we don't need to include embedded name for the mongodb column names\n propertyNames = [];\n return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames);\n };\n return ColumnMetadata;\n}());\nexport { ColumnMetadata };\n\n//# sourceMappingURL=ColumnMetadata.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.App = void 0;\n/**\n * Eine Klasse, welche als Ursprung für die App genutzt wird\n */\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst SiteManager_1 = require(\"./Context/SiteManager\");\nclass App {\n /**\n * Erstellt eine neue App, speichert ein internes Promise, welches resolved wird, sobald das deviceready-Event gefeuert wird\n */\n constructor() {\n this._resolver = { resolve: null, reject: null };\n this._readyPromise = new Promise(r => document.addEventListener(\"deviceready\", r, false));\n this._deepLinks = {};\n this._siteManager = SiteManager_1.SiteManager.getInstance();\n }\n addDeepLink(link, siteConstructor) {\n this._deepLinks[link] = siteConstructor;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._siteManager) {\n return this._siteManager.startSite(site, args);\n }\n });\n }\n static setLogo(logo) {\n this._logo = logo;\n }\n static getLogo() {\n return this._logo;\n }\n start(startSiteConstructor) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.ready();\n let initialSiteConstructor = startSiteConstructor;\n let params = App._getStartParams();\n this.startingSite = initialSiteConstructor;\n this.startingSiteParameters = params;\n if (Helper_1.Helper.isNotNull(params[\"s\"])) {\n startSiteConstructor = Helper_1.Helper.nonNull(this._deepLinks[params[\"s\"]], startSiteConstructor);\n delete params[\"s\"];\n }\n this.startingSiteParameters = null;\n let siteManager = this._siteManager;\n siteManager.init(\"site\", this._deepLinks);\n Helper_1.Helper.removeAllChildren(document.getElementById(\"site\"));\n siteManager.startSite(startSiteConstructor, params);\n siteManager.setAppEndedListener(manager => {\n manager.startSite(initialSiteConstructor);\n });\n });\n }\n /**\n * Startet die erste Seite\n */\n startStartingSite() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.startingSite) {\n return this.startSite(this.startingSite, this.startingSiteParameters);\n }\n });\n }\n /**\n * Führt die Callback aus, sobald das interne Promise aufgelöst wird und App._promises fertig sind oder gibt das interne Promise zurück\n *\n * @param callback\n * @returns {Promise<*>}\n */\n ready(callback) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._readyPromise.then(() => {\n App._resolver.resolve(this);\n return Promise.all(App._promises);\n });\n if (callback) {\n return promise.then(callback);\n }\n else {\n return promise;\n }\n });\n }\n static addInitialization(callbackOrPromise) {\n if (typeof callbackOrPromise === \"function\") {\n let promise = callbackOrPromise;\n callbackOrPromise = App._mainPromise.then((app) => {\n return promise(app);\n });\n }\n App._promises.push(callbackOrPromise);\n }\n static _getStartParams() {\n return Object.assign(App._extractParams(window.location.search.substr(1)), App._startParams);\n }\n static _extractParams(paramString) {\n if (Helper_1.Helper.isNull(paramString)) {\n return null;\n }\n let result = {}, tmp = [];\n let items = paramString.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n tmp = items[index].split(\"=\");\n if (tmp[0].trim().length > 0) {\n result[tmp[0]] = decodeURIComponent(tmp[1]);\n }\n }\n return result;\n }\n static setStartParam(name, value) {\n this._startParams[name] = value;\n }\n}\nexports.App = App;\nApp._promises = [];\nApp._resolver = {\n resolve: null,\n reject: null,\n};\nApp._mainPromise = new Promise((res, rej) => {\n App._resolver = {\n resolve: res,\n reject: rej,\n };\n});\nApp._startParams = {};\n//# sourceMappingURL=App.js.map","import { __extends } from \"tslib\";\n/**\n */\nvar QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerAlreadyReleasedError, _super);\n function QueryRunnerAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerAlreadyReleasedError.prototype);\n _this.message = \"Query runner already released. Cannot run queries anymore.\";\n return _this;\n }\n return QueryRunnerAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerAlreadyReleasedError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { CannotCreateEntityIdMapError } from \"../error/CannotCreateEntityIdMapError\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Contains all entity metadata.\n */\nvar EntityMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityMetadata(options) {\n /**\n * Children entity metadatas. Used in inheritance patterns.\n */\n this.childEntityMetadatas = [];\n /**\n * All \"inheritance tree\" from a target entity.\n * For example for target Post < ContentModel < Unit it will be an array of [Post, ContentModel, Unit].\n * It also contains child entities for single table inheritance.\n */\n this.inheritanceTree = [];\n /**\n * Table type. Tables can be abstract, closure, junction, embedded, etc.\n */\n this.tableType = \"regular\";\n /**\n * Enables Sqlite \"WITHOUT ROWID\" modifier for the \"CREATE TABLE\" statement\n */\n this.withoutRowid = false;\n /**\n * Indicates if schema will be synchronized for this entity or not.\n */\n this.synchronize = true;\n /**\n * Checks if there any non-nullable column exist in this entity.\n */\n this.hasNonNullableRelations = false;\n /**\n * Indicates if this entity metadata of a junction table, or not.\n * Junction table is a table created by many-to-many relationship.\n *\n * Its also possible to understand if entity is junction via tableType.\n */\n this.isJunction = false;\n /**\n * Checks if this table is a junction table of the closure table.\n * This type is for tables that contain junction metadata of the closure tables.\n */\n this.isClosureJunction = false;\n /**\n * Checks if entity's table has multiple primary columns.\n */\n this.hasMultiplePrimaryKeys = false;\n /**\n * Indicates if this entity metadata has uuid generated columns.\n */\n this.hasUUIDGeneratedColumns = false;\n /**\n * Entity's column metadatas defined by user.\n */\n this.ownColumns = [];\n /**\n * Columns of the entity, including columns that are coming from the embeddeds of this entity.\n */\n this.columns = [];\n /**\n * Ancestor columns used only in closure junction tables.\n */\n this.ancestorColumns = [];\n /**\n * Descendant columns used only in closure junction tables.\n */\n this.descendantColumns = [];\n /**\n * All columns except for virtual columns.\n */\n this.nonVirtualColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of owner entity.\n */\n this.ownerColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of inverse entity.\n */\n this.inverseColumns = [];\n /**\n * Gets the column with generated flag.\n */\n this.generatedColumns = [];\n /**\n * Gets the primary columns.\n */\n this.primaryColumns = [];\n /**\n * Entity's relation metadatas.\n */\n this.ownRelations = [];\n /**\n * Relations of the entity, including relations that are coming from the embeddeds of this entity.\n */\n this.relations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.eagerRelations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.lazyRelations = [];\n /**\n * Gets only one-to-one relations of the entity.\n */\n this.oneToOneRelations = [];\n /**\n * Gets only owner one-to-one relations of the entity.\n */\n this.ownerOneToOneRelations = [];\n /**\n * Gets only one-to-many relations of the entity.\n */\n this.oneToManyRelations = [];\n /**\n * Gets only many-to-one relations of the entity.\n */\n this.manyToOneRelations = [];\n /**\n * Gets only many-to-many relations of the entity.\n */\n this.manyToManyRelations = [];\n /**\n * Gets only owner many-to-many relations of the entity.\n */\n this.ownerManyToManyRelations = [];\n /**\n * Gets only owner one-to-one and many-to-one relations.\n */\n this.relationsWithJoinColumns = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationIds = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationCounts = [];\n /**\n * Entity's foreign key metadatas.\n */\n this.foreignKeys = [];\n /**\n * Entity's embedded metadatas.\n */\n this.embeddeds = [];\n /**\n * All embeddeds - embeddeds from this entity metadata and from all child embeddeds, etc.\n */\n this.allEmbeddeds = [];\n /**\n * Entity's own indices.\n */\n this.ownIndices = [];\n /**\n * Entity's index metadatas.\n */\n this.indices = [];\n /**\n * Entity's unique metadatas.\n */\n this.uniques = [];\n /**\n * Entity's own uniques.\n */\n this.ownUniques = [];\n /**\n * Entity's check metadatas.\n */\n this.checks = [];\n /**\n * Entity's exclusion metadatas.\n */\n this.exclusions = [];\n /**\n * Entity's own listener metadatas.\n */\n this.ownListeners = [];\n /**\n * Entity listener metadatas.\n */\n this.listeners = [];\n /**\n * Listener metadatas with \"AFTER LOAD\" type.\n */\n this.afterLoadListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.beforeInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.afterInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.beforeUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.afterUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.beforeRemoveListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.afterRemoveListeners = [];\n this.connection = options.connection;\n this.inheritanceTree = options.inheritanceTree || [];\n this.inheritancePattern = options.inheritancePattern;\n this.treeType = options.tableTree ? options.tableTree.type : undefined;\n this.treeOptions = options.tableTree ? options.tableTree.options : undefined;\n this.parentClosureEntityMetadata = options.parentClosureEntityMetadata;\n this.tableMetadataArgs = options.args;\n this.target = this.tableMetadataArgs.target;\n this.tableType = this.tableMetadataArgs.type;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new entity.\n */\n EntityMetadata.prototype.create = function (queryRunner) {\n var _this = this;\n // if target is set to a function (e.g. class) that can be created then create it\n var ret;\n if (this.target instanceof Function) {\n ret = new this.target();\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, ret, queryRunner); });\n return ret;\n }\n // otherwise simply return a new empty object\n var newObject = {};\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, newObject, queryRunner); });\n return newObject;\n };\n /**\n * Checks if given entity has an id.\n */\n EntityMetadata.prototype.hasId = function (entity) {\n if (!entity)\n return false;\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined && value !== \"\";\n });\n };\n /**\n * Checks if given entity / object contains ALL primary keys entity must have.\n * Returns true if it contains all of them, false if at least one of them is not defined.\n */\n EntityMetadata.prototype.hasAllPrimaryKeys = function (entity) {\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined;\n });\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n EntityMetadata.prototype.ensureEntityIdMap = function (id) {\n if (id instanceof Object)\n return id;\n if (this.hasMultiplePrimaryKeys)\n throw new CannotCreateEntityIdMapError(this, id);\n return this.primaryColumns[0].createValueMap(id);\n };\n /**\n * Gets primary keys of the entity and returns them in a literal object.\n * For example, for Post{ id: 1, title: \"hello\" } where id is primary it will return { id: 1 }\n * For multiple primary keys it returns multiple keys in object.\n * For primary keys inside embeds it returns complex object literal with keys in them.\n */\n EntityMetadata.prototype.getEntityIdMap = function (entity) {\n if (!entity)\n return undefined;\n return EntityMetadata.getValueMap(entity, this.primaryColumns, { skipNulls: true });\n };\n /**\n * Creates a \"mixed id map\".\n * If entity has multiple primary keys (ids) then it will return just regular id map, like what getEntityIdMap returns.\n * But if entity has a single primary key then it will return just value of the id column of the entity, just value.\n * This is called mixed id map.\n */\n EntityMetadata.prototype.getEntityIdMixedMap = function (entity) {\n if (!entity)\n return entity;\n var idMap = this.getEntityIdMap(entity);\n if (this.hasMultiplePrimaryKeys) {\n return idMap;\n }\n else if (idMap) {\n return this.primaryColumns[0].getEntityValue(idMap); // todo: what about parent primary column?\n }\n return idMap;\n };\n /**\n * Compares two different entities by their ids.\n * Returns true if they match, false otherwise.\n */\n EntityMetadata.prototype.compareEntities = function (firstEntity, secondEntity) {\n var firstEntityIdMap = this.getEntityIdMap(firstEntity);\n if (!firstEntityIdMap)\n return false;\n var secondEntityIdMap = this.getEntityIdMap(secondEntity);\n if (!secondEntityIdMap)\n return false;\n return OrmUtils.compareIds(firstEntityIdMap, secondEntityIdMap);\n };\n /**\n * Finds column with a given property name.\n */\n EntityMetadata.prototype.findColumnWithPropertyName = function (propertyName) {\n return this.columns.find(function (column) { return column.propertyName === propertyName; });\n };\n /**\n * Finds column with a given database name.\n */\n EntityMetadata.prototype.findColumnWithDatabaseName = function (databaseName) {\n return this.columns.find(function (column) { return column.databaseName === databaseName; });\n };\n /**\n * Finds column with a given property path.\n */\n EntityMetadata.prototype.findColumnWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return column;\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns.length === 1)\n return relation.joinColumns[0];\n return undefined;\n };\n /**\n * Finds columns with a given property path.\n * Property path can match a relation, and relations can contain multiple columns.\n */\n EntityMetadata.prototype.findColumnsWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return [column];\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns)\n return relation.joinColumns;\n return [];\n };\n /**\n * Finds relation with the given property path.\n */\n EntityMetadata.prototype.findRelationWithPropertyPath = function (propertyPath) {\n return this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n };\n /**\n * Checks if there is an embedded with a given property path.\n */\n EntityMetadata.prototype.hasEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.some(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Finds embedded with a given property path.\n */\n EntityMetadata.prototype.findEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.find(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Iterates through entity and finds and extracts all values from relations in the entity.\n * If relation value is an array its being flattened.\n */\n EntityMetadata.prototype.extractRelationValuesFromEntity = function (entity, relations) {\n var _this = this;\n var relationsAndValues = [];\n relations.forEach(function (relation) {\n var value = relation.getEntityValue(entity);\n if (Array.isArray(value)) {\n value.forEach(function (subValue) { return relationsAndValues.push([relation, subValue, _this.getInverseEntityMetadata(subValue, relation)]); });\n }\n else if (value) {\n relationsAndValues.push([relation, value, _this.getInverseEntityMetadata(value, relation)]);\n }\n });\n return relationsAndValues;\n };\n EntityMetadata.prototype.getInverseEntityMetadata = function (value, relation) {\n var childEntityMetadata = relation.inverseEntityMetadata.childEntityMetadatas.find(function (metadata) {\n return metadata.target === value.constructor;\n });\n return childEntityMetadata ? childEntityMetadata : relation.inverseEntityMetadata;\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a property paths for a given entity.\n */\n EntityMetadata.createPropertyPath = function (metadata, entity, prefix) {\n var _this = this;\n if (prefix === void 0) { prefix = \"\"; }\n var paths = [];\n Object.keys(entity).forEach(function (key) {\n // check for function is needed in the cases when createPropertyPath used on values containg a function as a value\n // example: .update().set({ name: () => `SUBSTR('', 1, 2)` })\n var parentPath = prefix ? prefix + \".\" + key : key;\n if (metadata.hasEmbeddedWithPropertyPath(parentPath)) {\n var subPaths = _this.createPropertyPath(metadata, entity[key], parentPath);\n paths.push.apply(paths, __spreadArray([], __read(subPaths)));\n }\n else {\n var path = prefix ? prefix + \".\" + key : key;\n paths.push(path);\n }\n });\n return paths;\n };\n /**\n * Finds difference between two entity id maps.\n * Returns items that exist in the first array and absent in the second array.\n */\n EntityMetadata.difference = function (firstIdMaps, secondIdMaps) {\n return firstIdMaps.filter(function (firstIdMap) {\n return !secondIdMaps.find(function (secondIdMap) { return OrmUtils.compareIds(firstIdMap, secondIdMap); });\n });\n };\n /**\n * Creates value map from the given values and columns.\n * Examples of usages are primary columns map and join columns map.\n */\n EntityMetadata.getValueMap = function (entity, columns, options) {\n return columns.reduce(function (map, column) {\n var value = column.getEntityValueMap(entity, options);\n // make sure that none of the values of the columns are not missing\n if (map === undefined || value === null || value === undefined)\n return undefined;\n return column.isObjectId ? Object.assign(map, value) : OrmUtils.mergeDeep(map, value);\n }, {});\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n EntityMetadata.prototype.build = function () {\n var namingStrategy = this.connection.namingStrategy;\n var entityPrefix = this.connection.options.entityPrefix;\n this.engine = this.tableMetadataArgs.engine;\n this.database = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.database : this.tableMetadataArgs.database;\n if (this.tableMetadataArgs.schema) {\n this.schema = this.tableMetadataArgs.schema;\n }\n else if ((this.tableMetadataArgs.type === \"entity-child\") && this.parentEntityMetadata) {\n this.schema = this.parentEntityMetadata.schema;\n }\n else {\n this.schema = this.connection.options.schema;\n }\n this.givenTableName = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.givenTableName : this.tableMetadataArgs.name;\n this.synchronize = this.tableMetadataArgs.synchronize === false ? false : true;\n this.targetName = this.tableMetadataArgs.target instanceof Function ? this.tableMetadataArgs.target.name : this.tableMetadataArgs.target;\n if (this.tableMetadataArgs.type === \"closure-junction\") {\n this.tableNameWithoutPrefix = namingStrategy.closureJunctionTableName(this.givenTableName);\n }\n else if (this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata) {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.parentEntityMetadata.targetName, this.parentEntityMetadata.givenTableName);\n }\n else {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.targetName, this.givenTableName);\n if (this.connection.driver.maxAliasLength && this.connection.driver.maxAliasLength > 0 && this.tableNameWithoutPrefix.length > this.connection.driver.maxAliasLength) {\n this.tableNameWithoutPrefix = shorten(this.tableNameWithoutPrefix, { separator: \"_\", segmentLength: 3 });\n }\n }\n this.tableName = entityPrefix ? namingStrategy.prefixTableName(entityPrefix, this.tableNameWithoutPrefix) : this.tableNameWithoutPrefix;\n this.target = this.target ? this.target : this.tableName;\n this.name = this.targetName ? this.targetName : this.tableName;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid === true ? true : false;\n this.tablePath = this.buildTablePath();\n this.schemaPath = this.buildSchemaPath();\n this.orderBy = (this.tableMetadataArgs.orderBy instanceof Function) ? this.tableMetadataArgs.orderBy(this.propertiesMap) : this.tableMetadataArgs.orderBy; // todo: is propertiesMap available here? Looks like its not\n this.isJunction = this.tableMetadataArgs.type === \"closure-junction\" || this.tableMetadataArgs.type === \"junction\";\n this.isClosureJunction = this.tableMetadataArgs.type === \"closure-junction\";\n };\n /**\n * Registers a new column in the entity and recomputes all depend properties.\n */\n EntityMetadata.prototype.registerColumn = function (column) {\n if (this.ownColumns.indexOf(column) !== -1)\n return;\n this.ownColumns.push(column);\n this.columns = this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, this.ownColumns);\n this.primaryColumns = this.columns.filter(function (column) { return column.isPrimary; });\n this.hasMultiplePrimaryKeys = this.primaryColumns.length > 1;\n this.hasUUIDGeneratedColumns = this.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n this.propertiesMap = this.createPropertiesMap();\n if (this.childEntityMetadatas)\n this.childEntityMetadatas.forEach(function (entityMetadata) { return entityMetadata.registerColumn(column); });\n };\n /**\n * Creates a special object - all columns and relations of the object (plus columns and relations from embeds)\n * in a special format - { propertyName: propertyName }.\n *\n * example: Post{ id: number, name: string, counterEmbed: { count: number }, category: Category }.\n * This method will create following object:\n * { id: \"id\", counterEmbed: { count: \"counterEmbed.count\" }, category: \"category\" }\n */\n EntityMetadata.prototype.createPropertiesMap = function () {\n var map = {};\n this.columns.forEach(function (column) { return OrmUtils.mergeDeep(map, column.createValueMap(column.propertyPath)); });\n this.relations.forEach(function (relation) { return OrmUtils.mergeDeep(map, relation.createValueMap(relation.propertyPath)); });\n return map;\n };\n /**\n * Builds table path using database name, schema name and table name.\n */\n EntityMetadata.prototype.buildTablePath = function () {\n var tablePath = this.tableName;\n if (this.schema && ((this.connection.driver instanceof OracleDriver) || (this.connection.driver instanceof PostgresDriver) || (this.connection.driver instanceof SqlServerDriver) || (this.connection.driver instanceof SapDriver))) {\n tablePath = this.schema + \".\" + tablePath;\n }\n if (this.database && !(this.connection.driver instanceof PostgresDriver)) {\n if (!this.schema && this.connection.driver instanceof SqlServerDriver) {\n tablePath = this.database + \"..\" + tablePath;\n }\n else {\n tablePath = this.database + \".\" + tablePath;\n }\n }\n return tablePath;\n };\n /**\n * Builds table path using schema name and database name.\n */\n EntityMetadata.prototype.buildSchemaPath = function () {\n if (!this.schema)\n return undefined;\n return this.database && !(this.connection.driver instanceof PostgresDriver) ? this.database + \".\" + this.schema : this.schema;\n };\n return EntityMetadata;\n}());\nexport { EntityMetadata };\n\n//# sourceMappingURL=EntityMetadata.js.map\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","import { __extends } from \"tslib\";\n/**\n * Thrown if some required driver's option is not set.\n */\nvar DriverOptionNotSetError = /** @class */ (function (_super) {\n __extends(DriverOptionNotSetError, _super);\n function DriverOptionNotSetError(optionName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverOptionNotSetError\";\n Object.setPrototypeOf(_this, DriverOptionNotSetError.prototype);\n _this.message = \"Driver option (\" + optionName + \") is not set. Please set it to perform connection to the database.\";\n return _this;\n }\n return DriverOptionNotSetError;\n}(Error));\nexport { DriverOptionNotSetError };\n\n//# sourceMappingURL=DriverOptionNotSetError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table index stored in this class.\n */\nvar TableIndex = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableIndex(options) {\n /**\n * Columns included in this index.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.isUnique = !!options.isUnique;\n this.isSpatial = !!options.isSpatial;\n this.isFulltext = !!options.isFulltext;\n this.parser = options.parser;\n this.where = options.where ? options.where : \"\";\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this index with exactly same properties.\n */\n TableIndex.prototype.clone = function () {\n return new TableIndex({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n isUnique: this.isUnique,\n isSpatial: this.isSpatial,\n isFulltext: this.isFulltext,\n parser: this.parser,\n where: this.where\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates index from the index metadata object.\n */\n TableIndex.create = function (indexMetadata) {\n return new TableIndex({\n name: indexMetadata.name,\n columnNames: indexMetadata.columns.map(function (column) { return column.databaseName; }),\n isUnique: indexMetadata.isUnique,\n isSpatial: indexMetadata.isSpatial,\n isFulltext: indexMetadata.isFulltext,\n parser: indexMetadata.parser,\n where: indexMetadata.where\n });\n };\n return TableIndex;\n}());\nexport { TableIndex };\n\n//# sourceMappingURL=TableIndex.js.map\n","import { __assign, __extends } from \"tslib\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Thrown when query execution has failed.\n*/\nvar QueryFailedError = /** @class */ (function (_super) {\n __extends(QueryFailedError, _super);\n function QueryFailedError(query, parameters, driverError) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, QueryFailedError.prototype);\n _this.message = driverError.toString()\n .replace(/^error: /, \"\")\n .replace(/^Error: /, \"\")\n .replace(/^Request/, \"\");\n ObjectUtils.assign(_this, __assign(__assign({}, driverError), { name: \"QueryFailedError\", query: query, parameters: parameters || [] }));\n return _this;\n }\n return QueryFailedError;\n}(Error));\nexport { QueryFailedError };\n\n//# sourceMappingURL=QueryFailedError.js.map\n","import { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n */\nvar Alias = /** @class */ (function () {\n function Alias(alias) {\n ObjectUtils.assign(this, alias || {});\n }\n Object.defineProperty(Alias.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"hasMetadata\", {\n get: function () {\n return !!this._metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"metadata\", {\n get: function () {\n if (!this._metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.name + \"\\\"\");\n return this._metadata;\n },\n set: function (metadata) {\n this._metadata = metadata;\n },\n enumerable: false,\n configurable: true\n });\n return Alias;\n}());\nexport { Alias };\n\n//# sourceMappingURL=Alias.js.map\n","import { __assign, __read } from \"tslib\";\nimport { Alias } from \"./Alias\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nvar QueryExpressionMap = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryExpressionMap(connection) {\n this.connection = connection;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n this.queryEntity = false;\n /**\n * All aliases (including main alias) used in the query.\n */\n this.aliases = [];\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n this.queryType = \"select\";\n /**\n * Data needs to be SELECT-ed.\n */\n this.selects = [];\n /**\n * Whether SELECT is DISTINCT.\n */\n this.selectDistinct = false;\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n this.selectDistinctOn = [];\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n this.extraReturningColumns = [];\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n this.onConflict = \"\";\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n this.onIgnore = false;\n /**\n * JOIN queries.\n */\n this.joinAttributes = [];\n /**\n * RelationId queries.\n */\n this.relationIdAttributes = [];\n /**\n * Relation count queries.\n */\n this.relationCountAttributes = [];\n /**\n * WHERE queries.\n */\n this.wheres = [];\n /**\n * HAVING queries.\n */\n this.havings = [];\n /**\n * ORDER BY queries.\n */\n this.orderBys = {};\n /**\n * GROUP BY queries.\n */\n this.groupBys = [];\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n this.withDeleted = false;\n /**\n * Parameters used to be escaped in final query.\n */\n this.parameters = {};\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n this.disableEscaping = true;\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n this.enableRelationIdValues = false;\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n this.extraAppendedAndWhereCondition = \"\";\n /**\n * Indicates if query builder creates a subquery.\n */\n this.subQuery = false;\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n this.aliasNamePrefixingEnabled = true;\n /**\n * Indicates if query result cache is enabled or not.\n */\n this.cache = false;\n /**\n * Options that define QueryBuilder behaviour.\n */\n this.options = [];\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n this.insertColumns = [];\n /**\n * Used if user wants to update or delete a specific entities.\n */\n this.whereEntities = [];\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n this.updateEntity = true;\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n this.callListeners = true;\n /**\n * Indicates if query must be wrapped into transaction.\n */\n this.useTransaction = false;\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n this.nativeParameters = {};\n }\n Object.defineProperty(QueryExpressionMap.prototype, \"allOrderBys\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get: function () {\n var _this = this;\n if (!Object.keys(this.orderBys).length && this.mainAlias.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n var entityOrderBy_1 = this.mainAlias.metadata.orderBy || {};\n return Object.keys(entityOrderBy_1).reduce(function (orderBy, key) {\n orderBy[_this.mainAlias.name + \".\" + key] = entityOrderBy_1[key];\n return orderBy;\n }, {});\n }\n return this.orderBys;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.setMainAlias = function (alias) {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n // set new main alias\n this.mainAlias = alias;\n return alias;\n };\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.createAlias = function (options) {\n var aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n var alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n this.aliases.push(alias);\n return alias;\n };\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n QueryExpressionMap.prototype.findAliasByName = function (aliasName) {\n var alias = this.aliases.find(function (alias) { return alias.name === aliasName; });\n if (!alias)\n throw new Error(\"\\\"\" + aliasName + \"\\\" alias was not found. Maybe you forgot to join it?\");\n return alias;\n };\n QueryExpressionMap.prototype.findColumnByAliasExpression = function (aliasExpression) {\n var _a = __read(aliasExpression.split(\".\"), 2), aliasName = _a[0], propertyPath = _a[1];\n var alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n };\n Object.defineProperty(QueryExpressionMap.prototype, \"relationMetadata\", {\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get: function () {\n if (!this.mainAlias)\n throw new Error(\"Entity to work with is not specified!\"); // todo: better message\n var relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \" + this.relationPropertyPath + \" was not found in entity \" + this.mainAlias.name); // todo: better message\n return relationMetadata;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n QueryExpressionMap.prototype.clone = function () {\n var _this = this;\n var map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(function (select) { return select; });\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(function (alias) { return map.aliases.push(new Alias(alias)); });\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(function (join) { return new JoinAttribute(_this.connection, _this, join); });\n map.relationIdAttributes = this.relationIdAttributes.map(function (relationId) { return new RelationIdAttribute(_this, relationId); });\n map.relationCountAttributes = this.relationCountAttributes.map(function (relationCount) { return new RelationCountAttribute(_this, relationCount); });\n map.wheres = this.wheres.map(function (where) { return (__assign({}, where)); });\n map.havings = this.havings.map(function (having) { return (__assign({}, having)); });\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(function (groupBy) { return groupBy; });\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.lockTables = this.lockTables;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n map.comment = this.comment;\n return map;\n };\n return QueryExpressionMap;\n}());\nexport { QueryExpressionMap };\n\n//# sourceMappingURL=QueryExpressionMap.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { QueryExpressionMap } from \"./QueryExpressionMap\";\nimport { Brackets } from \"./Brackets\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { EntitySchema } from \"../\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { In } from \"../find-options/operator/In\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar QueryBuilder = /** @class */ (function () {\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n function QueryBuilder(connectionOrQueryBuilder, queryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n }\n else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n Object.defineProperty(QueryBuilder.prototype, \"alias\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the main alias string used in this query builder.\n */\n get: function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Main alias is not set\"); // todo: better exception\n return this.expressionMap.mainAlias.name;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n QueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n // loading it dynamically because of circular issue\n var SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this;\n return new SelectQueryBuilderCls(this);\n };\n /**\n * Creates INSERT query.\n */\n QueryBuilder.prototype.insert = function () {\n this.expressionMap.queryType = \"insert\";\n // loading it dynamically because of circular issue\n var InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this;\n return new InsertQueryBuilderCls(this);\n };\n /**\n * Creates UPDATE query and applies given update values.\n */\n QueryBuilder.prototype.update = function (entityOrTableNameUpdateSet, maybeUpdateSet) {\n var updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n var mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n // loading it dynamically because of circular issue\n var UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this;\n return new UpdateQueryBuilderCls(this);\n };\n /**\n * Creates DELETE query.\n */\n QueryBuilder.prototype.delete = function () {\n this.expressionMap.queryType = \"delete\";\n // loading it dynamically because of circular issue\n var DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this;\n return new DeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.softDelete = function () {\n this.expressionMap.queryType = \"soft-delete\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.restore = function () {\n this.expressionMap.queryType = \"restore\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n QueryBuilder.prototype.relation = function (entityTargetOrPropertyPath, maybePropertyPath) {\n var entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n var propertyPath = arguments.length === 2 ? maybePropertyPath : entityTargetOrPropertyPath;\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n if (entityTarget) {\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n // loading it dynamically because of circular issue\n var RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this;\n return new RelationQueryBuilderCls(this);\n };\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n QueryBuilder.prototype.hasRelation = function (target, relation) {\n var entityMetadata = this.connection.getMetadata(target);\n var relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(function (relation) {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n };\n /**\n * Sets parameter name and its value.\n */\n QueryBuilder.prototype.setParameter = function (key, value) {\n this.expressionMap.parameters[key] = value;\n return this;\n };\n /**\n * Adds all parameters from the given object.\n */\n QueryBuilder.prototype.setParameters = function (parameters) {\n var _this = this;\n // remove function parameters\n Object.keys(parameters).forEach(function (key) {\n if (parameters[key] instanceof Function) {\n throw new Error(\"Function parameter isn't supported in the parameters. Please check \\\"\" + key + \"\\\" parameter.\");\n }\n });\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n Object.keys(parameters).forEach(function (key) { return _this.setParameter(key, parameters[key]); });\n return this;\n };\n /**\n * Adds native parameters from the given object.\n */\n QueryBuilder.prototype.setNativeParameters = function (parameters) {\n var _this = this;\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n Object.keys(parameters).forEach(function (key) {\n _this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n };\n /**\n * Gets all parameters.\n */\n QueryBuilder.prototype.getParameters = function () {\n var parameters = Object.assign({}, this.expressionMap.parameters);\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var values = metadata.childEntityMetadatas\n .filter(function (childMetadata) { return childMetadata.discriminatorColumn; })\n .map(function (childMetadata) { return childMetadata.discriminatorValue; });\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n return parameters;\n };\n /**\n * Prints sql to stdout using console.log.\n */\n QueryBuilder.prototype.printSql = function () {\n var _a = __read(this.getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n this.connection.logger.logQuery(query, parameters);\n return this;\n };\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n QueryBuilder.prototype.getSql = function () {\n return this.getQueryAndParameters()[0];\n };\n /**\n * Gets query to be executed with all parameters used in it.\n */\n QueryBuilder.prototype.getQueryAndParameters = function () {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n var query = this.getQuery();\n var parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n QueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 3, 8]);\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 2: return [2 /*return*/, _b.sent()]; // await is needed here because we are using finally\n case 3:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n if (!(this.connection.driver instanceof SqljsDriver)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 6:\n _b.sent();\n _b.label = 7;\n case 7: return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n QueryBuilder.prototype.createQueryBuilder = function () {\n return new this.constructor(this.connection, this.queryRunner);\n };\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n QueryBuilder.prototype.clone = function () {\n return new this.constructor(this);\n };\n /**\n * Includes a Query comment in the query builder. This is helpful for debugging purposes,\n * such as finding a specific query in the database server's logs, or for categorization using\n * an APM product.\n */\n QueryBuilder.prototype.comment = function (comment) {\n this.expressionMap.comment = comment;\n return this;\n };\n /**\n * Disables escaping.\n */\n QueryBuilder.prototype.disableEscaping = function () {\n this.expressionMap.disableEscaping = false;\n return this;\n };\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n QueryBuilder.prototype.escape = function (name) {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n };\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n QueryBuilder.prototype.setQueryRunner = function (queryRunner) {\n this.queryRunner = queryRunner;\n return this;\n };\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n QueryBuilder.prototype.callListeners = function (enabled) {\n this.expressionMap.callListeners = enabled;\n return this;\n };\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n QueryBuilder.prototype.useTransaction = function (enabled) {\n this.expressionMap.useTransaction = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n QueryBuilder.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.escape(i);\n }).join(\".\");\n };\n /**\n * Gets name of the table where insert should be performed.\n */\n QueryBuilder.prototype.getMainTableName = function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Entity where values should be inserted is not specified. Call \\\"qb.into(entity)\\\" method to specify it.\");\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n return this.expressionMap.mainAlias.tablePath;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n QueryBuilder.prototype.createFromAlias = function (entityTarget, aliasName) {\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n var metadata = this.connection.getMetadata(entityTarget);\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n }\n else {\n if (typeof entityTarget === \"string\") {\n var isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n var subQueryBuilder = entityTarget(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n var subquery = subQueryBuilder.getQuery();\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n };\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n QueryBuilder.prototype.replacePropertyNames = function (statement) {\n var e_1, _a;\n var _this = this;\n // Escape special characters in regular expressions\n // Per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n var escapeRegExp = function (s) { return s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); };\n var _loop_1 = function (alias) {\n var e_2, _d, e_3, _e, e_4, _f, e_5, _g, e_6, _h, e_7, _j;\n if (!alias.hasMetadata)\n return \"continue\";\n var replaceAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? alias.name + \".\" : \"\";\n var replacementAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? this_1.escape(alias.name) + \".\" : \"\";\n var replacements = {};\n try {\n // Insert & overwrite the replacements from least to most relevant in our replacements object.\n // To do this we iterate and overwrite in the order of relevance.\n // Least to Most Relevant:\n // * Relation Property Path to first join column key\n // * Relation Property Path + Column Path\n // * Column Database Name\n // * Column Propety Name\n // * Column Property Path\n for (var _k = (e_2 = void 0, __values(alias.metadata.relations)), _l = _k.next(); !_l.done; _l = _k.next()) {\n var relation = _l.value;\n if (relation.joinColumns.length > 0)\n replacements[relation.propertyPath] = relation.joinColumns[0].databaseName;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_d = _k.return)) _d.call(_k);\n }\n finally { if (e_2) throw e_2.error; }\n }\n try {\n for (var _m = (e_3 = void 0, __values(alias.metadata.relations)), _o = _m.next(); !_o.done; _o = _m.next()) {\n var relation = _o.value;\n try {\n for (var _p = (e_4 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns)), __read(relation.inverseJoinColumns)))), _q = _p.next(); !_q.done; _q = _p.next()) {\n var joinColumn = _q.value;\n var propertyKey = relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n replacements[propertyKey] = joinColumn.databaseName;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_q && !_q.done && (_f = _p.return)) _f.call(_p);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_e = _m.return)) _e.call(_m);\n }\n finally { if (e_3) throw e_3.error; }\n }\n try {\n for (var _r = (e_5 = void 0, __values(alias.metadata.columns)), _s = _r.next(); !_s.done; _s = _r.next()) {\n var column = _s.value;\n replacements[column.databaseName] = column.databaseName;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_s && !_s.done && (_g = _r.return)) _g.call(_r);\n }\n finally { if (e_5) throw e_5.error; }\n }\n try {\n for (var _t = (e_6 = void 0, __values(alias.metadata.columns)), _u = _t.next(); !_u.done; _u = _t.next()) {\n var column = _u.value;\n replacements[column.propertyName] = column.databaseName;\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_u && !_u.done && (_h = _t.return)) _h.call(_t);\n }\n finally { if (e_6) throw e_6.error; }\n }\n try {\n for (var _v = (e_7 = void 0, __values(alias.metadata.columns)), _w = _v.next(); !_w.done; _w = _v.next()) {\n var column = _w.value;\n replacements[column.propertyPath] = column.databaseName;\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (_w && !_w.done && (_j = _v.return)) _j.call(_v);\n }\n finally { if (e_7) throw e_7.error; }\n }\n var replacementKeys = Object.keys(replacements);\n if (replacementKeys.length) {\n statement = statement.replace(new RegExp(\n // Avoid a lookbehind here since it's not well supported\n \"([ =(]|^.{0})\" +\n (escapeRegExp(replaceAliasNamePrefix) + \"(\" + replacementKeys.map(escapeRegExp).join(\"|\") + \")\") +\n \"(?=[ =),]|.{0}$)\", \"gm\"), function (_, pre, p) {\n return \"\" + pre + replacementAliasNamePrefix + _this.escape(replacements[p]);\n });\n }\n };\n var this_1 = this;\n try {\n for (var _b = __values(this.expressionMap.aliases), _c = _b.next(); !_c.done; _c = _b.next()) {\n var alias = _c.value;\n _loop_1(alias);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return statement;\n };\n QueryBuilder.prototype.createComment = function () {\n if (!this.expressionMap.comment) {\n return \"\";\n }\n // ANSI SQL 2003 support C style comments - comments that start with `/*` and end with `*/`\n // In some dialects query nesting is available - but not all. Because of this, we'll need\n // to scrub \"ending\" characters from the SQL but otherwise we can leave everything else\n // as-is and it should be valid.\n return \"/* \" + this.expressionMap.comment.replace(\"*/\", \"\") + \" */ \";\n };\n /**\n * Creates \"WHERE\" expression.\n */\n QueryBuilder.prototype.createWhereExpression = function () {\n var conditionsArray = [];\n var whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n var condition = this.replacePropertyNames(column) + \" IS NULL\";\n conditionsArray.push(condition);\n }\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n var condition = this.replacePropertyNames(column) + \" IN (:...discriminatorColumnValues)\";\n conditionsArray.push(condition);\n }\n }\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n var condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n if (!conditionsArray.length) {\n return \"\";\n }\n else if (conditionsArray.length === 1) {\n return \" WHERE \" + conditionsArray[0];\n }\n else {\n return \" WHERE ( \" + conditionsArray.join(\" ) AND ( \") + \" )\";\n }\n };\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n QueryBuilder.prototype.createReturningExpression = function () {\n var _this = this;\n var columns = this.getReturningColumns();\n var driver = this.connection.driver;\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push.apply(columns, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (column) {\n return columns.indexOf(column) === -1;\n }))));\n }\n if (columns.length) {\n var columnsExpression = columns.map(function (column) {\n var name = _this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (_this.expressionMap.queryType === \"insert\" || _this.expressionMap.queryType === \"update\" || _this.expressionMap.queryType === \"soft-delete\" || _this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n }\n else {\n return _this.escape(_this.getMainTableName()) + \".\" + name;\n }\n }\n else {\n return name;\n }\n }).join(\", \");\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(function (column) {\n var parameterName = \"output_\" + column.databaseName;\n _this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return _this.connection.driver.createParameter(parameterName, Object.keys(_this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n return columnsExpression;\n }\n else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n return \"\";\n };\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n QueryBuilder.prototype.getReturningColumns = function () {\n var _this = this;\n var columns = [];\n if (Array.isArray(this.expressionMap.returning)) {\n this.expressionMap.returning.forEach(function (columnName) {\n if (_this.expressionMap.mainAlias.hasMetadata) {\n columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName))));\n }\n });\n }\n return columns;\n };\n /**\n * Concatenates all added where expressions into one string.\n */\n QueryBuilder.prototype.createWhereExpressionString = function () {\n var _this = this;\n return this.expressionMap.wheres.map(function (where, index) {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(where.condition);\n default:\n return _this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n };\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n QueryBuilder.prototype.createWhereIdsExpression = function (ids) {\n var _a;\n var _this = this;\n var metadata = this.expressionMap.mainAlias.metadata;\n var normalized = (Array.isArray(ids) ? ids : [ids]).map(function (id) { return metadata.ensureEntityIdMap(id); });\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0) {\n var primaryColumn_1 = metadata.primaryColumns[0];\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn_1.transformer) {\n return this.computeWhereParameter((_a = {},\n _a[primaryColumn_1.propertyName] = In(normalized.map(function (id) { return primaryColumn_1.getEntityValue(id, false); })),\n _a));\n }\n }\n // create shortcuts for better readability\n var alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias.name) + \".\" : \"\";\n var parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n var whereStrings = normalized.map(function (id, index) {\n var whereSubStrings = [];\n metadata.primaryColumns.forEach(function (primaryColumn, secondIndex) {\n var parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + _this.escape(primaryColumn.databaseName) + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex));\n _this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(function (whereString) { return \"(\" + whereString + \")\"; }).join(\" OR \") + \")\"\n : whereStrings[0];\n };\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n QueryBuilder.prototype.computeWhereParameter = function (where) {\n var _this = this;\n if (typeof where === \"string\")\n return where;\n if (where instanceof Brackets) {\n var whereQueryBuilder = this.createQueryBuilder();\n whereQueryBuilder.expressionMap.mainAlias = this.expressionMap.mainAlias;\n whereQueryBuilder.expressionMap.aliasNamePrefixingEnabled = this.expressionMap.aliasNamePrefixingEnabled;\n whereQueryBuilder.expressionMap.nativeParameters = this.expressionMap.nativeParameters;\n where.whereFactory(whereQueryBuilder);\n var whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n }\n else if (where instanceof Function) {\n return where(this);\n }\n else if (where instanceof Object) {\n var wheres = Array.isArray(where) ? where : [where];\n var andConditions = void 0;\n var parameterIndex_1 = Object.keys(this.expressionMap.nativeParameters).length;\n if (this.expressionMap.mainAlias.hasMetadata) {\n andConditions = wheres.map(function (where, whereIndex) {\n var propertyPaths = EntityMetadata.createPropertyPath(_this.expressionMap.mainAlias.metadata, where);\n return propertyPaths.map(function (propertyPath, propertyIndex) {\n var columns = _this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(propertyPath);\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n return columns.map(function (column, columnIndex) {\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + propertyPath : column.propertyPath;\n var parameterValue = column.getEntityValue(where, true);\n var parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n var parameterBaseCount = Object.keys(_this.expressionMap.nativeParameters).filter(function (x) { return x.startsWith(parameterName); }).length;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else if (parameterValue instanceof FindOperator) {\n var parameters_1 = [];\n if (parameterValue.useParameter) {\n if (parameterValue.objectLiteralParameters) {\n _this.setParameters(parameterValue.objectLiteralParameters);\n }\n else {\n var realParameterValues = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach(function (realParameterValue, realParameterValueIndex) {\n _this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex_1++;\n parameters_1.push(_this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex_1 - 1));\n });\n }\n }\n return _this.computeFindOperatorExpression(parameterValue, aliasPath, parameters_1);\n }\n else {\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex_1++;\n var parameter = _this.connection.driver.createParameter(parameterName, parameterIndex_1 - 1);\n return aliasPath + \" = \" + parameter;\n }\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n });\n }\n else {\n andConditions = wheres.map(function (where, whereIndex) {\n return Object.keys(where).map(function (key, parameterIndex) {\n var parameterValue = where[key];\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + key : key;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else {\n var parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return aliasPath + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n }\n }).join(\" AND \");\n });\n }\n if (andConditions.length > 1)\n return andConditions.map(function (where) { return \"(\" + where + \")\"; }).join(\" OR \");\n return andConditions.join(\"\");\n }\n return \"\";\n };\n /**\n * Gets SQL needs to be inserted into final query.\n */\n QueryBuilder.prototype.computeFindOperatorExpression = function (operator, aliasPath, parameters) {\n var driver = this.connection.driver;\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return \"NOT(\" + this.computeFindOperatorExpression(operator.child, aliasPath, parameters) + \")\";\n }\n else {\n return aliasPath + \" != \" + parameters[0];\n }\n case \"lessThan\":\n return aliasPath + \" < \" + parameters[0];\n case \"lessThanOrEqual\":\n return aliasPath + \" <= \" + parameters[0];\n case \"moreThan\":\n return aliasPath + \" > \" + parameters[0];\n case \"moreThanOrEqual\":\n return aliasPath + \" >= \" + parameters[0];\n case \"equal\":\n return aliasPath + \" = \" + parameters[0];\n case \"ilike\":\n if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n return aliasPath + \" ILIKE \" + parameters[0];\n }\n return \"UPPER(\" + aliasPath + \") LIKE UPPER(\" + parameters[0] + \")\";\n case \"like\":\n return aliasPath + \" LIKE \" + parameters[0];\n case \"between\":\n return aliasPath + \" BETWEEN \" + parameters[0] + \" AND \" + parameters[1];\n case \"in\":\n if (parameters.length === 0) {\n return \"0=1\";\n }\n return aliasPath + \" IN (\" + parameters.join(\", \") + \")\";\n case \"any\":\n return aliasPath + \" = ANY(\" + parameters[0] + \")\";\n case \"isNull\":\n return aliasPath + \" IS NULL\";\n case \"raw\":\n if (operator.getSql) {\n return operator.getSql(aliasPath);\n }\n else {\n return aliasPath + \" = \" + operator.value;\n }\n }\n throw new TypeError(\"Unsupported FindOperator \" + FindOperator.constructor.name);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n QueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner();\n };\n return QueryBuilder;\n}());\nexport { QueryBuilder };\n\n//# sourceMappingURL=QueryBuilder.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsQueryRunner } from \"./SqljsQueryRunner\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nvar SqljsDriver = /** @class */ (function (_super) {\n __extends(SqljsDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (_this.options.autoSave && !_this.options.location && !_this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(\"location or autoSaveCallback\");\n }\n // load sql.js package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n SqljsDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Closes connection with database.\n */\n SqljsDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection.close();\n ok();\n }\n catch (e) {\n fail(e);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n SqljsDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n return this.queryRunner;\n };\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n SqljsDriver.prototype.load = function (fileNameOrLocalStorageOrData, checkIfFileOrLocalStorageExists) {\n if (checkIfFileOrLocalStorageExists === void 0) { checkIfFileOrLocalStorageExists = true; }\n return __awaiter(this, void 0, void 0, function () {\n var database, localStorageContent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(typeof fileNameOrLocalStorageOrData === \"string\")) return [3 /*break*/, 8];\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 1];\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return [2 /*return*/, this.createDatabaseConnectionWithImport(database)];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n return [3 /*break*/, 7];\n case 1:\n localStorageContent = null;\n if (!this.options.useLocalForage) return [3 /*break*/, 5];\n if (!window.localforage) return [3 /*break*/, 3];\n return [4 /*yield*/, window.localforage.getItem(fileNameOrLocalStorageOrData)];\n case 2:\n localStorageContent = _a.sent();\n return [3 /*break*/, 4];\n case 3: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 4: return [3 /*break*/, 6];\n case 5:\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n _a.label = 6;\n case 6:\n if (localStorageContent != null) {\n // localStorage value exists.\n return [2 /*return*/, this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent))];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n _a.label = 7;\n case 7: return [3 /*break*/, 9];\n case 8: return [2 /*return*/, this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData)];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n SqljsDriver.prototype.save = function (location) {\n return __awaiter(this, void 0, void 0, function () {\n var path, content, e_1, database, databaseArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!location && !this.options.location) {\n throw new Error(\"No location is set, specify a location parameter or add the location option to your configuration\");\n }\n path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n content = Buffer.from(this.databaseConnection.export());\n return [4 /*yield*/, PlatformTools.writeFile(path, content)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n throw new Error(\"Could not save database, error: \" + e_1);\n case 4: return [3 /*break*/, 10];\n case 5:\n database = this.databaseConnection.export();\n databaseArray = [].slice.call(database);\n if (!this.options.useLocalForage) return [3 /*break*/, 9];\n if (!window.localforage) return [3 /*break*/, 7];\n return [4 /*yield*/, window.localforage.setItem(path, JSON.stringify(databaseArray))];\n case 6:\n _a.sent();\n return [3 /*break*/, 8];\n case 7: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 8: return [3 /*break*/, 10];\n case 9:\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n SqljsDriver.prototype.autoSave = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.options.autoSave) return [3 /*break*/, 4];\n if (!this.options.autoSaveCallback) return [3 /*break*/, 2];\n return [4 /*yield*/, this.options.autoSaveCallback(this.export())];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.save()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database as Uint8Array.\n */\n SqljsDriver.prototype.export = function () {\n return this.databaseConnection.export();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n SqljsDriver.prototype.createGeneratedMap = function (metadata, insertResult) {\n var _this = this;\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n var query = \"SELECT last_insert_rowid()\";\n try {\n var result = _this.databaseConnection.exec(query);\n _this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n _this.connection.logger.logQueryError(e, query, []);\n }\n }\n return map;\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n SqljsDriver.prototype.createDatabaseConnection = function () {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n return this.createDatabaseConnectionWithImport(this.options.database);\n };\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n SqljsDriver.prototype.createDatabaseConnectionWithImport = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n var isLegacyVersion, sqlite, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isLegacyVersion = typeof this.sqlite.Database === \"function\";\n if (!isLegacyVersion) return [3 /*break*/, 1];\n _a = this.sqlite;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.sqlite(this.options.sqlJsConfig)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n sqlite = _a;\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n // Enable foreign keys for database\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.databaseConnection.exec(\"PRAGMA foreign_keys = ON;\");\n ok(_this.databaseConnection);\n }\n catch (e) {\n fail(e);\n }\n })];\n }\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n SqljsDriver.prototype.loadDependencies = function () {\n if (PlatformTools.type === \"browser\") {\n this.sqlite = window.SQL;\n }\n else {\n try {\n this.sqlite = PlatformTools.load(\"sql.js\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n };\n return SqljsDriver;\n}(AbstractSqliteDriver));\nexport { SqljsDriver };\n\n//# sourceMappingURL=SqljsDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeStoragePromise = void 0;\n/**\n * Promise-Wrapper-Klasse für Native-Storage\n */\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst JsonHelper_1 = require(\"js-helper/dist/shared/JsonHelper\");\nclass NativeStoragePromise {\n static _isElectron() {\n return (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0);\n }\n /**\n * Setzt ein Item für NativeStorage\n *\n * @param key\n * @param value\n * @returns {Promise<*>}\n */\n static setItem(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.set(this.prefix + key, value, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.setItem(this.prefix + key, value, res, rej));\n }\n }\n else {\n this._cache[this.prefix + key] = value;\n }\n });\n }\n /**\n * Bekomme ein Item von NativeStorage\n *\n * @param key\n * @param defaultValue?\n * @returns {Promise<*>}\n */\n static getItem(key, defaultValue) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res, rej) => {\n if (this._isElectron()) {\n this.electronStorage.get(this.prefix + key, (e, data) => {\n if (e) {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }\n else {\n res(JsonHelper_1.JsonHelper.deepEqual(data, {}) ? defaultValue : data);\n }\n });\n }\n else {\n NativeStorage.getItem(this.prefix + key, data => res(Helper_1.Helper.nonNull(data, defaultValue)), (e => {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }));\n }\n });\n });\n }\n /**\n * Bekomme die Keys vom NativeStorage\n *\n * @returns {Promise<*>}\n */\n static keys() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = [];\n if (this.persistent) {\n if (this._isElectron()) {\n keys = yield new Promise((res, rej) => this.electronStorage.keys((err, keys) => {\n if (err) {\n rej(err);\n }\n else {\n res(keys);\n }\n }));\n }\n else {\n keys = yield new Promise((res, rej) => NativeStorage.keys(res, rej));\n }\n }\n else {\n keys = Object.keys(this._cache);\n }\n return keys.filter(key => key.startsWith(this.prefix));\n });\n }\n /**\n * Entfernt ein Object aus dem NativeStorage\n *\n * @param key\n * @returns {Promise<*>}\n */\n static remove(key) {\n return __awaiter(this, void 0, void 0, function* () {\n delete this._cache[this.prefix + key];\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.remove(this.prefix + key, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.remove(this.prefix + key, res, rej));\n }\n });\n }\n /**\n * Entfernt alle Objects aus dem NativeStorage\n *\n * @returns {Promise<*>}\n */\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = yield this.keys();\n yield Helper_1.Helper.asyncForEach((keys), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.remove(key);\n }), true);\n });\n }\n static makePersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistent) {\n this.persistent = true;\n yield Helper_1.Helper.asyncForEach(Object.keys(this._cache), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.setItem(key, this._cache[key]);\n }), true);\n }\n });\n }\n static makeUnpersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n let keys = yield this.keys();\n let values = {};\n yield Helper_1.Helper.asyncForEach(keys, (key) => __awaiter(this, void 0, void 0, function* () {\n values[key] = yield this.getItem(key);\n }));\n this.clear();\n this.persistent = false;\n this._cache = values;\n }\n });\n }\n}\nexports.NativeStoragePromise = NativeStoragePromise;\nNativeStoragePromise._cache = {};\nNativeStoragePromise.prefix = \"\";\nNativeStoragePromise.persistent = true;\nNativeStoragePromise.electronStorage = null;\n//# sourceMappingURL=NativeStoragePromise.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table check constraint stored in this class.\n */\nvar TableCheck = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableCheck(options) {\n /**\n * Column that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableCheck.prototype.clone = function () {\n return new TableCheck({\n name: this.name,\n columnNames: this.columnNames ? __spreadArray([], __read(this.columnNames)) : [],\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates checks from the check metadata object.\n */\n TableCheck.create = function (checkMetadata) {\n return new TableCheck({\n name: checkMetadata.name,\n expression: checkMetadata.expression\n });\n };\n return TableCheck;\n}());\nexport { TableCheck };\n\n//# sourceMappingURL=TableCheck.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is not started yet and user tries to run commit or rollback.\n */\nvar TransactionNotStartedError = /** @class */ (function (_super) {\n __extends(TransactionNotStartedError, _super);\n function TransactionNotStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionNotStartedError\";\n Object.setPrototypeOf(_this, TransactionNotStartedError.prototype);\n _this.message = \"Transaction is not started yet, start transaction before committing or rolling it back.\";\n return _this;\n }\n return TransactionNotStartedError;\n}(Error));\nexport { TransactionNotStartedError };\n\n//# sourceMappingURL=TransactionNotStartedError.js.map\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","import { __read, __spreadArray } from \"tslib\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { camelCase, snakeCase, titleCase } from \"../util/StringUtils\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Naming strategy that is used by default.\n */\nvar DefaultNamingStrategy = /** @class */ (function () {\n function DefaultNamingStrategy() {\n this.nestedSetColumnNames = { left: \"nsleft\", right: \"nsright\" };\n this.materializedPathColumnName = \"mpath\";\n }\n /**\n * Normalizes table name.\n *\n * @param targetName Name of the target entity that can be used to generate a table name.\n * @param userSpecifiedName For example if user specified a table name in a decorator, e.g. @Entity(\"name\")\n */\n DefaultNamingStrategy.prototype.tableName = function (targetName, userSpecifiedName) {\n return userSpecifiedName ? userSpecifiedName : snakeCase(targetName);\n };\n /**\n * Creates a table name for a junction table of a closure table.\n *\n * @param originalClosureTableName Name of the closure table which owns this junction table.\n */\n DefaultNamingStrategy.prototype.closureJunctionTableName = function (originalClosureTableName) {\n return originalClosureTableName + \"_closure\";\n };\n DefaultNamingStrategy.prototype.columnName = function (propertyName, customName, embeddedPrefixes) {\n var name = customName || propertyName;\n if (embeddedPrefixes.length)\n return camelCase(embeddedPrefixes.join(\"_\")) + titleCase(name);\n return name;\n };\n DefaultNamingStrategy.prototype.relationName = function (propertyName) {\n return propertyName;\n };\n DefaultNamingStrategy.prototype.primaryKeyName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"PK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.uniqueConstraintName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"UQ_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.relationConstraintName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"REL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.defaultConstraintName = function (tableOrName, columnName) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + columnName;\n return \"DF_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.foreignKeyName = function (tableOrName, columnNames, _referencedTablePath, _referencedColumnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"FK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.indexName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"IDX_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.checkConstraintName = function (tableOrName, expression, isEnum) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n var name = \"CHK_\" + RandomGenerator.sha1(key).substr(0, 26);\n return isEnum ? name + \"_ENUM\" : name;\n };\n DefaultNamingStrategy.prototype.exclusionConstraintName = function (tableOrName, expression) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n return \"XCL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.joinColumnName = function (relationName, referencedColumnName) {\n return camelCase(relationName + \"_\" + referencedColumnName);\n };\n DefaultNamingStrategy.prototype.joinTableName = function (firstTableName, secondTableName, firstPropertyName, secondPropertyName) {\n return snakeCase(firstTableName + \"_\" + firstPropertyName.replace(/\\./gi, \"_\") + \"_\" + secondTableName);\n };\n DefaultNamingStrategy.prototype.joinTableColumnDuplicationPrefix = function (columnName, index) {\n return columnName + \"_\" + index;\n };\n DefaultNamingStrategy.prototype.joinTableColumnName = function (tableName, propertyName, columnName) {\n return camelCase(tableName + \"_\" + (columnName ? columnName : propertyName));\n };\n DefaultNamingStrategy.prototype.joinTableInverseColumnName = function (tableName, propertyName, columnName) {\n return this.joinTableColumnName(tableName, propertyName, columnName);\n };\n /**\n * Adds globally set prefix to the table name.\n * This method is executed no matter if prefix was set or not.\n * Table name is either user's given table name, either name generated from entity target.\n * Note that table name comes here already normalized by #tableName method.\n */\n DefaultNamingStrategy.prototype.prefixTableName = function (prefix, tableName) {\n return prefix + tableName;\n };\n DefaultNamingStrategy.prototype.eagerJoinRelationAlias = function (alias, propertyPath) {\n return alias + \"_\" + propertyPath.replace(\".\", \"_\");\n };\n return DefaultNamingStrategy;\n}());\nexport { DefaultNamingStrategy };\n\n//# sourceMappingURL=DefaultNamingStrategy.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to execute operation allowed only if connection is opened.\n */\nvar CannotExecuteNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotExecuteNotConnectedError, _super);\n function CannotExecuteNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotExecuteNotConnectedError\";\n Object.setPrototypeOf(_this, CannotExecuteNotConnectedError.prototype);\n _this.message = \"Cannot execute operation on \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotExecuteNotConnectedError;\n}(Error));\nexport { CannotExecuteNotConnectedError };\n\n//# sourceMappingURL=CannotExecuteNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to connect when he already connected.\n */\nvar CannotConnectAlreadyConnectedError = /** @class */ (function (_super) {\n __extends(CannotConnectAlreadyConnectedError, _super);\n function CannotConnectAlreadyConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotConnectAlreadyConnectedError\";\n Object.setPrototypeOf(_this, CannotConnectAlreadyConnectedError.prototype);\n _this.message = \"Cannot create a \\\"\" + connectionName + \"\\\" connection because connection to the database already established.\";\n return _this;\n }\n return CannotConnectAlreadyConnectedError;\n}(Error));\nexport { CannotConnectAlreadyConnectedError };\n\n//# sourceMappingURL=CannotConnectAlreadyConnectedError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n */\nvar EntityMetadataNotFoundError = /** @class */ (function (_super) {\n __extends(EntityMetadataNotFoundError, _super);\n function EntityMetadataNotFoundError(target) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityMetadataNotFound\";\n Object.setPrototypeOf(_this, EntityMetadataNotFoundError.prototype);\n var targetName;\n if (target instanceof EntitySchema) {\n targetName = target.options.name;\n }\n else if (typeof target === \"function\") {\n targetName = target.name;\n }\n else if (typeof target === \"object\" && \"name\" in target) {\n targetName = target.name;\n }\n else {\n targetName = target;\n }\n _this.message = \"No metadata for \\\"\" + targetName + \"\\\" was found.\";\n return _this;\n }\n return EntityMetadataNotFoundError;\n}(Error));\nexport { EntityMetadataNotFoundError };\n\n//# sourceMappingURL=EntityMetadataNotFoundError.js.map\n","/**\n * Represents entity of the migration in the database.\n */\nvar Migration = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Migration(id, timestamp, name, instance) {\n this.id = id;\n this.timestamp = timestamp;\n this.name = name;\n this.instance = instance;\n }\n return Migration;\n}());\nexport { Migration };\n\n//# sourceMappingURL=Migration.js.map\n","/**\n * Sql server driver requires parameter types to be specified fo input parameters used in the query.\n *\n * @see https://github.com/patriksimek/node-mssql#data-types\n */\nvar MssqlParameter = /** @class */ (function () {\n function MssqlParameter(value, type) {\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n this.value = value;\n this.type = type;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n this.params = [];\n this.params = params || [];\n }\n return MssqlParameter;\n}());\nexport { MssqlParameter };\n\n//# sourceMappingURL=MssqlParameter.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { Table } from \"../schema-builder/table/Table\";\nimport { Migration } from \"./Migration\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nvar MigrationExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MigrationExecutor(connection, queryRunner) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n this.transaction = \"all\";\n var options = this.connection.driver.options;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Tries to execute a single migration given.\n */\n MigrationExecutor.prototype.executeMigration = function (migration) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, migration.instance.up(queryRunner)];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 3:\n _a.sent();\n return [2 /*return*/, migration];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all migrations.\n */\n MigrationExecutor.prototype.getAllMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(this.getMigrations())];\n });\n });\n };\n /**\n * Returns an array of all executed migrations.\n */\n MigrationExecutor.prototype.getExecutedMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all pending migrations.\n */\n MigrationExecutor.prototype.getPendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var allMigrations, executedMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAllMigrations()];\n case 1:\n allMigrations = _a.sent();\n return [4 /*yield*/, this.getExecutedMigrations()];\n case 2:\n executedMigrations = _a.sent();\n return [2 /*return*/, allMigrations.filter(function (migration) {\n return !executedMigrations.find(function (executedMigration) {\n return executedMigration.name === migration.name;\n });\n })];\n }\n });\n });\n };\n /**\n * Inserts an executed migration.\n */\n MigrationExecutor.prototype.insertMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.insertExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Deletes an executed migration.\n */\n MigrationExecutor.prototype.deleteMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.deleteExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n MigrationExecutor.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var hasUnappliedMigrations, queryRunner, executedMigrations, allMigrations, _loop_1, this_1, allMigrations_1, allMigrations_1_1, migration;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n hasUnappliedMigrations = false;\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n allMigrations = this.getMigrations();\n _loop_1 = function (migration) {\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration) {\n this_1.connection.logger.logSchemaBuild(\" [X] \" + migration.name);\n }\n else {\n hasUnappliedMigrations = true;\n this_1.connection.logger.logSchemaBuild(\" [ ] \" + migration.name);\n }\n };\n this_1 = this;\n try {\n for (allMigrations_1 = __values(allMigrations), allMigrations_1_1 = allMigrations_1.next(); !allMigrations_1_1.done; allMigrations_1_1 = allMigrations_1.next()) {\n migration = allMigrations_1_1.value;\n _loop_1(migration);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allMigrations_1_1 && !allMigrations_1_1.done && (_a = allMigrations_1.return)) _a.call(allMigrations_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, hasUnappliedMigrations];\n }\n });\n });\n };\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n MigrationExecutor.prototype.executePendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;\n var e_2, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n allMigrations = this.getMigrations();\n successMigrations = [];\n pendingMigrations = allMigrations.filter(function (migration) {\n // check if we already have executed migration\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration)\n return false;\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new Error(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n if (!!pendingMigrations.length) return [3 /*break*/, 5];\n this.connection.logger.logSchemaBuild(\"No migrations are pending\");\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, []];\n case 5:\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(allMigrations.length + \" migrations were found in the source code.\");\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(pendingMigrations.length + \" migrations are new migrations that needs to be executed.\");\n transactionStartedByUs = false;\n if (!(this.transaction === \"all\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 6:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 7;\n case 7:\n _b.trys.push([7, 18, 23, 26]);\n _loop_2 = function (migration) {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!(this_2.transaction === \"each\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 2];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 1:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 2;\n case 2: return [4 /*yield*/, migration.instance.up(queryRunner)\n .then(function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: // now when migration is executed we need to insert record about it into the database\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 1:\n _a.sent();\n if (!(this.transaction === \"each\" && transactionStartedByUs)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); })\n .then(function () {\n successMigrations.push(migration);\n _this.connection.logger.logSchemaBuild(\"Migration \" + migration.name + \" has been executed successfully.\");\n })];\n case 3:\n _c.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _b.label = 8;\n case 8:\n _b.trys.push([8, 13, 14, 15]);\n pendingMigrations_1 = __values(pendingMigrations), pendingMigrations_1_1 = pendingMigrations_1.next();\n _b.label = 9;\n case 9:\n if (!!pendingMigrations_1_1.done) return [3 /*break*/, 12];\n migration = pendingMigrations_1_1.value;\n return [5 /*yield**/, _loop_2(migration)];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11:\n pendingMigrations_1_1 = pendingMigrations_1.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (pendingMigrations_1_1 && !pendingMigrations_1_1.done && (_a = pendingMigrations_1.return)) _a.call(pendingMigrations_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!(this.transaction === \"all\" && transactionStartedByUs)) return [3 /*break*/, 17];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 16:\n _b.sent();\n _b.label = 17;\n case 17: return [3 /*break*/, 26];\n case 18:\n err_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 22];\n _b.label = 19;\n case 19:\n _b.trys.push([19, 21, , 22]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 20:\n _b.sent();\n return [3 /*break*/, 22];\n case 21:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 22];\n case 22: throw err_1;\n case 23:\n if (!!this.queryRunner) return [3 /*break*/, 25];\n return [4 /*yield*/, queryRunner.release()];\n case 24:\n _b.sent();\n _b.label = 25;\n case 25: return [7 /*endfinally*/];\n case 26: return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last migration that were run.\n */\n MigrationExecutor.prototype.undoLastMigration = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, migrationToRevert, transactionStartedByUs, err_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _a.sent();\n lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\"No migrations was found in the database. Nothing to revert!\");\n return [2 /*return*/];\n }\n allMigrations = this.getMigrations();\n migrationToRevert = allMigrations.find(function (migration) { return migration.name === lastTimeExecutedMigration.name; });\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new Error(\"No migration \" + lastTimeExecutedMigration.name + \" was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.\");\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(\"Now reverting it...\");\n transactionStartedByUs = false;\n if (!((this.transaction !== \"none\") && !queryRunner.isTransactionActive)) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 3:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 4;\n case 4:\n _a.trys.push([4, 9, 14, 17]);\n return [4 /*yield*/, migrationToRevert.instance.down(queryRunner)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.deleteExecutedMigration(queryRunner, migrationToRevert)];\n case 6:\n _a.sent();\n this.connection.logger.logSchemaBuild(\"Migration \" + migrationToRevert.name + \" has been reverted successfully.\");\n if (!transactionStartedByUs) return [3 /*break*/, 8];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [3 /*break*/, 17];\n case 9:\n err_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 13];\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw err_2;\n case 14:\n if (!!this.queryRunner) return [3 /*break*/, 16];\n return [4 /*yield*/, queryRunner.release()];\n case 15:\n _a.sent();\n _a.label = 16;\n case 16: return [7 /*endfinally*/];\n case 17: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n MigrationExecutor.prototype.createMigrationsTableIfNotExist = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, queryRunner.hasTable(this.migrationsTable)];\n case 1:\n tableExist = _a.sent();\n if (!!tableExist) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationId }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n MigrationExecutor.prototype.loadExecutedMigrations = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var mongoRunner, migrationsRaw;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection\n .db(this.connection.driver.database)\n .collection(this.migrationsTableName)\n .find()\n .sort({ \"_id\": -1 })\n .toArray()];\n case 1: return [2 /*return*/, _a.sent()];\n case 2: return [4 /*yield*/, this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()];\n case 3:\n migrationsRaw = _a.sent();\n return [2 /*return*/, migrationsRaw.map(function (migrationRaw) {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n })];\n }\n });\n });\n };\n /**\n * Gets all migrations that setup for this connection.\n */\n MigrationExecutor.prototype.getMigrations = function () {\n var migrations = this.connection.migrations.map(function (migration) {\n var migrationClassName = migration.name || migration.constructor.name;\n var migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new Error(migrationClassName + \" migration name is wrong. Migration class name should have a JavaScript timestamp appended.\");\n }\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n this.checkForDuplicateMigrations(migrations);\n // sort them by timestamp\n return migrations.sort(function (a, b) { return a.timestamp - b.timestamp; });\n };\n MigrationExecutor.prototype.checkForDuplicateMigrations = function (migrations) {\n var migrationNames = migrations.map(function (migration) { return migration.name; });\n var duplicates = Array.from(new Set(migrationNames.filter(function (migrationName, index) { return migrationNames.indexOf(migrationName) < index; })));\n if (duplicates.length > 0) {\n throw Error(\"Duplicate migrations: \" + duplicates.join(\", \"));\n }\n };\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n MigrationExecutor.prototype.getLatestTimestampMigration = function (migrations) {\n var sortedMigrations = migrations.map(function (migration) { return migration; }).sort(function (a, b) { return (a.timestamp - b.timestamp) * -1; });\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n MigrationExecutor.prototype.getLatestExecutedMigration = function (sortedMigrations) {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Inserts new executed migration's data into migrations table.\n */\n MigrationExecutor.prototype.insertExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var values, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n values = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).insert(values)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n MigrationExecutor.prototype.deleteExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var conditions, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n conditions = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).deleteOne(conditions)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.delete()\n .from(this.migrationsTable)\n .where(qb.escape(\"timestamp\") + \" = :timestamp\")\n .andWhere(qb.escape(\"name\") + \" = :name\")\n .setParameters(conditions)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MigrationExecutor.prototype.withQueryRunner = function (callback) {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 2, 5]);\n return [2 /*return*/, callback(queryRunner)];\n case 2:\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n return MigrationExecutor;\n}());\nexport { MigrationExecutor };\n\n//# sourceMappingURL=MigrationExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingPrimaryColumnError = /** @class */ (function (_super) {\n __extends(MissingPrimaryColumnError, _super);\n function MissingPrimaryColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingPrimaryColumnError\";\n Object.setPrototypeOf(_this, MissingPrimaryColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have a primary column. Primary column is required to \" +\n \"have in all your entities. Use @PrimaryColumn decorator to add a primary column to your entity.\";\n return _this;\n }\n return MissingPrimaryColumnError;\n}(Error));\nexport { MissingPrimaryColumnError };\n\n//# sourceMappingURL=MissingPrimaryColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when circular relations detected with nullable set to false.\n */\nvar CircularRelationsError = /** @class */ (function (_super) {\n __extends(CircularRelationsError, _super);\n function CircularRelationsError(path) {\n var _this = _super.call(this) || this;\n _this.name = \"CircularRelationsError\";\n Object.setPrototypeOf(_this, CircularRelationsError.prototype);\n _this.message = \"Circular relations detected: \" + path + \". To resolve this issue you need to set nullable: true somewhere in this dependency structure.\";\n return _this;\n }\n return CircularRelationsError;\n}(Error));\nexport { CircularRelationsError };\n\n//# sourceMappingURL=CircularRelationsError.js.map\n","/**\n * This source code is from https://github.com/jriecken/dependency-graph\n * Just added \"any\" types here, wrapper everything into exported class.\n * We cant use a package itself because we want to package \"everything-in-it\" for the frontend users of TypeORM.\n */\n/**\n * A simple dependency graph\n */\n/**\n * Helper for creating a Depth-First-Search on\n * a set of edges.\n *\n * Detects cycles and throws an Error if one is detected.\n *\n * @param edges The set of edges to DFS through\n * @param leavesOnly Whether to only return \"leaf\" nodes (ones who have no edges)\n * @param result An array in which the results will be populated\n */\nfunction createDFS(edges, leavesOnly, result) {\n var currentPath = [];\n var visited = {};\n return function DFS(currentNode) {\n visited[currentNode] = true;\n currentPath.push(currentNode);\n edges[currentNode].forEach(function (node) {\n if (!visited[node]) {\n DFS(node);\n }\n else if (currentPath.indexOf(node) >= 0) {\n currentPath.push(node);\n throw new Error(\"Dependency Cycle Found: \" + currentPath.join(\" -> \"));\n }\n });\n currentPath.pop();\n if ((!leavesOnly || edges[currentNode].length === 0) && result.indexOf(currentNode) === -1) {\n result.push(currentNode);\n }\n };\n}\nvar DepGraph = /** @class */ (function () {\n function DepGraph() {\n this.nodes = {};\n this.outgoingEdges = {}; // Node -> [Dependency Node]\n this.incomingEdges = {}; // Node -> [Dependant Node]\n }\n /**\n * Add a node to the dependency graph. If a node already exists, this method will do nothing.\n */\n DepGraph.prototype.addNode = function (node, data) {\n if (!this.hasNode(node)) {\n // Checking the arguments length allows the user to add a node with undefined data\n if (arguments.length === 2) {\n this.nodes[node] = data;\n }\n else {\n this.nodes[node] = node;\n }\n this.outgoingEdges[node] = [];\n this.incomingEdges[node] = [];\n }\n };\n /**\n * Remove a node from the dependency graph. If a node does not exist, this method will do nothing.\n */\n DepGraph.prototype.removeNode = function (node) {\n if (this.hasNode(node)) {\n delete this.nodes[node];\n delete this.outgoingEdges[node];\n delete this.incomingEdges[node];\n [this.incomingEdges, this.outgoingEdges].forEach(function (edgeList) {\n Object.keys(edgeList).forEach(function (key) {\n var idx = edgeList[key].indexOf(node);\n if (idx >= 0) {\n edgeList[key].splice(idx, 1);\n }\n }, this);\n });\n }\n };\n /**\n * Check if a node exists in the graph\n */\n DepGraph.prototype.hasNode = function (node) {\n return this.nodes.hasOwnProperty(node);\n };\n /**\n * Get the data associated with a node name\n */\n DepGraph.prototype.getNodeData = function (node) {\n if (this.hasNode(node)) {\n return this.nodes[node];\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Set the associated data for a given node name. If the node does not exist, this method will throw an error\n */\n DepGraph.prototype.setNodeData = function (node, data) {\n if (this.hasNode(node)) {\n this.nodes[node] = data;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Add a dependency between two nodes. If either of the nodes does not exist,\n * an Error will be thrown.\n */\n DepGraph.prototype.addDependency = function (from, to) {\n if (!this.hasNode(from)) {\n throw new Error(\"Node does not exist: \" + from);\n }\n if (!this.hasNode(to)) {\n throw new Error(\"Node does not exist: \" + to);\n }\n if (this.outgoingEdges[from].indexOf(to) === -1) {\n this.outgoingEdges[from].push(to);\n }\n if (this.incomingEdges[to].indexOf(from) === -1) {\n this.incomingEdges[to].push(from);\n }\n return true;\n };\n /**\n * Remove a dependency between two nodes.\n */\n DepGraph.prototype.removeDependency = function (from, to) {\n var idx;\n if (this.hasNode(from)) {\n idx = this.outgoingEdges[from].indexOf(to);\n if (idx >= 0) {\n this.outgoingEdges[from].splice(idx, 1);\n }\n }\n if (this.hasNode(to)) {\n idx = this.incomingEdges[to].indexOf(from);\n if (idx >= 0) {\n this.incomingEdges[to].splice(idx, 1);\n }\n }\n };\n /**\n * Get an array containing the nodes that the specified node depends on (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned\n * in the array.\n */\n DepGraph.prototype.dependenciesOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.outgoingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * get an array containing the nodes that depend on the specified node (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not have any dependants will be returned in the array.\n */\n DepGraph.prototype.dependantsOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.incomingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Construct the overall processing order for the dependency graph.\n *\n * Throws an Error if the graph has a cycle.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned.\n */\n DepGraph.prototype.overallOrder = function (leavesOnly) {\n var self = this;\n var result = [];\n var keys = Object.keys(this.nodes);\n if (keys.length === 0) {\n return result; // Empty graph\n }\n else {\n // Look for cycles - we run the DFS starting at all the nodes in case there\n // are several disconnected subgraphs inside this dependency graph.\n var CycleDFS_1 = createDFS(this.outgoingEdges, false, []);\n keys.forEach(function (n) {\n CycleDFS_1(n);\n });\n var DFS_1 = createDFS(this.outgoingEdges, leavesOnly, result);\n // Find all potential starting points (nodes with nothing depending on them) an\n // run a DFS starting at these points to get the order\n keys.filter(function (node) {\n return self.incomingEdges[node].length === 0;\n }).forEach(function (n) {\n DFS_1(n);\n });\n return result;\n }\n };\n return DepGraph;\n}());\nexport { DepGraph };\n\n//# sourceMappingURL=DepGraph.js.map\n","import { __extends } from \"tslib\";\nvar DataTypeNotSupportedError = /** @class */ (function (_super) {\n __extends(DataTypeNotSupportedError, _super);\n function DataTypeNotSupportedError(column, dataType, database) {\n var _this = _super.call(this) || this;\n _this.name = \"DataTypeNotSupportedError\";\n Object.setPrototypeOf(_this, DataTypeNotSupportedError.prototype);\n var type = typeof dataType === \"string\" ? dataType : dataType.name;\n _this.message = \"Data type \\\"\" + type + \"\\\" in \\\"\" + column.entityMetadata.targetName + \".\" + column.propertyName + \"\\\" is not supported by \\\"\" + database + \"\\\" database.\";\n return _this;\n }\n return DataTypeNotSupportedError;\n}(Error));\nexport { DataTypeNotSupportedError };\n\n//# sourceMappingURL=DataTypeNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when some option is not set in the connection options.\n */\nvar NoConnectionOptionError = /** @class */ (function (_super) {\n __extends(NoConnectionOptionError, _super);\n function NoConnectionOptionError(optionName) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, NoConnectionOptionError.prototype);\n _this.message = \"Option \\\"\" + optionName + \"\\\" is not set in your connection options, please define \\\"\" + optionName + \"\\\" option in your connection options or ormconfig.json\";\n return _this;\n }\n return NoConnectionOptionError;\n}(Error));\nexport { NoConnectionOptionError };\n\n//# sourceMappingURL=NoConnectionOptionError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relation has array initialized which is forbidden my ORM.\n *\n * @see https://github.com/typeorm/typeorm/issues/1319\n * @see http://typeorm.io/#/relations-faq/avoid-relation-property-initializers\n */\nvar InitializedRelationError = /** @class */ (function (_super) {\n __extends(InitializedRelationError, _super);\n function InitializedRelationError(relation) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, InitializedRelationError.prototype);\n _this.message = \"Array initializations are not allowed in entity relations. \" +\n (\"Please remove array initialization (= []) from \\\"\" + relation.entityMetadata.targetName + \"#\" + relation.propertyPath + \"\\\". \") +\n \"This is ORM requirement to make relations to work properly. Refer docs for more information.\";\n return _this;\n }\n return InitializedRelationError;\n}(Error));\nexport { InitializedRelationError };\n\n//# sourceMappingURL=InitializedRelationError.js.map\n","import { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\";\nimport { CircularRelationsError } from \"../error/CircularRelationsError\";\nimport { DepGraph } from \"../util/DepGraph\";\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\";\nimport { InitializedRelationError } from \"../error/InitializedRelationError\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n/**\n * Validates built entity metadatas.\n */\nvar EntityMetadataValidator = /** @class */ (function () {\n function EntityMetadataValidator() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given entity metadatas.\n */\n EntityMetadataValidator.prototype.validateMany = function (entityMetadatas, driver) {\n var _this = this;\n entityMetadatas.forEach(function (entityMetadata) { return _this.validate(entityMetadata, entityMetadatas, driver); });\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n };\n /**\n * Validates given entity metadata.\n */\n EntityMetadataValidator.prototype.validate = function (entityMetadata, allEntityMetadatas, driver) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new Error(\"Entity \" + entityMetadata.name + \" using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?\");\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new Error(\"Entity \" + entityMetadata.name + \" has an undefined discriminator value. Discriminator value should be defined.\");\n var sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(function (metadata) {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(function (parent) { return entityMetadata.inheritanceTree.indexOf(parent) !== -1; });\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new Error(\"Entities \" + entityMetadata.name + \" and \" + sameDiscriminatorValueEntityMetadata.name + \" have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.\");\n }\n entityMetadata.relationCounts.forEach(function (relationCount) {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new Error(\"Relation count can not be implemented on ManyToOne or OneToOne relations.\");\n });\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(function (column) {\n var normalizedColumn = driver.normalizeType(column);\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new Error(\"Column \" + column.propertyName + \" of Entity \" + entityMetadata.name + \" does not support length property.\");\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new Error(\"Column \\\"\" + column.propertyName + \"\\\" of Entity \\\"\" + entityMetadata.name + \"\\\" is defined as enum, but missing \\\"enum\\\" or \\\"enumName\\\" properties.\");\n });\n }\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n var generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated && column.generationStrategy !== \"uuid\"; });\n if (generatedColumns.length > 1)\n throw new Error(\"Error in \" + entityMetadata.name + \" entity. There can be only one auto-increment column in MySql table.\");\n }\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n var metadatasWithDatabase = allEntityMetadatas.filter(function (metadata) { return metadata.database; });\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n if (driver instanceof SqlServerDriver) {\n var charsetColumns = entityMetadata.columns.filter(function (column) { return column.charset; });\n if (charsetColumns.length > 1)\n throw new Error(\"Character set specifying is not supported in Sql Server\");\n }\n // check if relations are all without initialized properties\n var entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(function (relation) {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n // get entity relation value and check if its an array\n var relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n // validate relations\n entityMetadata.relations.forEach(function (relation) {\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new Error(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new Error(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n });\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(function (relation) {\n var isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new Error(\"Relation \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseRelation.entityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" both has cascade remove set. \" +\n \"This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.\");\n }); // todo: maybe better just deny removal from one to one relation without join column?\n entityMetadata.eagerRelations.forEach(function (relation) {\n });\n };\n /**\n * Validates dependencies of the entity metadatas.\n */\n EntityMetadataValidator.prototype.validateDependencies = function (entityMetadatas) {\n var graph = new DepGraph();\n entityMetadatas.forEach(function (entityMetadata) {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns\n .filter(function (relation) { return !relation.isNullable; })\n .forEach(function (relation) {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n }\n catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n };\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n EntityMetadataValidator.prototype.validateEagerRelations = function (entityMetadatas) {\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.eagerRelations.forEach(function (relation) {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new Error(\"Circular eager relations are disallowed. \" +\n (entityMetadata.targetName + \"#\" + relation.propertyPath + \" contains \\\"eager: true\\\", and its inverse side \") +\n (relation.inverseEntityMetadata.targetName + \"#\" + relation.inverseRelation.propertyPath + \" contains \\\"eager: true\\\" as well.\") +\n \" Remove \\\"eager: true\\\" from one side of the relation.\");\n });\n });\n };\n return EntityMetadataValidator;\n}());\nexport { EntityMetadataValidator };\n\n//# sourceMappingURL=EntityMetadataValidator.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use query runner from query runner provider after it was released.\n */\nvar QueryRunnerProviderAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerProviderAlreadyReleasedError, _super);\n function QueryRunnerProviderAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerProviderAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerProviderAlreadyReleasedError.prototype);\n _this.message = \"Database connection provided by a query runner was already released, cannot continue to use its querying methods anymore.\";\n return _this;\n }\n return QueryRunnerProviderAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerProviderAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerProviderAlreadyReleasedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to release entity manager that does not use single database connection.\n */\nvar NoNeedToReleaseEntityManagerError = /** @class */ (function (_super) {\n __extends(NoNeedToReleaseEntityManagerError, _super);\n function NoNeedToReleaseEntityManagerError() {\n var _this = _super.call(this) || this;\n _this.name = \"NoNeedToReleaseEntityManagerError\";\n Object.setPrototypeOf(_this, NoNeedToReleaseEntityManagerError.prototype);\n _this.message = \"Entity manager is not using single database connection and cannot be released. \" +\n \"Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection \" +\n \"methods have a single database connection and they should be released.\";\n return _this;\n }\n return NoNeedToReleaseEntityManagerError;\n}(Error));\nexport { NoNeedToReleaseEntityManagerError };\n\n//# sourceMappingURL=NoNeedToReleaseEntityManagerError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nvar Repository = /** @class */ (function () {\n function Repository() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Repository.prototype.createQueryBuilder = function (alias, queryRunner) {\n return this.manager.createQueryBuilder(this.metadata.target, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n };\n Object.defineProperty(Repository.prototype, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n Repository.prototype.hasId = function (entity) {\n return this.manager.hasId(this.metadata.target, entity);\n };\n /**\n * Gets entity mixed id.\n */\n Repository.prototype.getId = function (entity) {\n return this.manager.getId(this.metadata.target, entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n Repository.prototype.create = function (plainEntityLikeOrPlainEntityLikes) {\n return this.manager.create(this.metadata.target, plainEntityLikeOrPlainEntityLikes);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n Repository.prototype.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.manager).merge.apply(_a, __spreadArray([this.metadata.target, mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n Repository.prototype.preload = function (entityLike) {\n return this.manager.preload(this.metadata.target, entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n Repository.prototype.save = function (entityOrEntities, options) {\n return this.manager.save(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n Repository.prototype.remove = function (entityOrEntities, options) {\n return this.manager.remove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n Repository.prototype.softRemove = function (entityOrEntities, options) {\n return this.manager.softRemove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Recovers one or many given entities.\n */\n Repository.prototype.recover = function (entityOrEntities, options) {\n return this.manager.recover(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n Repository.prototype.insert = function (entity) {\n return this.manager.insert(this.metadata.target, entity);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.update = function (criteria, partialEntity) {\n return this.manager.update(this.metadata.target, criteria, partialEntity);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.delete = function (criteria) {\n return this.manager.delete(this.metadata.target, criteria);\n };\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.softDelete = function (criteria) {\n return this.manager.softDelete(this.metadata.target, criteria);\n };\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.restore = function (criteria) {\n return this.manager.restore(this.metadata.target, criteria);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n Repository.prototype.count = function (optionsOrConditions) {\n return this.manager.count(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n Repository.prototype.find = function (optionsOrConditions) {\n return this.manager.find(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n Repository.prototype.findAndCount = function (optionsOrConditions) {\n return this.manager.findAndCount(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n Repository.prototype.findByIds = function (ids, optionsOrConditions) {\n return this.manager.findByIds(this.metadata.target, ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOne = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOne(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOneOrFail(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n Repository.prototype.query = function (query, parameters) {\n return this.manager.query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n Repository.prototype.clear = function () {\n return this.manager.clear(this.metadata.target);\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.increment = function (conditions, propertyPath, value) {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.decrement = function (conditions, propertyPath, value) {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n };\n return Repository;\n}());\nexport { Repository };\n\n//# sourceMappingURL=Repository.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { Repository } from \"./Repository\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nvar TreeRepository = /** @class */ (function (_super) {\n __extends(TreeRepository, _super);\n function TreeRepository() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // todo: implement moving\n // todo: implement removing\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Gets complete trees for all roots in the table.\n */\n TreeRepository.prototype.findTrees = function () {\n return __awaiter(this, void 0, void 0, function () {\n var roots;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.findRoots()];\n case 1:\n roots = _a.sent();\n return [4 /*yield*/, Promise.all(roots.map(function (root) { return _this.findDescendantsTree(root); }))];\n case 2:\n _a.sent();\n return [2 /*return*/, roots];\n }\n });\n });\n };\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n TreeRepository.prototype.findRoots = function () {\n var _this = this;\n var escapeAlias = function (alias) { return _this.manager.connection.driver.escape(alias); };\n var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };\n var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);\n return this.createQueryBuilder(\"treeEntity\")\n .where(escapeAlias(\"treeEntity\") + \".\" + escapeColumn(parentPropertyName) + \" IS NULL\")\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findDescendantsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildChildrenEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of descendants of the entity.\n */\n TreeRepository.prototype.countDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n TreeRepository.prototype.createDescendantsQueryBuilder = function (alias, closureTableAlias, entity) {\n var _this = this;\n // create shortcuts for better readability\n var escape = function (alias) { return _this.manager.connection.driver.escape(alias); };\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn.propertyPath);\n }).join(\" AND \");\n var parameters_1 = {};\n var whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n parameters_1[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_1);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_2 = {};\n var joinCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_2[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters_2);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE \" + subQuery.getQuery() + \" || '%'\";\n }\n else {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE CONCAT(\" + subQuery.getQuery() + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findAncestorsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of ancestors of the entity.\n */\n TreeRepository.prototype.countAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n TreeRepository.prototype.createAncestorsQueryBuilder = function (alias, closureTableAlias, entity) {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n var _this = this;\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn.propertyPath;\n }).join(\" AND \");\n var parameters_3 = {};\n var whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n parameters_3[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_3);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_4 = {};\n var whereCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_4[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters_4);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return subQuery.getQuery() + \" LIKE \" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" || '%'\";\n }\n else {\n return subQuery.getQuery() + \" LIKE CONCAT(\" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise {\n return Promise.resolve();\n } */\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n TreeRepository.prototype.createRelationMaps = function (alias, rawResults) {\n var _this = this;\n return rawResults.map(function (rawResult) {\n var joinColumn = _this.metadata.treeParentRelation.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n var joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n var id = rawResult[alias + \"_\" + _this.metadata.primaryColumns[0].databaseName];\n var parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: _this.manager.connection.driver.prepareHydratedValue(id, _this.metadata.primaryColumns[0]),\n parentId: _this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n };\n TreeRepository.prototype.buildChildrenEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var childProperty = this.metadata.treeChildrenRelation.propertyName;\n var parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var childRelationMaps = relationMaps.filter(function (relationMap) { return relationMap.parentId === parentEntityId; });\n var childIds = new Set(childRelationMaps.map(function (relationMap) { return relationMap.id; }));\n entity[childProperty] = entities.filter(function (entity) { return childIds.has(_this.metadata.primaryColumns[0].getEntityValue(entity)); });\n entity[childProperty].forEach(function (childEntity) {\n _this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n };\n TreeRepository.prototype.buildParentEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var parentProperty = this.metadata.treeParentRelation.propertyName;\n var entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var parentRelationMap = relationMaps.find(function (relationMap) { return relationMap.id === entityId; });\n var parentEntity = entities.find(function (entity) {\n if (!parentRelationMap)\n return false;\n return _this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n };\n return TreeRepository;\n}(Repository));\nexport { TreeRepository };\n\n//# sourceMappingURL=TreeRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relations specified in the find options were not found in the entities.\n*/\nvar FindRelationsNotFoundError = /** @class */ (function (_super) {\n __extends(FindRelationsNotFoundError, _super);\n function FindRelationsNotFoundError(notFoundRelations) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, FindRelationsNotFoundError.prototype);\n if (notFoundRelations.length === 1) {\n _this.message = \"Relation \\\"\" + notFoundRelations[0] + \"\\\" was not found; please check if it is correct and really exists in your entity.\";\n }\n else {\n _this.message = \"Relations \" + notFoundRelations.map(function (relation) { return \"\\\"\" + relation + \"\\\"\"; }).join(\", \") + \" were not found; please check if relations are correct and they exist in your entities.\";\n }\n return _this;\n }\n return FindRelationsNotFoundError;\n}(Error));\nexport { FindRelationsNotFoundError };\n\n//# sourceMappingURL=FindRelationsNotFoundError.js.map\n","import { FindRelationsNotFoundError } from \"../error/FindRelationsNotFoundError\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Utilities to work with FindOptions.\n */\nvar FindOptionsUtils = /** @class */ (function () {\n function FindOptionsUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n FindOptionsUtils.isFindOneOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions &&\n (Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\");\n };\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n FindOptionsUtils.isFindManyOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions && (this.isFindOneOptions(possibleOptions) ||\n typeof possibleOptions.skip === \"number\" ||\n typeof possibleOptions.take === \"number\" ||\n typeof possibleOptions.skip === \"string\" ||\n typeof possibleOptions.take === \"string\");\n };\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n FindOptionsUtils.extractFindManyOptionsAlias = function (object) {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n return undefined;\n };\n /**\n * Applies give find many options to the given query builder.\n */\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder = function (qb, options) {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n if (options)\n return qb.where(options);\n return qb;\n };\n /**\n * Applies give find options to the given query builder.\n */\n FindOptionsUtils.applyOptionsToQueryBuilder = function (qb, options) {\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n var metadata = qb.expressionMap.mainAlias.metadata;\n // apply all options from FindOptions\n if (options.select) {\n qb.select([]);\n options.select.forEach(function (select) {\n if (!metadata.findColumnWithPropertyPath(String(select)))\n throw new Error(select + \" column was not found in the \" + metadata.name + \" entity.\");\n qb.addSelect(qb.alias + \".\" + select);\n });\n }\n if (options.where)\n qb.where(options.where);\n if (options.skip)\n qb.skip(options.skip);\n if (options.take)\n qb.take(options.take);\n if (options.order)\n Object.keys(options.order).forEach(function (key) {\n var order = options.order[key];\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(key + \" column was not found in the \" + metadata.name + \" entity.\");\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n if (options.relations) {\n var allRelations = options.relations.map(function (relation) { return relation; });\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(function (key) {\n qb.leftJoin(options.join.leftJoin[key], key);\n });\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(function (key) {\n qb.innerJoin(options.join.innerJoin[key], key);\n });\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(function (key) {\n qb.leftJoinAndSelect(options.join.leftJoinAndSelect[key], key);\n });\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(function (key) {\n qb.innerJoinAndSelect(options.join.innerJoinAndSelect[key], key);\n });\n }\n if (options.cache) {\n if (options.cache instanceof Object) {\n var cache = options.cache;\n qb.cache(cache.id, cache.milliseconds);\n }\n else {\n qb.cache(options.cache);\n }\n }\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n }\n else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n var tableNames = options.lock.tables ? options.lock.tables.map(function (table) {\n var tableAlias = qb.expressionMap.aliases.find(function (alias) {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new Error(\"\\\"\" + table + \"\\\" is not part of this query\");\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n if (options.withDeleted) {\n qb.withDeleted();\n }\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n }\n else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds);\n }\n return qb;\n };\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n FindOptionsUtils.applyRelationsRecursively = function (qb, allRelations, alias, metadata, prefix) {\n var _this = this;\n // find all relations that match given prefix\n var matchedBaseRelations = [];\n if (prefix) {\n var regexp_1 = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(function (relation) { return relation.match(regexp_1); })\n .map(function (relation) { return relation.replace(regexp_1, \"\"); })\n .filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n else {\n matchedBaseRelations = allRelations.filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(function (relation) {\n // generate a relation alias\n var relationAlias = alias + \"__\" + relation;\n // shorten it if needed by the driver\n if (qb.connection.driver.maxAliasLength && relationAlias.length > qb.connection.driver.maxAliasLength) {\n relationAlias = shorten(relationAlias);\n }\n // add a join for the found relation\n var selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n // join the eager relations of the found relation\n var relMetadata = metadata.relations.find(function (metadata) { return metadata.propertyName === relation; });\n if (relMetadata) {\n _this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n // try to find sub-relations\n var join = qb.expressionMap.joinAttributes.find(function (join) { return join.entityOrProperty === selection; });\n _this.applyRelationsRecursively(qb, allRelations, join.alias.name, join.metadata, prefix ? prefix + \".\" + relation : relation);\n });\n };\n FindOptionsUtils.joinEagerRelations = function (qb, alias, metadata) {\n var _this = this;\n metadata.eagerRelations.forEach(function (relation) {\n var relationAlias = qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath);\n qb.leftJoinAndSelect(alias + \".\" + relation.propertyPath, relationAlias);\n _this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n };\n return FindOptionsUtils;\n}());\nexport { FindOptionsUtils };\n\n//# sourceMappingURL=FindOptionsUtils.js.map\n","/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToNewEntityTransformer = /** @class */ (function () {\n function PlainObjectToNewEntityTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToNewEntityTransformer.prototype.transform = function (newEntity, object, metadata, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // console.log(\"groupAndTransform entity:\", newEntity);\n // console.log(\"groupAndTransform object:\", object);\n this.groupAndTransform(newEntity, object, metadata, getLazyRelationsPromiseValue);\n // console.log(\"result:\", newEntity);\n return newEntity;\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n PlainObjectToNewEntityTransformer.prototype.groupAndTransform = function (entity, object, metadata, getLazyRelationsPromiseValue) {\n // console.log(\"groupAndTransform entity:\", entity);\n // console.log(\"groupAndTransform object:\", object);\n var _this = this;\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // copy regular column properties from the given object\n metadata.nonVirtualColumns.forEach(function (column) {\n var objectColumnValue = column.getEntityValue(object);\n if (objectColumnValue !== undefined)\n column.setEntityValue(entity, objectColumnValue);\n });\n // // copy relation properties from the given object\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n var entityRelatedValue = relation.getEntityValue(entity);\n var objectRelatedValue = relation.getEntityValue(object, getLazyRelationsPromiseValue);\n if (objectRelatedValue === undefined)\n return;\n if (relation.isOneToMany || relation.isManyToMany) {\n if (!Array.isArray(objectRelatedValue))\n return;\n if (!entityRelatedValue) {\n entityRelatedValue = [];\n relation.setEntityValue(entity, entityRelatedValue);\n }\n objectRelatedValue.forEach(function (objectRelatedValueItem) {\n // check if we have this item from the merging object in the original entity we merge into\n var objectRelatedValueEntity = entityRelatedValue.find(function (entityRelatedValueItem) {\n return relation.inverseEntityMetadata.compareEntities(objectRelatedValueItem, entityRelatedValueItem);\n });\n // if such item already exist then merge new data into it, if its not we create a new entity and merge it into the array\n if (!objectRelatedValueEntity) {\n objectRelatedValueEntity = relation.inverseEntityMetadata.create();\n entityRelatedValue.push(objectRelatedValueEntity);\n }\n _this.groupAndTransform(objectRelatedValueEntity, objectRelatedValueItem, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n });\n }\n else {\n // if related object isn't an object (direct relation id for example)\n // we just set it to the entity relation, we don't need anything more from it\n // however we do it only if original entity does not have this relation set to object\n // to prevent full overriding of objects\n if (!(objectRelatedValue instanceof Object)) {\n if (!(entityRelatedValue instanceof Object))\n relation.setEntityValue(entity, objectRelatedValue);\n return;\n }\n if (!entityRelatedValue) {\n entityRelatedValue = relation.inverseEntityMetadata.create();\n relation.setEntityValue(entity, entityRelatedValue);\n }\n _this.groupAndTransform(entityRelatedValue, objectRelatedValue, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n }\n });\n }\n };\n return PlainObjectToNewEntityTransformer;\n}());\nexport { PlainObjectToNewEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToNewEntityTransformer.js.map\n","import { __awaiter, __generator, __read } from \"tslib\";\n/**\n */\nvar LoadMapItem = /** @class */ (function () {\n function LoadMapItem(plainEntity, metadata, parentLoadMapItem, relation) {\n this.plainEntity = plainEntity;\n this.metadata = metadata;\n this.parentLoadMapItem = parentLoadMapItem;\n this.relation = relation;\n }\n Object.defineProperty(LoadMapItem.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LoadMapItem.prototype, \"id\", {\n get: function () {\n return this.metadata.getEntityIdMixedMap(this.plainEntity);\n },\n enumerable: false,\n configurable: true\n });\n return LoadMapItem;\n}());\nvar LoadMap = /** @class */ (function () {\n function LoadMap() {\n this.loadMapItems = [];\n }\n Object.defineProperty(LoadMap.prototype, \"mainLoadMapItem\", {\n get: function () {\n return this.loadMapItems.find(function (item) { return !item.relation && !item.parentLoadMapItem; });\n },\n enumerable: false,\n configurable: true\n });\n LoadMap.prototype.addLoadMap = function (newLoadMap) {\n var item = this.loadMapItems.find(function (item) { return item.target === newLoadMap.target && item.id === newLoadMap.id; });\n if (!item)\n this.loadMapItems.push(newLoadMap);\n };\n LoadMap.prototype.fillEntities = function (target, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n var item = _this.loadMapItems.find(function (loadMapItem) {\n return loadMapItem.target === target && loadMapItem.metadata.compareEntities(entity, loadMapItem.plainEntity);\n });\n if (item)\n item.entity = entity;\n });\n };\n LoadMap.prototype.groupByTargetIds = function () {\n var groups = [];\n this.loadMapItems.forEach(function (loadMapItem) {\n var group = groups.find(function (group) { return group.target === loadMapItem.target; });\n if (!group) {\n group = { target: loadMapItem.target, ids: [] };\n groups.push(group);\n }\n group.ids.push(loadMapItem.id);\n });\n return groups;\n };\n return LoadMap;\n}());\n/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToDatabaseEntityTransformer = /** @class */ (function () {\n function PlainObjectToDatabaseEntityTransformer(manager) {\n this.manager = manager;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToDatabaseEntityTransformer.prototype.transform = function (plainObject, metadata) {\n return __awaiter(this, void 0, void 0, function () {\n var loadMap, fillLoadMap;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if plain object does not have id then nothing to load really\n if (!metadata.hasAllPrimaryKeys(plainObject))\n return [2 /*return*/, Promise.reject(\"Given object does not have a primary column, cannot transform it to database entity.\")];\n loadMap = new LoadMap();\n fillLoadMap = function (entity, entityMetadata, parentLoadMapItem, relation) {\n var item = new LoadMapItem(entity, entityMetadata, parentLoadMapItem, relation);\n loadMap.addLoadMap(item);\n entityMetadata\n .extractRelationValuesFromEntity(entity, metadata.relations)\n .filter(function (value) { return value !== null && value !== undefined; })\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], value = _b[1], inverseEntityMetadata = _b[2];\n return fillLoadMap(value, inverseEntityMetadata, item, relation);\n });\n };\n fillLoadMap(plainObject, metadata);\n // load all entities and store them in the load map\n return [4 /*yield*/, Promise.all(loadMap.groupByTargetIds().map(function (targetWithIds) {\n return _this.manager\n .findByIds(targetWithIds.target, targetWithIds.ids)\n .then(function (entities) { return loadMap.fillEntities(targetWithIds.target, entities); });\n }))];\n case 1:\n // load all entities and store them in the load map\n _a.sent();\n // go through each item in the load map and set their entity relationship using metadata stored in load map\n loadMap.loadMapItems.forEach(function (loadMapItem) {\n if (!loadMapItem.relation ||\n !loadMapItem.entity ||\n !loadMapItem.parentLoadMapItem ||\n !loadMapItem.parentLoadMapItem.entity)\n return;\n if (loadMapItem.relation.isManyToMany || loadMapItem.relation.isOneToMany) {\n if (!loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName])\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = [];\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName].push(loadMapItem.entity);\n }\n else {\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = loadMapItem.entity;\n }\n });\n return [2 /*return*/, loadMap.mainLoadMapItem ? loadMap.mainLoadMapItem.entity : undefined];\n }\n });\n });\n };\n return PlainObjectToDatabaseEntityTransformer;\n}());\nexport { PlainObjectToDatabaseEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToDatabaseEntityTransformer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository was not found.\n */\nvar CustomRepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(CustomRepositoryNotFoundError, _super);\n function CustomRepositoryNotFoundError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryNotFoundError\";\n Object.setPrototypeOf(_this, CustomRepositoryNotFoundError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" was not found. \" +\n \"Did you forgot to put @EntityRepository decorator on it?\";\n return _this;\n }\n return CustomRepositoryNotFoundError;\n}(Error));\nexport { CustomRepositoryNotFoundError };\n\n//# sourceMappingURL=CustomRepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repositories that extend AbstractRepository classes does not have managed entity.\n */\nvar CustomRepositoryDoesNotHaveEntityError = /** @class */ (function (_super) {\n __extends(CustomRepositoryDoesNotHaveEntityError, _super);\n function CustomRepositoryDoesNotHaveEntityError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryDoesNotHaveEntityError\";\n Object.setPrototypeOf(_this, CustomRepositoryDoesNotHaveEntityError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" does not have managed entity. \" +\n \"Did you forget to specify entity for it @EntityRepository(MyEntity)? \";\n return _this;\n }\n return CustomRepositoryDoesNotHaveEntityError;\n}(Error));\nexport { CustomRepositoryDoesNotHaveEntityError };\n\n//# sourceMappingURL=CustomRepositoryDoesNotHaveEntityError.js.map\n","import { CustomRepositoryDoesNotHaveEntityError } from \"../error/CustomRepositoryDoesNotHaveEntityError\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\n/**\n * Provides abstract class for custom repositories that do not inherit from original orm Repository.\n * Contains all most-necessary methods to simplify code in the custom repository.\n * All methods are protected thus not exposed and it allows to create encapsulated custom repository.\n *\n * @experimental\n */\nvar AbstractRepository = /** @class */ (function () {\n function AbstractRepository() {\n }\n Object.defineProperty(AbstractRepository.prototype, \"repository\", {\n // -------------------------------------------------------------------------\n // Protected Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the original ORM repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AbstractRepository.prototype, \"treeRepository\", {\n /**\n * Gets the original ORM tree repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getTreeRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder for the repository's entity that can be used to build a sql query.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n AbstractRepository.prototype.createQueryBuilder = function (alias) {\n var target = this.getCustomRepositoryTarget(this.constructor);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target).createQueryBuilder(alias);\n };\n /**\n * Creates a new query builder for the given entity that can be used to build a sql query.\n */\n AbstractRepository.prototype.createQueryBuilderFor = function (entity, alias) {\n return this.getRepositoryFor(entity).createQueryBuilder(alias);\n };\n /**\n * Gets the original ORM repository for the given entity class.\n */\n AbstractRepository.prototype.getRepositoryFor = function (entity) {\n return this.manager.getRepository(entity);\n };\n /**\n * Gets the original ORM tree repository for the given entity class.\n */\n AbstractRepository.prototype.getTreeRepositoryFor = function (entity) {\n return this.manager.getTreeRepository(entity);\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Gets custom repository's managed entity.\n * If given custom repository does not manage any entity then undefined will be returned.\n */\n AbstractRepository.prototype.getCustomRepositoryTarget = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n return entityRepositoryMetadataArgs.entity;\n };\n return AbstractRepository;\n}());\nexport { AbstractRepository };\n\n//# sourceMappingURL=AbstractRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository inherits Repository class however entity is not set in @EntityRepository decorator.\n */\nvar CustomRepositoryCannotInheritRepositoryError = /** @class */ (function (_super) {\n __extends(CustomRepositoryCannotInheritRepositoryError, _super);\n function CustomRepositoryCannotInheritRepositoryError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryCannotInheritRepositoryError\";\n Object.setPrototypeOf(_this, CustomRepositoryCannotInheritRepositoryError.prototype);\n _this.message = \"Custom entity repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" \" +\n \" cannot inherit Repository class without entity being set in the @EntityRepository decorator.\";\n return _this;\n }\n return CustomRepositoryCannotInheritRepositoryError;\n}(Error));\nexport { CustomRepositoryCannotInheritRepositoryError };\n\n//# sourceMappingURL=CustomRepositoryCannotInheritRepositoryError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(RepositoryNotFoundError, _super);\n function RepositoryNotFoundError(connectionName, entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotFoundError\";\n Object.setPrototypeOf(_this, RepositoryNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"No repository for \\\"\" + targetName + \"\\\" was found. Looks like this entity is not registered in \" +\n (\"current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return RepositoryNotFoundError;\n}(Error));\nexport { RepositoryNotFoundError };\n\n//# sourceMappingURL=RepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotTreeError = /** @class */ (function (_super) {\n __extends(RepositoryNotTreeError, _super);\n function RepositoryNotTreeError(entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotTreeError\";\n Object.setPrototypeOf(_this, RepositoryNotTreeError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"Repository of the \\\"\" + targetName + \"\\\" class is not a TreeRepository. Try to apply @Tree decorator on your entity.\";\n return _this;\n }\n return RepositoryNotTreeError;\n}(Error));\nexport { RepositoryNotTreeError };\n\n//# sourceMappingURL=RepositoryNotTreeError.js.map\n","import { TreeRepository } from \"./TreeRepository\";\nimport { Repository } from \"./Repository\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoRepository } from \"./MongoRepository\";\n/**\n * Factory used to create different types of repositories.\n */\nvar RepositoryFactory = /** @class */ (function () {\n function RepositoryFactory() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a repository.\n */\n RepositoryFactory.prototype.create = function (manager, metadata, queryRunner) {\n if (metadata.treeType) {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = new TreeRepository();\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n else {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = void 0;\n if (manager.connection.driver instanceof MongoDriver) {\n repository = new MongoRepository();\n }\n else {\n repository = new Repository();\n }\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n };\n return RepositoryFactory;\n}());\nexport { RepositoryFactory };\n\n//# sourceMappingURL=RepositoryFactory.js.map\n","import { __extends } from \"tslib\";\nvar TreeRepositoryNotSupportedError = /** @class */ (function (_super) {\n __extends(TreeRepositoryNotSupportedError, _super);\n function TreeRepositoryNotSupportedError(driver) {\n var _this = _super.call(this) || this;\n _this.name = \"TreeRepositoryNotSupportedError\";\n Object.setPrototypeOf(_this, TreeRepositoryNotSupportedError.prototype);\n _this.message = \"Tree repositories are not supported in \" + driver.options.type + \" driver.\";\n return _this;\n }\n return TreeRepositoryNotSupportedError;\n}(Error));\nexport { TreeRepositoryNotSupportedError };\n\n//# sourceMappingURL=TreeRepositoryNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when method expects entity but instead something else is given.\n */\nvar MustBeEntityError = /** @class */ (function (_super) {\n __extends(MustBeEntityError, _super);\n function MustBeEntityError(operation, wrongValue) {\n var _this = _super.call(this) || this;\n _this.name = \"MustBeEntityError\";\n Object.setPrototypeOf(_this, MustBeEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be an entity, instead \\\"\" + wrongValue + \"\\\" is given.\";\n return _this;\n }\n return MustBeEntityError;\n}(Error));\nexport { MustBeEntityError };\n\n//# sourceMappingURL=MustBeEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nvar SubjectTopoligicalSorter = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectTopoligicalSorter(subjects) {\n this.subjects = __spreadArray([], __read(subjects)); // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sorts (orders) subjects in their topological order.\n */\n SubjectTopoligicalSorter.prototype.sort = function (direction) {\n var _this = this;\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n var sortedSubjects = [];\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n var junctionSubjects = this.subjects.filter(function (subject) { return !subject.entity && !subject.databaseEntity; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects)));\n this.removeAlreadySorted(junctionSubjects);\n }\n // next we always insert entities with non-nullable relations, sort them first\n var nonNullableDependencies = this.getNonNullableDependencies();\n var sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // next sort all other entities\n // same process as in above but with other entities\n var otherDependencies = this.getDependencies();\n var sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n sortedOtherEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // if we have something left in the subjects add them as well\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects)));\n return sortedSubjects;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n SubjectTopoligicalSorter.prototype.removeAlreadySorted = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.subjects.splice(_this.subjects.indexOf(subject), 1);\n });\n };\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n SubjectTopoligicalSorter.prototype.getUniqueMetadatas = function (subjects) {\n var metadatas = [];\n subjects.forEach(function (subject) {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getNonNullableDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n if (relation.isNullable)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n SubjectTopoligicalSorter.prototype.toposort = function (edges) {\n function uniqueNodes(arr) {\n var res = [];\n for (var i_1 = 0, len = arr.length; i_1 < len; i_1++) {\n var edge = arr[i_1];\n if (res.indexOf(edge[0]) < 0)\n res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0)\n res.push(edge[1]);\n }\n return res;\n }\n var nodes = uniqueNodes(edges);\n var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor;\n while (i--) {\n if (!visited[i])\n visit(nodes[i], i, []);\n }\n function visit(node, i, predecessors) {\n if (predecessors.indexOf(node) >= 0) {\n throw new Error(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n if (!~nodes.indexOf(node)) {\n throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n if (visited[i])\n return;\n visited[i] = true;\n // outgoing edges\n var outgoing = edges.filter(function (edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n var preds = predecessors.concat(node);\n do {\n var child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n sorted[--cursor] = node;\n }\n return sorted;\n };\n return SubjectTopoligicalSorter;\n}());\nexport { SubjectTopoligicalSorter };\n\n//# sourceMappingURL=SubjectTopoligicalSorter.js.map\n","import { DateUtils } from \"../util/DateUtils\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * Finds what columns are changed in the subject entities.\n */\nvar SubjectChangedColumnsComputer = /** @class */ (function () {\n function SubjectChangedColumnsComputer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Finds what columns are changed in the subject entities.\n */\n SubjectChangedColumnsComputer.prototype.compute = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.computeDiffColumns(subject);\n _this.computeDiffRelationalColumns(subjects, subject);\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffColumns = function (subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.columns.forEach(function (column) {\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return;\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.column === column; });\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n // get user provided value - column value from the user provided persisted entity\n var entityValue = column.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n var shouldTransformDatabaseEntity = column.type !== \"json\" && column.type !== \"jsonb\";\n // get database value of the column\n var databaseValue = column.getEntityValue(subject.databaseEntity, shouldTransformDatabaseEntity);\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n var value = column.relationMetadata.getEntityValue(subject.entity);\n if (value !== null && value !== undefined)\n return;\n }\n var normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue))\n return;\n break;\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(column.transformer, entityValue);\n }\n }\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n };\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffRelationalColumns = function (allSubjects, subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.relationsWithJoinColumns.forEach(function (relation) {\n // get the related entity from the persisted entity\n var relatedEntity = relation.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n var relatedEntityRelationIdMap = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap);\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n var databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n // if relation ids are equal then we don't need to update anything\n var areRelatedIdsEqual = OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n }\n else {\n subject.diffRelations.push(relation);\n }\n }\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n var valueSubject = allSubjects.find(function (subject) { return subject.mustBeInserted && subject.entity === relatedEntity; });\n if (valueSubject)\n relatedEntity = valueSubject;\n // find if there is already a relation to be changed\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.relation === relation; });\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n }\n else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n };\n return SubjectChangedColumnsComputer;\n}());\nexport { SubjectChangedColumnsComputer };\n\n//# sourceMappingURL=SubjectChangedColumnsComputer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when operation is going to be executed on a subject without identifier.\n * This error should never be thrown, however it still presents to prevent user from updation or removing the whole table.\n * If this error occurs still, it most probably is an ORM internal problem which must be reported and fixed.\n */\nvar SubjectWithoutIdentifierError = /** @class */ (function (_super) {\n __extends(SubjectWithoutIdentifierError, _super);\n function SubjectWithoutIdentifierError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectWithoutIdentifierError\";\n Object.setPrototypeOf(_this, SubjectWithoutIdentifierError.prototype);\n _this.message = \"Internal error. Subject \" + subject.metadata.targetName + \" must have an identifier to perform operation. \" +\n \"Please report a github issue if you face this error.\";\n return _this;\n }\n return SubjectWithoutIdentifierError;\n}(Error));\nexport { SubjectWithoutIdentifierError };\n\n//# sourceMappingURL=SubjectWithoutIdentifierError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when same object is scheduled for remove and updation at the same time.\n */\nvar SubjectRemovedAndUpdatedError = /** @class */ (function (_super) {\n __extends(SubjectRemovedAndUpdatedError, _super);\n function SubjectRemovedAndUpdatedError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectRemovedAndUpdatedError\";\n Object.setPrototypeOf(_this, SubjectRemovedAndUpdatedError.prototype);\n _this.message = \"Removed entity \\\"\" + subject.metadata.name + \"\\\" is also scheduled for update operation. \" +\n \"Make sure you are not updating and removing same object (note that update or remove may be executed by cascade operations).\";\n return _this;\n }\n return SubjectRemovedAndUpdatedError;\n}(Error));\nexport { SubjectRemovedAndUpdatedError };\n\n//# sourceMappingURL=SubjectRemovedAndUpdatedError.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Executes subject operations for nested set tree entities.\n */\nvar NestedSetSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NestedSetSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n NestedSetSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var escape, tableName, leftColumnName, rightColumnName, parent, parentId, parentNsRight;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n escape = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.tablePath);\n leftColumnName = escape(subject.metadata.nestedSetLeftColumn.databaseName);\n rightColumnName = escape(subject.metadata.nestedSetRightColumn.databaseName);\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentNsRight = undefined;\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.nestedSetRightColumn.propertyPath, \"right\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) {\n var value = result ? result[\"right\"] : undefined;\n // CockroachDB returns numeric types as string\n return typeof value === \"string\" ? parseInt(value) : value;\n })];\n case 1:\n parentNsRight = _a.sent();\n _a.label = 2;\n case 2:\n if (!(parentNsRight !== undefined)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.queryRunner.query(\"UPDATE \" + tableName + \" SET \" +\n (leftColumnName + \" = CASE WHEN \" + leftColumnName + \" > \" + parentNsRight + \" THEN \" + leftColumnName + \" + 2 ELSE \" + leftColumnName + \" END,\") +\n (rightColumnName + \" = \" + rightColumnName + \" + 2 \") +\n (\"WHERE \" + rightColumnName + \" >= \" + parentNsRight))];\n case 3:\n _a.sent();\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(parentNsRight), subject.metadata.nestedSetRightColumn.createValueMap(parentNsRight + 1));\n return [3 /*break*/, 5];\n case 4:\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(1), subject.metadata.nestedSetRightColumn.createValueMap(2));\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n NestedSetSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return NestedSetSubjectExecutor;\n}());\nexport { NestedSetSubjectExecutor };\n\n//# sourceMappingURL=NestedSetSubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user saves tree children entity but its parent is not saved yet.\n*/\nvar CannotAttachTreeChildrenEntityError = /** @class */ (function (_super) {\n __extends(CannotAttachTreeChildrenEntityError, _super);\n function CannotAttachTreeChildrenEntityError(entityName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotAttachTreeChildrenEntityError\";\n Object.setPrototypeOf(_this, CannotAttachTreeChildrenEntityError.prototype);\n _this.message = \"Cannot attach entity \\\"\" + entityName + \"\\\" to its parent. Please make sure parent is saved in the database before saving children nodes.\";\n return _this;\n }\n return CannotAttachTreeChildrenEntityError;\n}(Error));\nexport { CannotAttachTreeChildrenEntityError };\n\n//# sourceMappingURL=CannotAttachTreeChildrenEntityError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { CannotAttachTreeChildrenEntityError } from \"../../error/CannotAttachTreeChildrenEntityError\";\n/**\n * Executes subject operations for closure entities.\n */\nvar ClosureSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Removes all children of the given subject's entity.\n\n async deleteChildrenOf(subject: Subject) {\n // const relationValue = subject.metadata.treeParentRelation.getEntityValue(subject.databaseEntity);\n // console.log(\"relationValue: \", relationValue);\n // this.queryRunner.manager\n // .createQueryBuilder()\n // .from(subject.metadata.closureJunctionTable.target, \"tree\")\n // .where(\"tree.\");\n }*/\n /**\n * Executes operations when subject is being inserted.\n */\n ClosureSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var closureJunctionInsertMap, parent, escape_1, tableName, ancestorColumnNames, descendantColumnNames, firstQueryParameters_1, childEntityIdValues_1, childEntityIds1, whereCondition;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n closureJunctionInsertMap = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n // insert values into the closure junction table\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute()];\n case 1:\n // insert values into the closure junction table\n _a.sent();\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n if (!parent) return [3 /*break*/, 3];\n escape_1 = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n firstQueryParameters_1 = [];\n childEntityIdValues_1 = subject.metadata.primaryColumns.map(function (column) { return column.getEntityValue(subject.insertedValueSet); });\n childEntityIds1 = subject.metadata.primaryColumns.map(function (column, index) {\n firstQueryParameters_1.push(childEntityIdValues_1[index]);\n return _this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, firstQueryParameters_1.length - 1);\n });\n whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n var columnName = escape_1(column.databaseName);\n var parentId = column.referencedColumn.getEntityValue(parent);\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n firstQueryParameters_1.push(parentId);\n var parameterName = _this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn.databaseName, firstQueryParameters_1.length - 1);\n return columnName + \" = \" + parameterName;\n }).join(\", \");\n return [4 /*yield*/, this.queryRunner.query(\"INSERT INTO \" + tableName + \" (\" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(\", \") + \") \" +\n (\"SELECT \" + ancestorColumnNames.join(\", \") + \", \" + childEntityIds1.join(\", \") + \" FROM \" + tableName + \" WHERE \" + whereCondition), firstQueryParameters_1)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n ClosureSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return ClosureSubjectExecutor;\n}());\nexport { ClosureSubjectExecutor };\n\n//# sourceMappingURL=ClosureSubjectExecutor.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Executes subject operations for materialized-path tree entities.\n */\nvar MaterializedPathSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MaterializedPathSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n MaterializedPathSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var parent, parentId, parentPath, insertedEntityId;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentPath = \"\";\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) { return result ? result[\"path\"] : undefined; })];\n case 1:\n parentPath = _b.sent();\n _b.label = 2;\n case 2:\n insertedEntityId = subject.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n return joinColumn.referencedColumn.getEntityValue(subject.insertedValueSet);\n }).join(\"_\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set((_a = {},\n _a[subject.metadata.materializedPathColumn.propertyPath] = parentPath + insertedEntityId + \".\",\n _a))\n .where(subject.identifier)\n .execute()];\n case 3:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return MaterializedPathSubjectExecutor;\n}());\nexport { MaterializedPathSubjectExecutor };\n\n//# sourceMappingURL=MaterializedPathSubjectExecutor.js.map\n","import { __awaiter, __generator, __read, __values } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SubjectTopoligicalSorter } from \"./SubjectTopoligicalSorter\";\nimport { SubjectChangedColumnsComputer } from \"./SubjectChangedColumnsComputer\";\nimport { SubjectWithoutIdentifierError } from \"../error/SubjectWithoutIdentifierError\";\nimport { SubjectRemovedAndUpdatedError } from \"../error/SubjectRemovedAndUpdatedError\";\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { NestedSetSubjectExecutor } from \"./tree/NestedSetSubjectExecutor\";\nimport { ClosureSubjectExecutor } from \"./tree/ClosureSubjectExecutor\";\nimport { MaterializedPathSubjectExecutor } from \"./tree/MaterializedPathSubjectExecutor\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nvar SubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectExecutor(queryRunner, subjects, options) {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n this.hasExecutableOperations = false;\n /**\n * Subjects that must be inserted.\n */\n this.insertSubjects = [];\n /**\n * Subjects that must be updated.\n */\n this.updateSubjects = [];\n /**\n * Subjects that must be removed.\n */\n this.removeSubjects = [];\n /**\n * Subjects that must be soft-removed.\n */\n this.softRemoveSubjects = [];\n /**\n * Subjects that must be recovered.\n */\n this.recoverSubjects = [];\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n SubjectExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var broadcasterResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n broadcasterResult = undefined;\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 2];\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(function (subject) { return subject.recompute(); });\n this.updateSubjects.forEach(function (subject) { return subject.recompute(); });\n this.removeSubjects.forEach(function (subject) { return subject.recompute(); });\n this.softRemoveSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recoverSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n // console.timeEnd(\"prepare\");\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n return [4 /*yield*/, this.executeInsertOperations()];\n case 3:\n _a.sent();\n // console.timeEnd(\".insertion\");\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n // execute update operations\n // console.time(\".updation\");\n return [4 /*yield*/, this.executeUpdateOperations()];\n case 4:\n // execute update operations\n // console.time(\".updation\");\n _a.sent();\n // console.timeEnd(\".updation\");\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n return [4 /*yield*/, this.executeRemoveOperations()];\n case 5:\n _a.sent();\n // console.timeEnd(\".removal\");\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n // execute soft-remove operations\n return [4 /*yield*/, this.executeSoftRemoveOperations()];\n case 6:\n // execute soft-remove operations\n _a.sent();\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n // execute recover operations\n return [4 /*yield*/, this.executeRecoverOperations()];\n case 7:\n // execute recover operations\n _a.sent();\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n return [4 /*yield*/, this.updateSpecialColumnsInPersistedEntities()];\n case 8:\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n _a.sent();\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 10];\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given subjects.\n */\n SubjectExecutor.prototype.validate = function () {\n this.allSubjects.forEach(function (subject) {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n };\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n SubjectExecutor.prototype.recompute = function () {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeInserted; });\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n this.removeSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRemoved; });\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n };\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n SubjectExecutor.prototype.broadcastBeforeEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n SubjectExecutor.prototype.broadcastAfterEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Executes insert operations.\n */\n SubjectExecutor.prototype.executeInsertOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedInsertSubjects, groupedInsertSubjectKeys, _loop_1, this_1, groupedInsertSubjectKeys_1, groupedInsertSubjectKeys_1_1, groupName, e_1_1;\n var e_1, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.insertSubjects, \"insert\"), 2), groupedInsertSubjects = _a[0], groupedInsertSubjectKeys = _a[1];\n _loop_1 = function (groupName) {\n var subjects, bulkInsertMaps, bulkInsertSubjects, singleInsertSubjects, manager, insertResult_1, insertResult_2, _loop_2, singleInsertSubjects_1, singleInsertSubjects_1_1, subject, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n subjects = groupedInsertSubjects[groupName];\n bulkInsertMaps = [];\n bulkInsertSubjects = [];\n singleInsertSubjects = [];\n if (this_1.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(function (subject) {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n subject.createValueSetAndPopChangeMap();\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity);\n });\n }\n else if (this_1.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(function (subject) {\n singleInsertSubjects.push(subject);\n });\n }\n else {\n subjects.forEach(function (subject) {\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n _this.queryRunner.connection.driver instanceof OracleDriver ||\n _this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n }\n else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n if (!(this_1.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n manager = this_1.queryRunner.manager;\n return [4 /*yield*/, manager.insert(subjects[0].metadata.target, bulkInsertMaps)];\n case 1:\n insertResult_1 = _e.sent();\n subjects.forEach(function (subject, index) {\n subject.identifier = insertResult_1.identifiers[index];\n subject.generatedMap = insertResult_1.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n return [3 /*break*/, 12];\n case 2:\n if (!(bulkInsertMaps.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()];\n case 3:\n insertResult_2 = _e.sent();\n bulkInsertSubjects.forEach(function (subject, index) {\n subject.identifier = insertResult_2.identifiers[index];\n subject.generatedMap = insertResult_2.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n _e.label = 4;\n case 4:\n if (!(singleInsertSubjects.length > 0)) return [3 /*break*/, 12];\n _loop_2 = function (subject) {\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n if (!(subject.metadata.treeType === \"nested-set\")) return [3 /*break*/, 2];\n return [4 /*yield*/, new NestedSetSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 1:\n _f.sent();\n _f.label = 2;\n case 2: return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(function (insertResult) {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n })];\n case 3:\n _f.sent();\n if (!(subject.metadata.treeType === \"closure-table\")) return [3 /*break*/, 5];\n return [4 /*yield*/, new ClosureSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 4:\n _f.sent();\n return [3 /*break*/, 7];\n case 5:\n if (!(subject.metadata.treeType === \"materialized-path\")) return [3 /*break*/, 7];\n return [4 /*yield*/, new MaterializedPathSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 6:\n _f.sent();\n _f.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n };\n _e.label = 5;\n case 5:\n _e.trys.push([5, 10, 11, 12]);\n singleInsertSubjects_1 = (e_2 = void 0, __values(singleInsertSubjects)), singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n _e.label = 6;\n case 6:\n if (!!singleInsertSubjects_1_1.done) return [3 /*break*/, 9];\n subject = singleInsertSubjects_1_1.value;\n return [5 /*yield**/, _loop_2(subject)];\n case 7:\n _e.sent();\n _e.label = 8;\n case 8:\n singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n return [3 /*break*/, 6];\n case 9: return [3 /*break*/, 12];\n case 10:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 12];\n case 11:\n try {\n if (singleInsertSubjects_1_1 && !singleInsertSubjects_1_1.done && (_d = singleInsertSubjects_1.return)) _d.call(singleInsertSubjects_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 12:\n subjects.forEach(function (subject) {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n });\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 8]);\n groupedInsertSubjectKeys_1 = __values(groupedInsertSubjectKeys), groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedInsertSubjectKeys_1_1.done) return [3 /*break*/, 5];\n groupName = groupedInsertSubjectKeys_1_1.value;\n return [5 /*yield**/, _loop_1(groupName)];\n case 3:\n _c.sent();\n _c.label = 4;\n case 4:\n groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (groupedInsertSubjectKeys_1_1 && !groupedInsertSubjectKeys_1_1.done && (_b = groupedInsertSubjectKeys_1.return)) _b.call(groupedInsertSubjectKeys_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all given subjects in the database.\n */\n SubjectExecutor.prototype.executeUpdateOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.updateSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, updateMap, updateQueryBuilder, updateResult, updateGeneratedMap_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n updateMap = subject.createValueSetAndPopChangeMap();\n updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, updateQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n updateGeneratedMap_1 = updateResult.generatedMaps[0];\n if (updateGeneratedMap_1) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(updateGeneratedMap_1);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap_1, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap_1);\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n SubjectExecutor.prototype.executeRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedRemoveSubjects, groupedRemoveSubjectKeys, groupedRemoveSubjectKeys_1, groupedRemoveSubjectKeys_1_1, groupName, subjects, deleteMaps, manager, e_3_1;\n var e_3, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.removeSubjects, \"delete\"), 2), groupedRemoveSubjects = _a[0], groupedRemoveSubjectKeys = _a[1];\n _c.label = 1;\n case 1:\n _c.trys.push([1, 8, 9, 10]);\n groupedRemoveSubjectKeys_1 = __values(groupedRemoveSubjectKeys), groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedRemoveSubjectKeys_1_1.done) return [3 /*break*/, 7];\n groupName = groupedRemoveSubjectKeys_1_1.value;\n subjects = groupedRemoveSubjects[groupName];\n deleteMaps = subjects.map(function (subject) {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n return subject.identifier;\n });\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 4];\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.delete(subjects[0].metadata.target, deleteMaps)];\n case 3:\n _c.sent();\n return [3 /*break*/, 6];\n case 4: \n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute()];\n case 5:\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n _c.sent();\n _c.label = 6;\n case 6:\n groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_3_1 = _c.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (groupedRemoveSubjectKeys_1_1 && !groupedRemoveSubjectKeys_1_1.done && (_b = groupedRemoveSubjectKeys_1.return)) _b.call(groupedRemoveSubjectKeys_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Soft-removes all given subjects in the database.\n */\n SubjectExecutor.prototype.executeSoftRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.softRemoveSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Recovers all given subjects in the database.\n */\n SubjectExecutor.prototype.executeRecoverOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.recoverSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInPersistedEntities = function () {\n var _this = this;\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.primaryColumns.forEach(function (primaryColumn) {\n primaryColumn.setEntityValue(subject.entity, undefined);\n });\n });\n }\n // other post-persist updations\n this.allSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.relationIds.forEach(function (relationId) {\n relationId.setValue(subject.entity);\n });\n // mongo _id remove\n if (_this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInInsertedAndUpdatedEntities = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n // update nullable columns\n if (column.isNullable) {\n var columnValue = column.getEntityValue(subject.entity);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity, null);\n }\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(function (updatedRelationMap) {\n updatedRelationMap.relation.joinColumns.forEach(function (column) {\n if (column.isVirtual === true)\n return;\n column.setEntityValue(subject.entity, updatedRelationMap.value instanceof Object ? column.referencedColumn.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n _this.queryRunner.manager.merge(subject.metadata.target, subject.entity, subject.generatedMap);\n });\n };\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n SubjectExecutor.prototype.groupBulkSubjects = function (subjects, type) {\n var group = {};\n var keys = [];\n var groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n subjects.forEach(function (subject, index) {\n var key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n }\n else {\n group[key].push(subject);\n }\n });\n return [group, keys];\n };\n return SubjectExecutor;\n}());\nexport { SubjectExecutor };\n\n//# sourceMappingURL=SubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to save/remove/etc. constructor-less object (object literal) instead of entity.\n */\nvar CannotDetermineEntityError = /** @class */ (function (_super) {\n __extends(CannotDetermineEntityError, _super);\n function CannotDetermineEntityError(operation) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotDetermineEntityError\";\n Object.setPrototypeOf(_this, CannotDetermineEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be instance of entity class, instead object literal is given. Or you must specify an entity target to method call.\";\n return _this;\n }\n return CannotDetermineEntityError;\n}(Error));\nexport { CannotDetermineEntityError };\n\n//# sourceMappingURL=CannotDetermineEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nvar Subject = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Subject(options) {\n var _a;\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n this.identifier = undefined;\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n this.entityWithFulfilledIds = undefined;\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n this.databaseEntityLoaded = false;\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n this.changeMaps = [];\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n this.canBeInserted = false;\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n this.canBeUpdated = false;\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n this.mustBeRemoved = false;\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n this.canBeSoftRemoved = false;\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n this.canBeRecovered = false;\n /**\n * Relations updated by the change maps.\n */\n this.updatedRelationMaps = [];\n /**\n * List of updated columns\n */\n this.diffColumns = [];\n /**\n * List of updated relations\n */\n this.diffRelations = [];\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n (_a = this.changeMaps).push.apply(_a, __spreadArray([], __read(options.changeMaps)));\n this.recompute();\n }\n Object.defineProperty(Subject.prototype, \"mustBeInserted\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get: function () {\n return this.canBeInserted && !this.databaseEntity;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeUpdated\", {\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeSoftRemoved\", {\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeRecovered\", {\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n Subject.prototype.createValueSetAndPopChangeMap = function () {\n var _this = this;\n var changeMapsWithoutValues = [];\n var changeSet = this.changeMaps.reduce(function (updateMap, changeMap) {\n var value = changeMap.value;\n if (value instanceof Subject) {\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n var valueMap;\n if (_this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn.getEntityValue(value));\n }\n else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n }\n else if (changeMap.relation) {\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object) {\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n var relationId = changeMap.relation.getRelationIdMap(value);\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n _this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation.createValueMap(relationId);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n }\n else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation.createValueMap(value);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {});\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n };\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n Subject.prototype.recompute = function () {\n var _this = this;\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(function (primaryColumn) {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === _this.parentSubject.metadata) {\n var value = primaryColumn.referencedColumn.getEntityValue(_this.parentSubject.entity);\n primaryColumn.setEntityValue(_this.entityWithFulfilledIds, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n }\n else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n };\n return Subject;\n}());\nexport { Subject };\n\n//# sourceMappingURL=Subject.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\";\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n OneToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // prepare objects (relation id maps) for the database entity\n // note: subject.databaseEntity contains relations with loaded relation ids only\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n var relatedEntityDatabaseRelationIds = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationIds = relation.getEntityValue(subject.databaseEntity);\n }\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n // extract only relation ids from the related entities, since we only need them for comparision\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n var relatedPersistedEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n return;\n }\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n var relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(function (relatedDatabaseEntityRelationId) {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n _this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(function (removedRelatedEntityRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation,\n value: null\n }];\n }\n else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n _this.subjects.push(removedRelatedEntitySubject);\n });\n };\n return OneToManySubjectBuilder;\n}());\nexport { OneToManySubjectBuilder };\n\n//# sourceMappingURL=OneToManySubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for one-to-one non-owner relations of the given subjects.\n *\n * by example: post contains one-to-one non-owner relation with category in the property called \"category\", e.g.\n * @OneToOne(type => Category, category => category.post) category: Category\n * If user sets a category into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToManyUpdateBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToOneInverseSideSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToOneInverseSideSubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToOneInverseSideSubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToOneRelations.forEach(function (relation) {\n // we don't need owning relations, this operation is only for inverse side of one-to-one relations\n // skip relations for which persistence is disabled\n if (relation.isOwning || relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"category\" inside it here.\n */\n OneToOneInverseSideSubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n // prepare objects (relation id map) for the database entity\n // note: subject.databaseEntity contains relation with loaded relation id only (id map)\n // by example: since subject is a post, we are expecting to get post's category saved in the database here,\n // particularly its relation id, e.g. category id stored in the database\n var relatedEntityDatabaseRelationId = undefined;\n if (subject.databaseEntity) // related entity in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationId = relation.getEntityValue(subject.databaseEntity);\n // get related entities of persisted entity\n // by example: get category from the passed to persist post entity\n var relatedEntity = relation.getEntityValue(subject.entity); // by example: relatedEntity is a category here\n if (relatedEntity === undefined) // if relation is undefined then nothing to update\n return;\n // if related entity is null then we need to check if there a bind in the database and unset it\n // if there is no bind in the entity then we don't need to do anything\n // by example: if post.category = null and category has this post in the database then we unset it\n if (relatedEntity === null) {\n // it makes sense to update database only there is a previously set value in the database\n if (relatedEntityDatabaseRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relatedEntityDatabaseRelationId,\n changeMaps: [{\n relation: relation.inverseRelation,\n value: null\n }]\n });\n this.subjects.push(removedRelatedEntitySubject);\n }\n return;\n } // else means entity is bind in the database\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = this.subjects.find(function (operateSubject) {\n return !!operateSubject.entity && operateSubject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains category which does not have id(s) yet (because its a new category)\n // it means its always newly inserted and relation update operation always must be created for it\n // it does not make sense to perform difference operation for it for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-one inverse relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entity which does not exist in the database yet, thus cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entity before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is OneToOne owner relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // check if this binding really exist in the database\n // by example: find our post if its already bind to category in the database and its not equal to what user tries to set\n var areRelatedIdEqualWithDatabase = relatedEntityDatabaseRelationId && OrmUtils.compareIds(relationIdMap, relatedEntityDatabaseRelationId);\n // if they aren't equal it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!areRelatedIdEqualWithDatabase) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n };\n return OneToOneInverseSideSubjectBuilder;\n}());\nexport { OneToOneInverseSideSubjectBuilder };\n\n//# sourceMappingURL=OneToOneInverseSideSubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * by example: post contains owner many-to-many relation with categories in the property called \"categories\", e.g.\n * @ManyToMany(type => Category, category => category.posts) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of junction table.\n */\nvar ManyToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ManyToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n ManyToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n */\n ManyToManySubjectBuilder.prototype.buildForAllRemoval = function (subject) {\n var _this = this;\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n var relatedEntityRelationIdsInDatabase = relation.getEntityValue(subject.databaseEntity);\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach(function (relationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, relationId)\n });\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n _this.subjects.push(junctionSubject);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n ManyToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n var databaseRelatedEntityIds = [];\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity)\n databaseRelatedEntityIds = relation.getEntityValue(subject.databaseEntity);\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities = [];\n if (!(Array.isArray(relatedEntities)))\n return;\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach(function (relatedEntity) {\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n }\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n var relatedEntityExistInDatabase = databaseRelatedEntityIds.find(function (databaseRelatedEntityRelationId) {\n return OrmUtils.compareIds(databaseRelatedEntityRelationId, relatedEntityRelationIdMap);\n });\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase)\n return;\n var ownerValue = relation.isOwning ? subject : (relatedEntitySubject || relatedEntity); // by example: ownerEntityMap is post from subject here\n var inverseValue = relation.isOwning ? (relatedEntitySubject || relatedEntity) : subject; // by example: inverseEntityMap is category from categories array here\n // create a new subject for insert operation of junction rows\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n canBeInserted: true,\n });\n _this.subjects.push(junctionSubject);\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n });\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n });\n });\n });\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n var changedInverseEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n if (relatedEntityRelationIdMap !== undefined && relatedEntityRelationIdMap !== null)\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap);\n });\n // now from all entities in the persisted entity find only those which aren't found in the db\n var removedJunctionEntityIds = databaseRelatedEntityIds.filter(function (existRelationId) {\n return !changedInverseEntityRelationIds.find(function (changedRelationId) {\n return OrmUtils.compareIds(changedRelationId, existRelationId);\n });\n });\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach(function (removedEntityRelationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, removedEntityRelationId)\n });\n _this.subjects.push(junctionSubject);\n });\n };\n /**\n * Creates identifiers for junction table.\n * Example: { postId: 1, categoryId: 2 }\n */\n ManyToManySubjectBuilder.prototype.buildJunctionIdentifier = function (subject, relation, relationId) {\n var ownerEntityMap = relation.isOwning ? subject.entity : relationId;\n var inverseEntityMap = relation.isOwning ? relationId : subject.entity;\n var identifier = {};\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(ownerEntityMap)));\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(inverseEntityMap)));\n });\n return identifier;\n };\n return ManyToManySubjectBuilder;\n}());\nexport { ManyToManySubjectBuilder };\n\n//# sourceMappingURL=ManyToManySubjectBuilder.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nvar SubjectDatabaseEntityLoader = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function SubjectDatabaseEntityLoader(queryRunner, subjects) {\n this.queryRunner = queryRunner;\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n SubjectDatabaseEntityLoader.prototype.load = function (operationType) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = this.groupByEntityTargets().map(function (subjectGroup) { return __awaiter(_this, void 0, void 0, function () {\n var allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n allIds = [];\n allSubjects = [];\n subjectGroup.subjects.forEach(function (subject) {\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return [2 /*return*/];\n loadRelationPropertyPaths = [];\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(function (subject) {\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(function (relation) {\n var value = relation.getEntityValue(subject.entityWithFulfilledIds);\n if (value === undefined)\n return;\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n }\n else { // remove\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push.apply(// remove\n loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; }))));\n }\n findOptions = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n return [4 /*yield*/, this.queryRunner.manager\n .getRepository(subjectGroup.target)\n .findByIds(allIds, findOptions)];\n case 1:\n entities = _b.sent();\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(function (entity) {\n var subjects = _this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(function (subject) {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n try {\n // this way we tell what subjects we tried to load database entities of\n for (allSubjects_1 = __values(allSubjects), allSubjects_1_1 = allSubjects_1.next(); !allSubjects_1_1.done; allSubjects_1_1 = allSubjects_1.next()) {\n subject = allSubjects_1_1.value;\n subject.databaseEntityLoaded = true;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allSubjects_1_1 && !allSubjects_1_1.done && (_a = allSubjects_1.return)) _a.call(allSubjects_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n SubjectDatabaseEntityLoader.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.subjects.filter(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n SubjectDatabaseEntityLoader.prototype.groupByEntityTargets = function () {\n return this.subjects.reduce(function (groups, operatedEntity) {\n var group = groups.find(function (group) { return group.target === operatedEntity.metadata.target; });\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, []);\n };\n return SubjectDatabaseEntityLoader;\n}());\nexport { SubjectDatabaseEntityLoader };\n\n//# sourceMappingURL=SubjectDatabaseEntityLoader.js.map\n","import { __read } from \"tslib\";\nimport { Subject } from \"../Subject\";\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nvar CascadesSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CascadesSubjectBuilder(allSubjects) {\n this.allSubjects = allSubjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n */\n CascadesSubjectBuilder.prototype.build = function (subject, operationType) {\n var _this = this;\n subject.metadata\n .extractRelationValuesFromEntity(subject.entity, subject.metadata.relations) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], relationEntity = _b[1], relationEntityMetadata = _b[2];\n // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set\n if (relationEntity === undefined ||\n relationEntity === null ||\n (!relation.isCascadeInsert && !relation.isCascadeUpdate && !relation.isCascadeSoftRemove && !relation.isCascadeRecover))\n return;\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!(relationEntity instanceof Object))\n return;\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n var alreadyExistRelationEntitySubject = _this.findByPersistEntityLike(relationEntityMetadata.target, relationEntity);\n if (alreadyExistRelationEntitySubject) {\n if (alreadyExistRelationEntitySubject.canBeInserted === false) // if its not marked for insertion yet\n alreadyExistRelationEntitySubject.canBeInserted = relation.isCascadeInsert === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeUpdated === false) // if its not marked for update yet\n alreadyExistRelationEntitySubject.canBeUpdated = relation.isCascadeUpdate === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeSoftRemoved === false) // if its not marked for removal yet\n alreadyExistRelationEntitySubject.canBeSoftRemoved = relation.isCascadeSoftRemove === true && operationType === \"soft-remove\";\n if (alreadyExistRelationEntitySubject.canBeRecovered === false) // if its not marked for recovery yet\n alreadyExistRelationEntitySubject.canBeRecovered = relation.isCascadeRecover === true && operationType === \"recover\";\n return;\n }\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n var relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted: relation.isCascadeInsert === true && operationType === \"save\",\n canBeUpdated: relation.isCascadeUpdate === true && operationType === \"save\",\n canBeSoftRemoved: relation.isCascadeSoftRemove === true && operationType === \"soft-remove\",\n canBeRecovered: relation.isCascadeRecover === true && operationType === \"recover\"\n });\n _this.allSubjects.push(relationEntitySubject);\n // go recursively and find other entities we need to insert/update\n _this.build(relationEntitySubject, operationType);\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subject where entity like given subject's entity.\n * Comparision made by entity id.\n */\n CascadesSubjectBuilder.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.allSubjects.find(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n return CascadesSubjectBuilder;\n}());\nexport { CascadesSubjectBuilder };\n\n//# sourceMappingURL=CascadesSubjectBuilder.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { MustBeEntityError } from \"../error/MustBeEntityError\";\nimport { SubjectExecutor } from \"./SubjectExecutor\";\nimport { CannotDetermineEntityError } from \"../error/CannotDetermineEntityError\";\nimport { Subject } from \"./Subject\";\nimport { OneToManySubjectBuilder } from \"./subject-builder/OneToManySubjectBuilder\";\nimport { OneToOneInverseSideSubjectBuilder } from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport { ManyToManySubjectBuilder } from \"./subject-builder/ManyToManySubjectBuilder\";\nimport { SubjectDatabaseEntityLoader } from \"./SubjectDatabaseEntityLoader\";\nimport { CascadesSubjectBuilder } from \"./subject-builder/CascadesSubjectBuilder\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nvar EntityPersistExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityPersistExecutor(connection, queryRunner, mode, target, entity, options) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.mode = mode;\n this.target = target;\n this.entity = entity;\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes persistence operation ob given entity or entities.\n */\n EntityPersistExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, executorsWithExecutableOperations_1, executorsWithExecutableOperations_1_1, executor, e_1_1, error_1, rollbackError_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // check if entity we are going to save is valid and is an object\n if (!this.entity || typeof this.entity !== \"object\")\n return [2 /*return*/, Promise.reject(new MustBeEntityError(this.mode, this.entity))];\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return [4 /*yield*/, Promise.resolve()];\n case 1:\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n _b.sent();\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 22, 25]);\n entities = Array.isArray(this.entity) ? this.entity : [this.entity];\n entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n return [4 /*yield*/, Promise.all(entitiesInChunks.map(function (entities) { return __awaiter(_this, void 0, void 0, function () {\n var subjects, cascadesSubjectBuilder;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n subjects = [];\n // create subjects for all entities we received for the persistence\n entities.forEach(function (entity) {\n var entityTarget = _this.target ? _this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(_this.mode);\n subjects.push(new Subject({\n metadata: _this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: _this.mode === \"save\",\n canBeUpdated: _this.mode === \"save\",\n mustBeRemoved: _this.mode === \"remove\",\n canBeSoftRemoved: _this.mode === \"soft-remove\",\n canBeRecovered: _this.mode === \"recover\"\n }));\n });\n cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(function (subject) {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, _this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n return [4 /*yield*/, new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode)];\n case 1:\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n _a.sent();\n // console.timeEnd(\"loading...\");\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n }\n else {\n subjects.forEach(function (subject) {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n // create a subject executor\n return [2 /*return*/, new SubjectExecutor(queryRunner, subjects, this.options)];\n }\n });\n }); }))];\n case 3:\n executors = _b.sent();\n executorsWithExecutableOperations = executors.filter(function (executor) { return executor.hasExecutableOperations; });\n if (executorsWithExecutableOperations.length === 0)\n return [2 /*return*/];\n isTransactionStartedByUs = false;\n _b.label = 4;\n case 4:\n _b.trys.push([4, 16, , 21]);\n if (!!queryRunner.isTransactionActive) return [3 /*break*/, 6];\n if (!(!this.options || this.options.transaction !== false)) return [3 /*break*/, 6];\n isTransactionStartedByUs = true;\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n _b.trys.push([6, 11, 12, 13]);\n executorsWithExecutableOperations_1 = __values(executorsWithExecutableOperations), executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n _b.label = 7;\n case 7:\n if (!!executorsWithExecutableOperations_1_1.done) return [3 /*break*/, 10];\n executor = executorsWithExecutableOperations_1_1.value;\n return [4 /*yield*/, executor.execute()];\n case 8:\n _b.sent();\n _b.label = 9;\n case 9:\n executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n return [3 /*break*/, 7];\n case 10: return [3 /*break*/, 13];\n case 11:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 13];\n case 12:\n try {\n if (executorsWithExecutableOperations_1_1 && !executorsWithExecutableOperations_1_1.done && (_a = executorsWithExecutableOperations_1.return)) _a.call(executorsWithExecutableOperations_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 13:\n if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 14:\n _b.sent();\n _b.label = 15;\n case 15: return [3 /*break*/, 21];\n case 16:\n error_1 = _b.sent();\n if (!isTransactionStartedByUs) return [3 /*break*/, 20];\n _b.label = 17;\n case 17:\n _b.trys.push([17, 19, , 20]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 18:\n _b.sent();\n return [3 /*break*/, 20];\n case 19:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 20];\n case 20: throw error_1;\n case 21: return [3 /*break*/, 25];\n case 22:\n if (!!this.queryRunner) return [3 /*break*/, 24];\n return [4 /*yield*/, queryRunner.release()];\n case 23:\n _b.sent();\n _b.label = 24;\n case 24: return [7 /*endfinally*/];\n case 25: return [2 /*return*/];\n }\n });\n });\n };\n return EntityPersistExecutor;\n}());\nexport { EntityPersistExecutor };\n\n//# sourceMappingURL=EntityPersistExecutor.js.map\n","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\";\nimport { TreeRepository } from \"../repository/TreeRepository\";\nimport { Repository } from \"../repository/Repository\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\nimport { EntitySchema, getMetadataArgsStorage } from \"../index\";\nimport { AbstractRepository } from \"../repository/AbstractRepository\";\nimport { CustomRepositoryCannotInheritRepositoryError } from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { RepositoryNotFoundError } from \"../error/RepositoryNotFoundError\";\nimport { RepositoryNotTreeError } from \"../error/RepositoryNotTreeError\";\nimport { RepositoryFactory } from \"../repository/RepositoryFactory\";\nimport { TreeRepositoryNotSupportedError } from \"../error/TreeRepositoryNotSupportedError\";\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nvar EntityManager = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityManager(connection, queryRunner) {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * Once created and then reused by en repositories.\n */\n this.repositories = [];\n /**\n * Plain to object transformer used in create and merge operations.\n */\n this.plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n EntityManager.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n var isolation, runInTransaction, queryRunner, result, err_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n if (!runInTransaction) {\n throw new Error(\"Transaction method requires callback in second paramter if isolation level is supplied.\");\n }\n if (this.connection.driver instanceof MongoDriver)\n throw new Error(\"Transactions aren't supported by MongoDB.\");\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n if (this.queryRunner && this.queryRunner.isTransactionActive)\n throw new Error(\"Cannot start transaction because its already started\");\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!isolation) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction(isolation)];\n case 2:\n _a.sent();\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, queryRunner.startTransaction()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, runInTransaction(queryRunner.manager)];\n case 6:\n result = _a.sent();\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n return [2 /*return*/, result];\n case 8:\n err_1 = _a.sent();\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw err_1;\n case 13:\n if (!!this.queryRunner) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n EntityManager.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.connection.query(query, parameters, this.queryRunner)];\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n EntityManager.prototype.createQueryBuilder = function (entityClass, alias, queryRunner) {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass, alias, queryRunner || this.queryRunner);\n }\n else {\n return this.connection.createQueryBuilder(entityClass || queryRunner || this.queryRunner);\n }\n };\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n EntityManager.prototype.hasId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n EntityManager.prototype.getId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n EntityManager.prototype.create = function (entityClass, plainObjectOrObjects) {\n var _this = this;\n var metadata = this.connection.getMetadata(entityClass);\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n if (Array.isArray(plainObjectOrObjects))\n return plainObjectOrObjects.map(function (plainEntityLike) { return _this.create(entityClass, plainEntityLike); });\n var mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n };\n /**\n * Merges two entities into one new entity.\n */\n EntityManager.prototype.merge = function (entityClass, mergeIntoEntity) {\n var _this = this;\n var entityLikes = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n entityLikes[_i - 2] = arguments[_i];\n }\n var metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(function (object) { return _this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata); });\n return mergeIntoEntity;\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n EntityManager.prototype.preload = function (entityClass, entityLike) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, plainObjectToDatabaseEntityTransformer, transformedEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n return [4 /*yield*/, plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata)];\n case 1:\n transformedEntity = _a.sent();\n if (transformedEntity)\n return [2 /*return*/, this.merge(entityClass, transformedEntity, entityLike)];\n return [2 /*return*/, undefined];\n }\n });\n });\n };\n /**\n * Saves a given entity in the database.\n */\n EntityManager.prototype.save = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Removes a given entity from the database.\n */\n EntityManager.prototype.remove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Records the delete date of one or many given entities.\n */\n EntityManager.prototype.softRemove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Recovers one or many given entities.\n */\n EntityManager.prototype.recover = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n EntityManager.prototype.insert = function (target, entity) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()];\n });\n });\n };\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.update = function (target, criteria, partialEntity) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the update method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.delete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.softDelete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.restore = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n EntityManager.prototype.count = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount()];\n });\n });\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n EntityManager.prototype.find = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getMany()];\n });\n });\n };\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n EntityManager.prototype.findAndCount = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getManyAndCount()];\n });\n });\n };\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n EntityManager.prototype.findByIds = function (entityClass, ids, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return [2 /*return*/, Promise.resolve([])];\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, qb.andWhereInIds(ids).getMany()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions.\n */\n EntityManager.prototype.findOne = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n var findOptions, options, metadata, alias, qb, passedId;\n return __generator(this, function (_a) {\n findOptions = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n options = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions;\n metadata = this.connection.getMetadata(entityClass);\n alias = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n qb = this.createQueryBuilder(entityClass, alias);\n if (!findOptions || findOptions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias.metadata);\n passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || idOrOptionsOrConditions instanceof Date;\n if (!passedId) {\n findOptions = __assign(__assign({}, (findOptions || {})), { take: 1 });\n }\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n if (options) {\n qb.where(options);\n }\n else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n return [2 /*return*/, qb.getOne()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n EntityManager.prototype.findOneOrFail = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.findOne(entityClass, idOrOptionsOrConditions, maybeOptions).then(function (value) {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n })];\n });\n });\n };\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n EntityManager.prototype.clear = function (entityClass) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, queryRunner.clearTable(metadata.tablePath)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!this.queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.increment = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" + \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.decrement = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" - \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getRepository = function (target) {\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n // find already created repository instance and return it if found\n var metadata = this.connection.getMetadata(target);\n var repository = this.repositories.find(function (repository) { return repository.metadata === metadata; });\n if (repository)\n return repository;\n // if repository was not found then create it, store its instance and return it\n var newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n };\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getTreeRepository = function (target) {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n // check if repository is real tree repository\n var repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n return repository;\n };\n /**\n * Gets mongodb repository for the given entity class.\n */\n EntityManager.prototype.getMongoRepository = function (target) {\n return this.connection.getMongoRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n EntityManager.prototype.getCustomRepository = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n var entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n var entityRepositoryInstance = new entityRepositoryMetadataArgs.target(this, entityMetadata);\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!entityRepositoryInstance[\"manager\"])\n entityRepositoryInstance[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n entityRepositoryInstance[\"manager\"] = this;\n entityRepositoryInstance[\"metadata\"] = entityMetadata;\n }\n return entityRepositoryInstance;\n };\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n EntityManager.prototype.release = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n return [2 /*return*/, this.queryRunner.release()];\n });\n });\n };\n return EntityManager;\n}());\nexport { EntityManager };\n\n//# sourceMappingURL=EntityManager.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { EntityManager } from \"./EntityManager\";\n/**\n * A special EntityManager that includes import/export and load/save function\n * that are unique to Sql.js.\n */\nvar SqljsEntityManager = /** @class */ (function (_super) {\n __extends(SqljsEntityManager, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsEntityManager(connection, queryRunner) {\n var _this = _super.call(this, connection, queryRunner) || this;\n _this.driver = connection.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads either the definition from a file (Node.js) or localstorage (browser)\n * or uses the given definition to open a new database.\n */\n SqljsEntityManager.prototype.loadDatabase = function (fileNameOrLocalStorageOrData) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.load(fileNameOrLocalStorageOrData)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saves the current database to a file (Node.js) or localstorage (browser)\n * if fileNameOrLocalStorage is not set options.location is used.\n */\n SqljsEntityManager.prototype.saveDatabase = function (fileNameOrLocalStorage) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.save(fileNameOrLocalStorage)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database definition.\n */\n SqljsEntityManager.prototype.exportDatabase = function () {\n return this.driver.export();\n };\n return SqljsEntityManager;\n}(EntityManager));\nexport { SqljsEntityManager };\n\n//# sourceMappingURL=SqljsEntityManager.js.map\n","import { EntityManager } from \"./EntityManager\";\nimport { MongoEntityManager } from \"./MongoEntityManager\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqljsEntityManager } from \"./SqljsEntityManager\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\n/**\n * Helps to create entity managers.\n */\nvar EntityManagerFactory = /** @class */ (function () {\n function EntityManagerFactory() {\n }\n /**\n * Creates a new entity manager depend on a given connection's driver.\n */\n EntityManagerFactory.prototype.create = function (connection, queryRunner) {\n if (connection.driver instanceof MongoDriver)\n return new MongoEntityManager(connection);\n if (connection.driver instanceof SqljsDriver)\n return new SqljsEntityManager(connection, queryRunner);\n return new EntityManager(connection, queryRunner);\n };\n return EntityManagerFactory;\n}());\nexport { EntityManagerFactory };\n\n//# sourceMappingURL=EntityManagerFactory.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer specifies driver type that does not exist or supported.\n */\nvar MissingDriverError = /** @class */ (function (_super) {\n __extends(MissingDriverError, _super);\n function MissingDriverError(driverType) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDriverError\";\n Object.setPrototypeOf(_this, MissingDriverError.prototype);\n _this.message = \"Wrong driver: \\\"\" + driverType + \"\\\" given. Supported drivers are: \\\"cordova\\\", \\\"expo\\\", \\\"mariadb\\\", \\\"mongodb\\\", \\\"mssql\\\", \\\"mysql\\\", \\\"oracle\\\", \\\"postgres\\\", \\\"sqlite\\\", \\\"better-sqlite3\\\", \\\"sqljs\\\", \\\"react-native\\\", \\\"aurora-data-api\\\", \\\"aurora-data-api-pg\\\".\";\n return _this;\n }\n return MissingDriverError;\n}(Error));\nexport { MissingDriverError };\n\n//# sourceMappingURL=MissingDriverError.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar CordovaQueryRunner = /** @class */ (function (_super) {\n __extends(CordovaQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n CordovaQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n CordovaQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return CordovaQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { CordovaQueryRunner };\n\n//# sourceMappingURL=CordovaQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar CordovaDriver = /** @class */ (function (_super) {\n __extends(CordovaDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n CordovaDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n CordovaDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new CordovaQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n CordovaDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n CordovaDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = window.sqlitePlugin;\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"Cordova-SQLite\", \"cordova-sqlite-storage\");\n }\n };\n return CordovaDriver;\n}(AbstractSqliteDriver));\nexport { CordovaDriver };\n\n//# sourceMappingURL=CordovaDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ReactNativeQueryRunner = /** @class */ (function (_super) {\n __extends(ReactNativeQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n ReactNativeQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n ReactNativeQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return ReactNativeQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ReactNativeQueryRunner };\n\n//# sourceMappingURL=ReactNativeQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ReactNativeQueryRunner } from \"./ReactNativeQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar ReactNativeDriver = /** @class */ (function (_super) {\n __extends(ReactNativeDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ReactNativeDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ReactNativeDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ReactNativeQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ReactNativeDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n ReactNativeDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = require(\"react-native-sqlite-storage\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"React-Native\", \"react-native-sqlite-storage\");\n }\n };\n return ReactNativeDriver;\n}(AbstractSqliteDriver));\nexport { ReactNativeDriver };\n\n//# sourceMappingURL=ReactNativeDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ExpoQueryRunner = /** @class */ (function (_super) {\n __extends(ExpoQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n ExpoQueryRunner.prototype.startTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n ExpoQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n ExpoQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n ExpoQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(function (transaction) {\n if (typeof _this.transaction === \"undefined\") {\n _this.startTransaction();\n _this.transaction = transaction;\n }\n _this.transaction.executeSql(query, parameters, function (t, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n }\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (t, err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, function (err) {\n _this.rollbackTransaction();\n }, function () {\n _this.isTransactionActive = false;\n _this.transaction = undefined;\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n return ExpoQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ExpoQueryRunner };\n\n//# sourceMappingURL=ExpoQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ExpoQueryRunner } from \"./ExpoQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nvar ExpoDriver = /** @class */ (function (_super) {\n __extends(ExpoDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.driver)\n throw new DriverOptionNotSetError(\"driver\");\n // load sqlite package\n _this.sqlite = _this.options.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ExpoDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection._db.close();\n _this.databaseConnection = undefined;\n ok();\n }\n catch (error) {\n fail(error);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ExpoDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ExpoQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ExpoDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n try {\n var databaseConnection_1 = _this.sqlite.openDatabase(_this.options.database);\n /*\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n */\n databaseConnection_1.transaction(function (tsx) {\n tsx.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (t, result) {\n ok(databaseConnection_1);\n }, function (t, err) {\n fail({ transaction: t, error: err });\n });\n }, function (err) {\n fail(err);\n });\n }\n catch (error) {\n fail(error);\n }\n });\n };\n return ExpoDriver;\n}(AbstractSqliteDriver));\nexport { ExpoDriver };\n\n//# sourceMappingURL=ExpoDriver.js.map\n","import { __awaiter, __extends, __generator, __read, __values } from \"tslib\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { TableExclusion } from \"../../schema-builder/table/TableExclusion\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { Query } from \"../Query\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single postgres database connection.\n */\nvar PostgresQueryRunner = /** @class */ (function (_super) {\n __extends(PostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function PostgresQueryRunner(driver, mode) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.mode = mode;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n PostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n PostgresQueryRunner.prototype.release = function () {\n if (this.isReleased) {\n return Promise.resolve();\n }\n this.isReleased = true;\n if (this.releaseCallback)\n this.releaseCallback();\n var index = this.driver.connectedQueryRunners.indexOf(this);\n if (index !== -1)\n this.driver.connectedQueryRunners.splice(index);\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n PostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"START TRANSACTION\")];\n case 3:\n _a.sent();\n if (!isolationLevel) return [3 /*break*/, 5];\n return [4 /*yield*/, this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5:\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 7];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n PostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, result, maxQueryExecutionTime, queryEndTime, queryExecutionTime, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n queryStartTime = +new Date();\n return [4 /*yield*/, databaseConnection.query(query, parameters)];\n case 3:\n result = _a.sent();\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n switch (result.command) {\n case \"DELETE\":\n case \"UPDATE\":\n // for UPDATE and DELETE query additionally return number of affected rows\n return [2 /*return*/, [result.rows, result.rowCount]];\n break;\n default:\n return [2 /*return*/, result.rows];\n }\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n this.driver.connection.logger.logQueryError(err_1, query, parameters, this);\n throw new QueryFailedError(query, parameters, err_1);\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n PostgresQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n var _this = this;\n var QueryStream = this.driver.loadStreamDependency();\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, stream, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n stream = databaseConnection.query(new QueryStream(query, parameters));\n if (onEnd)\n stream.on(\"end\", onEnd);\n if (onError)\n stream.on(\"error\", onError);\n ok(stream);\n return [3 /*break*/, 3];\n case 2:\n err_2 = _a.sent();\n fail(err_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Returns all available database names including system databases.\n */\n PostgresQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n PostgresQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n PostgresQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n PostgresQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM \\\"information_schema\\\".\\\"schemata\\\" WHERE \\\"schema_name\\\" = '\" + schema + \"'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName;\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n PostgresQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName + \" AND \\\"column_name\\\" = '\" + columnName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Creates a new database.\n * Postgres does not supports database creation inside a transaction block.\n */\n PostgresQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops database.\n * Postgres does not supports database drop inside a transaction block.\n */\n PostgresQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n PostgresQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n var up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n up = ifNotExist ? \"CREATE SCHEMA IF NOT EXISTS \\\"\" + schema + \"\\\"\" : \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n down = \"DROP SCHEMA \\\"\" + schema + \"\\\" CASCADE\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops table schema.\n */\n PostgresQueryRunner.prototype.dropSchema = function (schemaPath, ifExist, isCascade) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = schemaPath.indexOf(\".\") === -1 ? schemaPath : schemaPath.split(\".\")[0];\n up = ifExist ? \"DROP SCHEMA IF EXISTS \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\") : \"DROP SCHEMA \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\");\n down = \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new table.\n */\n PostgresQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _b.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n upQueries = [];\n downQueries = [];\n enumColumns = table.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n createdEnumTypes = [];\n _b.label = 3;\n case 3:\n _b.trys.push([3, 8, 9, 10]);\n enumColumns_1 = __values(enumColumns), enumColumns_1_1 = enumColumns_1.next();\n _b.label = 4;\n case 4:\n if (!!enumColumns_1_1.done) return [3 /*break*/, 7];\n column = enumColumns_1_1.value;\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 5:\n hasEnum = _b.sent();\n enumName = this.buildEnumName(table, column);\n // if enum with the same \"enumName\" is defined more then once, me must prevent double creation\n if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {\n createdEnumTypes.push(enumName);\n upQueries.push(this.createEnumTypeSql(table, column, enumName));\n downQueries.push(this.dropEnumTypeSql(table, column, enumName));\n }\n _b.label = 6;\n case 6:\n enumColumns_1_1 = enumColumns_1.next();\n return [3 /*break*/, 4];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (enumColumns_1_1 && !enumColumns_1_1.done && (_a = enumColumns_1.return)) _a.call(enumColumns_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return downQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(table, index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n PostgresQueryRunner.prototype.dropTable = function (target, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, tableName, table, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(target)];\n case 1:\n isTableExist = _a.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n tableName = target instanceof Table ? target.name : target;\n return [4 /*yield*/, this.getCachedTable(tableName)];\n case 3:\n table = _a.sent();\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(table, index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n if (dropForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return upQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n upQueries.push(this.dropTableSql(table));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n PostgresQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 1:\n _b.apply(_a, [_e.sent()]);\n downQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _d.apply(_c, [_e.sent()]);\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n PostgresQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _e.sent();\n upQueries = [];\n downQueries = [];\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _b.apply(_a, [_e.sent()]);\n upQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 3:\n _d.apply(_c, [_e.sent()]);\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, oldTable, _a, newTable, oldTableName, schemaName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;\n var e_2, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _c.sent();\n _c.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n oldTableName = oldTable.name.indexOf(\".\") === -1 ? oldTable.name : oldTable.name.split(\".\")[1];\n schemaName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n newTable.name = schemaName ? schemaName + \".\" + newTableName : newTableName;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(oldTable) + \" RENAME TO \\\"\" + newTableName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME TO \\\"\" + oldTableName + \"\\\"\"));\n // rename column primary key constraint\n if (newTable.primaryColumns.length > 0) {\n columnNames = newTable.primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename sequences\n newTable.columns.map(function (col) {\n if (col.isGenerated && col.generationStrategy === \"increment\") {\n var seqName = _this.buildSequenceName(oldTable, col.name, undefined, true, true);\n var newSeqName = _this.buildSequenceName(newTable, col.name, undefined, true, true);\n var up = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n var down = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n });\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n // build new constraint name\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n newTable.indices.forEach(function (index) {\n // build new constraint name\n var schema = _this.extractSchema(newTable);\n var newIndexName = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n // build new constraint name\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n enumColumns = newTable.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n _c.label = 4;\n case 4:\n _c.trys.push([4, 9, 10, 11]);\n enumColumns_2 = __values(enumColumns), enumColumns_2_1 = enumColumns_2.next();\n _c.label = 5;\n case 5:\n if (!!enumColumns_2_1.done) return [3 /*break*/, 8];\n column = enumColumns_2_1.value;\n return [4 /*yield*/, this.getEnumTypeName(oldTable, column)];\n case 6:\n oldEnumType = _c.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(newTable, column, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(newTable, column) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _c.label = 7;\n case 7:\n enumColumns_2_1 = enumColumns_2.next();\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 11];\n case 9:\n e_2_1 = _c.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 11];\n case 10:\n try {\n if (enumColumns_2_1 && !enumColumns_2_1.done && (_b = enumColumns_2.return)) _b.call(enumColumns_2);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 12:\n _c.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 5];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) {\n upQueries.push(this.createEnumTypeSql(table, column));\n downQueries.push(this.dropEnumTypeSql(table, column));\n }\n _b.label = 5;\n case 5:\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n // create or update primary key constraint\n if (column.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if table already have primary key, me must drop it and recreate again\n if (primaryColumns.length > 0) {\n pkName_1 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_1 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_1 + \"\\\" PRIMARY KEY (\" + columnNames_1 + \")\"));\n }\n primaryColumns.push(column);\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex));\n downQueries.push(this.dropIndexSql(table, columnIndex));\n }\n // create unique constraint\n if (column.isUnique) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + column.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n // create column's comment\n if (column.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n clonedTable.addColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_1, columns_1_1, column, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_1 = __values(columns), columns_1_1 = columns_1.next();\n _b.label = 1;\n case 1:\n if (!!columns_1_1.done) return [3 /*break*/, 4];\n column = columns_1_1.value;\n return [4 /*yield*/, this.addColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_1_1 = columns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n PostgresQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, schema, seqName, newSeqName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n defaultValueChanged = false;\n oldColumn = oldTableColumnOrName instanceof TableColumn\n ? oldTableColumnOrName\n : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];\n // To avoid data conversion, we just recreate column\n return [4 /*yield*/, this.dropColumn(table, oldColumn)];\n case 4:\n // To avoid data conversion, we just recreate column\n _b.sent();\n return [4 /*yield*/, this.addColumn(table, newColumn)];\n case 5:\n _b.sent();\n // update cloned table\n clonedTable = table.clone();\n return [3 /*break*/, 10];\n case 6:\n if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];\n // rename column\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + oldColumn.name + \"\\\" TO \\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + newColumn.name + \"\\\" TO \\\"\" + oldColumn.name + \"\\\"\"));\n if (!(oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")) return [3 /*break*/, 8];\n return [4 /*yield*/, this.getEnumTypeName(table, oldColumn)];\n case 7:\n oldEnumType = _b.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(table, newColumn, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(table, newColumn) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _b.label = 8;\n case 8:\n // rename column primary key constraint\n if (oldColumn.isPrimary === true) {\n primaryColumns = clonedTable.primaryColumns;\n columnNames = primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n // replace old column name with new column name\n columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n columnNames.push(newColumn.name);\n newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename column sequence\n if (oldColumn.isGenerated === true && newColumn.generationStrategy === \"increment\") {\n schema = this.extractSchema(table);\n seqName = this.buildSequenceName(table, oldColumn.name, undefined, true, true);\n newSeqName = this.buildSequenceName(table, newColumn.name, undefined, true, true);\n up = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n down = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n // rename unique constraints\n clonedTable.findColumnUniques(oldColumn).forEach(function (unique) {\n // build new constraint name\n unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n unique.columnNames.push(newColumn.name);\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach(function (index) {\n // build new constraint name\n index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n index.columnNames.push(newColumn.name);\n var schema = _this.extractSchema(table);\n var newIndexName = _this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n clonedTable.findColumnForeignKeys(oldColumn).forEach(function (foreignKey) {\n // build new constraint name\n foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n foreignKey.columnNames.push(newColumn.name);\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n oldTableColumn = clonedTable.columns.find(function (column) { return column.name === oldColumn.name; });\n clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn)].name = newColumn.name;\n oldColumn.name = newColumn.name;\n _b.label = 9;\n case 9:\n if (newColumn.precision !== oldColumn.precision || newColumn.scale !== oldColumn.scale) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n if ((newColumn.type === \"enum\" || newColumn.type === \"simple-enum\")\n && (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")\n && (!OrmUtils.isArraysEqual(newColumn.enum, oldColumn.enum) || newColumn.enumName !== oldColumn.enumName)) {\n arraySuffix = newColumn.isArray ? \"[]\" : \"\";\n newEnumName = this.buildEnumName(table, newColumn);\n oldEnumName = this.buildEnumName(table, oldColumn);\n oldEnumNameWithoutSchema = this.buildEnumName(table, oldColumn, false);\n oldEnumNameWithSchema_old = this.buildEnumName(table, oldColumn, true, false, true);\n oldEnumNameWithoutSchema_old = this.buildEnumName(table, oldColumn, false, false, true);\n // rename old ENUM\n upQueries.push(new Query(\"ALTER TYPE \" + oldEnumName + \" RENAME TO \" + oldEnumNameWithoutSchema_old));\n downQueries.push(new Query(\"ALTER TYPE \" + oldEnumNameWithSchema_old + \" RENAME TO \" + oldEnumNameWithoutSchema));\n // create new ENUM\n upQueries.push(this.createEnumTypeSql(table, newColumn, newEnumName));\n downQueries.push(this.dropEnumTypeSql(table, newColumn, newEnumName));\n // if column have default value, we must drop it to avoid issues with type casting\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n // mark default as changed to prevent double update\n defaultValueChanged = true;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n upType = \"\" + newEnumName + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + newEnumName + arraySuffix;\n downType = \"\" + oldEnumNameWithSchema_old + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + oldEnumNameWithSchema_old + arraySuffix;\n // update column to use new type\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + upType));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + downType));\n // restore column default or create new one\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n // remove old ENUM\n upQueries.push(this.dropEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n }\n if (oldColumn.isNullable !== newColumn.isNullable) {\n if (newColumn.isNullable) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n }\n }\n if (oldColumn.comment !== newColumn.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + oldColumn.name + \"\\\" IS \" + this.escapeComment(newColumn.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\" IS \" + this.escapeComment(oldColumn.comment)));\n }\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n }\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = true;\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n else {\n primaryColumn = primaryColumns.find(function (c) { return c.name === newColumn.name; });\n primaryColumns.splice(primaryColumns.indexOf(primaryColumn), 1);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = false;\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n }\n }\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n columnNames: [newColumn.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n else {\n uniqueConstraint = clonedTable.uniques.find(function (unique) {\n return unique.columnNames.length === 1 && !!unique.columnNames.find(function (columnName) { return columnName === newColumn.name; });\n });\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint), 1);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n }\n }\n if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") {\n if (newColumn.isGenerated === true) {\n upQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n upQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n downQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n }\n }\n // the default might have changed when the enum changed\n if (newColumn.default !== oldColumn.default && !defaultValueChanged) {\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n else {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n }\n else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n }\n if ((newColumn.spatialFeatureType || \"\").toLowerCase() !== (oldColumn.spatialFeatureType || \"\").toLowerCase() || newColumn.srid !== oldColumn.srid) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n _b.label = 10;\n case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;\n var e_4, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5, 6, 7]);\n changedColumns_1 = __values(changedColumns), changedColumns_1_1 = changedColumns_1.next();\n _c.label = 1;\n case 1:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 4];\n _a = changedColumns_1_1.value, oldColumn = _a.oldColumn, newColumn = _a.newColumn;\n return [4 /*yield*/, this.changeColumn(tableOrName, oldColumn, newColumn)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_4_1 = _c.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n // drop primary key constraint\n if (column.isPrimary) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n tableColumn = clonedTable.findColumnByName(column.name);\n tableColumn.isPrimary = false;\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n pkName_2 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames_2 = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName_2 + \"\\\" PRIMARY KEY (\" + columnNames_2 + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName_2 + \"\\\"\"));\n }\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n upQueries.push(this.dropIndexSql(table, columnIndex));\n downQueries.push(this.createIndexSql(table, columnIndex));\n }\n columnCheck = clonedTable.checks.find(function (check) { return !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name; });\n if (columnCheck) {\n clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n }\n columnUnique = clonedTable.uniques.find(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (columnUnique) {\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n }\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 6];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) return [3 /*break*/, 6];\n return [4 /*yield*/, this.getEnumTypeName(table, column)];\n case 5:\n enumType = _b.sent();\n escapedEnumName = \"\\\"\" + enumType.enumTypeSchema + \"\\\".\\\"\" + enumType.enumTypeName + \"\\\"\";\n upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));\n downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));\n _b.label = 6;\n case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 7:\n _b.sent();\n clonedTable.removeColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_2, columns_2_1, column, e_5_1;\n var e_5, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_2 = __values(columns), columns_2_1 = columns_2.next();\n _b.label = 1;\n case 1:\n if (!!columns_2_1.done) return [3 /*break*/, 4];\n column = columns_2_1.value;\n return [4 /*yield*/, this.dropColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_2_1 = columns_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_5_1 = _b.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n PostgresQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n up = this.createPrimaryKeySql(table, columnNames);\n // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n clonedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n down = this.dropPrimaryKeySql(clonedTable);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n PostgresQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, columnNames, upQueries, downQueries, primaryColumns, pkName_3, columnNamesString_1, pkName, columnNamesString;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n columnNames = columns.map(function (column) { return column.name; });\n upQueries = [];\n downQueries = [];\n primaryColumns = clonedTable.primaryColumns;\n if (primaryColumns.length > 0) {\n pkName_3 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNamesString_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_3 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_3 + \"\\\" PRIMARY KEY (\" + columnNamesString_1 + \")\"));\n }\n // update columns in table.\n clonedTable.columns\n .filter(function (column) { return columnNames.indexOf(column.name) !== -1; })\n .forEach(function (column) { return column.isPrimary = true; });\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n PostgresQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n up = this.dropPrimaryKeySql(table);\n down = this.createPrimaryKeySql(table, table.primaryColumns.map(function (column) { return column.name; }));\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraint.\n */\n PostgresQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!uniqueConstraint.name)\n uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n up = this.createUniqueConstraintSql(table, uniqueConstraint);\n down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraints.\n */\n PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;\n var e_6, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_1 = __values(uniqueConstraints), uniqueConstraints_1_1 = uniqueConstraints_1.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_1_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_1_1.value;\n return [4 /*yield*/, this.createUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_1_1 = uniqueConstraints_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_6_1 = _b.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraint.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n down = this.createUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraints.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;\n var e_7, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_2 = __values(uniqueConstraints), uniqueConstraints_2_1 = uniqueConstraints_2.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_2_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_2_1.value;\n return [4 /*yield*/, this.dropUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_2_1 = uniqueConstraints_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_7_1 = _b.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n PostgresQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!checkConstraint.name)\n checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression);\n up = this.createCheckConstraintSql(table, checkConstraint);\n down = this.dropCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n PostgresQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.createCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n PostgresQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n up = this.dropCheckConstraintSql(table, checkConstraint);\n down = this.createCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n PostgresQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.dropCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraint.\n */\n PostgresQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!exclusionConstraint.name)\n exclusionConstraint.name = this.connection.namingStrategy.exclusionConstraintName(table.name, exclusionConstraint.expression);\n up = this.createExclusionConstraintSql(table, exclusionConstraint);\n down = this.dropExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraints.\n */\n PostgresQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.createExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, exclusionConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n exclusionConstraint = exclusionOrName instanceof TableExclusion ? exclusionOrName : table.exclusions.find(function (c) { return c.name === exclusionOrName; });\n if (!exclusionConstraint)\n throw new Error(\"Supplied exclusion constraint was not found in table \" + table.name);\n up = this.dropExclusionConstraintSql(table, exclusionConstraint);\n down = this.createExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.dropExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n PostgresQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new FK may be passed without name. In this case we generate FK name manually.\n if (!foreignKey.name)\n foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n up = this.createForeignKeySql(table, foreignKey);\n down = this.dropForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;\n var e_8, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_1 = __values(foreignKeys), foreignKeys_1_1 = foreignKeys_1.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_1_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_1_1.value;\n return [4 /*yield*/, this.createForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_1_1 = foreignKeys_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_8_1 = _b.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n up = this.dropForeignKeySql(table, foreignKey);\n down = this.createForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;\n var e_9, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_2 = __values(foreignKeys), foreignKeys_2_1 = foreignKeys_2.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_2_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_2_1.value;\n return [4 /*yield*/, this.dropForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_2_1 = foreignKeys_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_9_1 = _b.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n PostgresQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_1, indices_1_1, index, e_10_1;\n var e_10, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_1 = __values(indices), indices_1_1 = indices_1.next();\n _b.label = 1;\n case 1:\n if (!!indices_1_1.done) return [3 /*break*/, 4];\n index = indices_1_1.value;\n return [4 /*yield*/, this.createIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_1_1 = indices_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_10_1 = _b.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n PostgresQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(table, index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_2, indices_2_1, index, e_11_1;\n var e_11, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_2 = __values(indices), indices_2_1 = indices_2.next();\n _b.label = 1;\n case 1:\n if (!!indices_2_1.done) return [3 /*break*/, 4];\n index = indices_2_1.value;\n return [4 /*yield*/, this.dropIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_2_1 = indices_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_11_1 = _b.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n PostgresQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"TRUNCATE TABLE \" + this.escapePath(tableName))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n PostgresQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var schemas, schemaNamesString, selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schemas = [];\n this.connection.entityMetadatas\n .filter(function (metadata) { return metadata.schema; })\n .forEach(function (metadata) {\n var isSchemaExist = !!schemas.find(function (schema) { return schema === metadata.schema; });\n if (!isSchemaExist)\n schemas.push(metadata.schema);\n });\n schemas.push(this.driver.options.schema || \"current_schema()\");\n schemaNamesString = schemas.map(function (name) {\n return name === \"current_schema()\" ? name : \"'\" + name + \"'\";\n }).join(\", \");\n return [4 /*yield*/, this.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 9, , 14]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW IF EXISTS \\\"' || schemaname || '\\\".\\\"' || viewname || '\\\" CASCADE;' as \\\"query\\\" \" +\n (\"FROM \\\"pg_views\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"viewname\\\" NOT IN ('geography_columns', 'geometry_columns', 'raster_columns', 'raster_overviews')\");\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 3:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 4:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE IF EXISTS \\\"' || schemaname || '\\\".\\\"' || tablename || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_tables\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"tablename\\\" NOT IN ('spatial_ref_sys')\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 5:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.dropEnumTypes(schemaNamesString)];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 14];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n PostgresQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, currentSchemaQuery, currentSchema, viewsCondition, query, dbViews;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 2:\n currentSchemaQuery = _a.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewsCondition = viewNames.map(function (viewName) {\n var _a = __read(viewName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"t\\\".\\\"schema\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n query = \"SELECT \\\"t\\\".*, \\\"v\\\".\\\"check_option\\\" FROM \" + this.escapePath(this.getTypeormMetadataTableName()) + \" \\\"t\\\" \" +\n (\"INNER JOIN \\\"information_schema\\\".\\\"views\\\" \\\"v\\\" ON \\\"v\\\".\\\"table_schema\\\" = \\\"t\\\".\\\"schema\\\" AND \\\"v\\\".\\\"table_name\\\" = \\\"t\\\".\\\"name\\\" WHERE \\\"t\\\".\\\"type\\\" = 'VIEW' \" + (viewsCondition ? \"AND (\" + viewsCondition + \")\" : \"\"));\n return [4 /*yield*/, this.query(query)];\n case 3:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n var schema = dbView[\"schema\"] === currentSchema && !_this.driver.options.schema ? undefined : dbView[\"schema\"];\n view.name = _this.driver.buildTableName(dbView[\"name\"], schema);\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n PostgresQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, hasRelispartitionColumn, isPartitionCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n tablesCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n tablesSql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \" + tablesCondition;\n columnsSql = \"\\n SELECT columns.*,\\n pg_catalog.col_description(('\\\"' || table_catalog || '\\\".\\\"' || table_schema || '\\\".\\\"' || table_name || '\\\"')::regclass::oid, ordinal_position) AS description,\\n ('\\\"' || \\\"udt_schema\\\" || '\\\".\\\"' || \\\"udt_name\\\" || '\\\"')::\\\"regtype\\\" AS \\\"regtype\\\",\\n pg_catalog.format_type(\\\"col_attr\\\".\\\"atttypid\\\", \\\"col_attr\\\".\\\"atttypmod\\\") AS \\\"format_type\\\"\\n FROM \\\"information_schema\\\".\\\"columns\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_attribute\\\" AS \\\"col_attr\\\"\\n ON \\\"col_attr\\\".\\\"attname\\\" = \\\"columns\\\".\\\"column_name\\\"\\n AND \\\"col_attr\\\".\\\"attrelid\\\" = (\\n SELECT\\n \\\"cls\\\".\\\"oid\\\" FROM \\\"pg_catalog\\\".\\\"pg_class\\\" AS \\\"cls\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_namespace\\\" AS \\\"ns\\\"\\n ON \\\"ns\\\".\\\"oid\\\" = \\\"cls\\\".\\\"relnamespace\\\"\\n WHERE \\\"cls\\\".\\\"relname\\\" = \\\"columns\\\".\\\"table_name\\\"\\n AND \\\"ns\\\".\\\"nspname\\\" = \\\"columns\\\".\\\"table_schema\\\"\\n )\\n WHERE\\n \" + tablesCondition;\n constraintsCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n constraintsSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"cnst\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \" +\n \"pg_get_constraintdef(\\\"cnst\\\".\\\"oid\\\") AS \\\"expression\\\", \" +\n \"CASE \\\"cnst\\\".\\\"contype\\\" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS \\\"constraint_type\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\" \" +\n \"FROM \\\"pg_constraint\\\" \\\"cnst\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"conrelid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"connamespace\\\" \" +\n \"LEFT JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"cnst\\\".\\\"conrelid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"cnst\\\".\\\"conkey\\\") \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND (\" + constraintsCondition + \")\");\n indicesSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"i\\\".\\\"relname\\\" AS \\\"constraint_name\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"CASE \\\"ix\\\".\\\"indisunique\\\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \\\"is_unique\\\", pg_get_expr(\\\"ix\\\".\\\"indpred\\\", \\\"ix\\\".\\\"indrelid\\\") AS \\\"condition\\\", \" +\n \"\\\"types\\\".\\\"typname\\\" AS \\\"type_name\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_index\\\" \\\"ix\\\" ON \\\"ix\\\".\\\"indrelid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"t\\\".\\\"oid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"ix\\\".\\\"indkey\\\") \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"t\\\".\\\"relnamespace\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"i\\\" ON \\\"i\\\".\\\"oid\\\" = \\\"ix\\\".\\\"indexrelid\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"types\\\" ON \\\"types\\\".\\\"oid\\\" = \\\"a\\\".\\\"atttypid\\\" \" +\n \"LEFT JOIN \\\"pg_constraint\\\" \\\"cnst\\\" ON \\\"cnst\\\".\\\"conname\\\" = \\\"i\\\".\\\"relname\\\" \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND \\\"cnst\\\".\\\"contype\\\" IS NULL AND (\" + constraintsCondition + \")\");\n foreignKeysCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"cl\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n return [4 /*yield*/, this.hasSupportForPartitionedTables()];\n case 2:\n hasRelispartitionColumn = _b.sent();\n isPartitionCondition = hasRelispartitionColumn ? \" AND \\\"cl\\\".\\\"relispartition\\\" = 'f'\" : \"\";\n foreignKeysSql = \"SELECT \\\"con\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \\\"con\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"con\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"att2\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"\\\"ns\\\".\\\"nspname\\\" AS \\\"referenced_table_schema\\\", \\\"cl\\\".\\\"relname\\\" AS \\\"referenced_table_name\\\", \\\"att\\\".\\\"attname\\\" AS \\\"referenced_column_name\\\", \\\"con\\\".\\\"confdeltype\\\" AS \\\"on_delete\\\", \" +\n \"\\\"con\\\".\\\"confupdtype\\\" AS \\\"on_update\\\", \\\"con\\\".\\\"condeferrable\\\" AS \\\"deferrable\\\", \\\"con\\\".\\\"condeferred\\\" AS \\\"deferred\\\" \" +\n \"FROM ( \" +\n \"SELECT UNNEST (\\\"con1\\\".\\\"conkey\\\") AS \\\"parent\\\", UNNEST (\\\"con1\\\".\\\"confkey\\\") AS \\\"child\\\", \\\"con1\\\".\\\"confrelid\\\", \\\"con1\\\".\\\"conrelid\\\", \\\"con1\\\".\\\"conname\\\", \\\"con1\\\".\\\"contype\\\", \\\"ns\\\".\\\"nspname\\\", \" +\n \"\\\"cl\\\".\\\"relname\\\", \\\"con1\\\".\\\"condeferrable\\\", \" +\n \"CASE WHEN \\\"con1\\\".\\\"condeferred\\\" THEN 'INITIALLY DEFERRED' ELSE 'INITIALLY IMMEDIATE' END as condeferred, \" +\n \"CASE \\\"con1\\\".\\\"confdeltype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confdeltype\\\", \" +\n \"CASE \\\"con1\\\".\\\"confupdtype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confupdtype\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"cl\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_constraint\\\" \\\"con1\\\" ON \\\"con1\\\".\\\"conrelid\\\" = \\\"cl\\\".\\\"oid\\\" \" +\n (\"WHERE \\\"con1\\\".\\\"contype\\\" = 'f' AND (\" + foreignKeysCondition + \") \") +\n \") \\\"con\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att\\\" ON \\\"att\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"confrelid\\\" AND \\\"att\\\".\\\"attnum\\\" = \\\"con\\\".\\\"child\\\" \" +\n (\"INNER JOIN \\\"pg_class\\\" \\\"cl\\\" ON \\\"cl\\\".\\\"oid\\\" = \\\"con\\\".\\\"confrelid\\\" \" + isPartitionCondition) +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att2\\\" ON \\\"att2\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"conrelid\\\" AND \\\"att2\\\".\\\"attnum\\\" = \\\"con\\\".\\\"parent\\\"\";\n return [4 /*yield*/, Promise.all([\n this.query(tablesSql),\n this.query(columnsSql),\n this.query(constraintsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])];\n case 3:\n _a = __read.apply(void 0, [_b.sent(), 5]), dbTables = _a[0], dbColumns = _a[1], dbConstraints = _a[2], dbIndices = _a[3], dbForeignKeys = _a[4];\n // if tables were not found in the db, no need to proceed\n if (!dbTables.length)\n return [2 /*return*/, []];\n // create tables for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, getSchemaFromKey, schema, tableFullName, _a, tableUniqueConstraints, tableCheckConstraints, tableExclusionConstraints, tableForeignKeyConstraints, tableIndexConstraints;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = new Table();\n getSchemaFromKey = function (dbObject, key) { return dbObject[key] === currentSchema && !_this.driver.options.schema ? undefined : dbObject[key]; };\n schema = getSchemaFromKey(dbTable, \"table_schema\");\n table.name = this.driver.buildTableName(dbTable[\"table_name\"], schema);\n tableFullName = this.driver.buildTableName(dbTable[\"table_name\"], dbTable[\"table_schema\"]);\n // create columns from the loaded columns\n _a = table;\n return [4 /*yield*/, Promise.all(dbColumns\n .filter(function (dbColumn) { return _this.driver.buildTableName(dbColumn[\"table_name\"], dbColumn[\"table_schema\"]) === tableFullName; })\n .map(function (dbColumn) { return __awaiter(_this, void 0, void 0, function () {\n var columnConstraints, tableColumn, type, enumTypeName, builtEnumName, sql, results, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraint, isConstraintComposite;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n columnConstraints = dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName && dbConstraint[\"column_name\"] === dbColumn[\"column_name\"];\n });\n tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"column_name\"];\n tableColumn.type = dbColumn[\"regtype\"].toLowerCase();\n if (tableColumn.type === \"numeric\" || tableColumn.type === \"decimal\" || tableColumn.type === \"float\") {\n // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property\n // we set 'undefined' in to unspecified property to avoid changing column on sync\n if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.precision = dbColumn[\"numeric_precision\"];\n }\n else if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.precision = undefined;\n }\n if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.scale = dbColumn[\"numeric_scale\"];\n }\n else if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.scale = undefined;\n }\n }\n if (dbColumn[\"data_type\"].toLowerCase() === \"array\") {\n tableColumn.isArray = true;\n type = tableColumn.type.replace(\"[]\", \"\");\n tableColumn.type = this.connection.driver.normalizeType({ type: type });\n }\n if (tableColumn.type === \"interval\"\n || tableColumn.type === \"time without time zone\"\n || tableColumn.type === \"time with time zone\"\n || tableColumn.type === \"timestamp without time zone\"\n || tableColumn.type === \"timestamp with time zone\") {\n tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"datetime_precision\"]) ? dbColumn[\"datetime_precision\"] : undefined;\n }\n if (!(tableColumn.type.indexOf(\"enum\") !== -1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getEnumTypeName(table, tableColumn)];\n case 1:\n enumTypeName = (_a.sent()).enumTypeName;\n builtEnumName = this.buildEnumName(table, tableColumn, false, true);\n if (builtEnumName !== enumTypeName)\n tableColumn.enumName = enumTypeName;\n tableColumn.type = \"enum\";\n sql = \"SELECT \\\"e\\\".\\\"enumlabel\\\" AS \\\"value\\\" FROM \\\"pg_enum\\\" \\\"e\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"e\\\".\\\"enumtypid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = '\" + dbTable[\"table_schema\"] + \"' AND \\\"t\\\".\\\"typname\\\" = '\" + this.buildEnumName(table, tableColumn, false, true) + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 2:\n results = _a.sent();\n tableColumn.enum = results.map(function (result) { return result[\"value\"]; });\n _a.label = 3;\n case 3:\n if (!(tableColumn.type === \"geometry\")) return [3 /*break*/, 5];\n geometryColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geometry_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geometry_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geometryColumnSql)];\n case 4:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 5;\n case 5:\n if (!(tableColumn.type === \"geography\")) return [3 /*break*/, 7];\n geographyColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geography_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geography_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geographyColumnSql)];\n case 6:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 7;\n case 7:\n // check only columns that have length property\n if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1) {\n if (tableColumn.isArray) {\n match = /\\((\\d+)\\)/.exec(dbColumn[\"format_type\"]);\n length_1 = match ? match[1] : undefined;\n }\n else if (dbColumn[\"character_maximum_length\"]) {\n length_1 = dbColumn[\"character_maximum_length\"].toString();\n }\n if (length_1) {\n tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length_1) ? length_1 : \"\";\n }\n }\n tableColumn.isNullable = dbColumn[\"is_nullable\"] === \"YES\";\n tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"PRIMARY\"; });\n uniqueConstraint = columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"UNIQUE\"; });\n isConstraintComposite = uniqueConstraint\n ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint[\"constraint_type\"] === \"UNIQUE\"\n && dbConstraint[\"constraint_name\"] === uniqueConstraint[\"constraint_name\"]\n && dbConstraint[\"column_name\"] !== dbColumn[\"column_name\"]; })\n : false;\n tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n if (dbColumn[\"column_default\"] !== null && dbColumn[\"column_default\"] !== undefined) {\n if (dbColumn[\"column_default\"].replace(/\"/gi, \"\") === \"nextval('\" + this.buildSequenceName(table, dbColumn[\"column_name\"], currentSchema, true) + \"'::regclass)\") {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"increment\";\n }\n else if (dbColumn[\"column_default\"] === \"gen_random_uuid()\" || /^uuid_generate_v\\d\\(\\)/.test(dbColumn[\"column_default\"])) {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"uuid\";\n }\n else {\n tableColumn.default = dbColumn[\"column_default\"].replace(/::.*/, \"\");\n tableColumn.default = tableColumn.default.replace(/^(-?\\d+)$/, \"'$1'\");\n }\n }\n tableColumn.comment = dbColumn[\"description\"] ? dbColumn[\"description\"] : undefined;\n if (dbColumn[\"character_set_name\"])\n tableColumn.charset = dbColumn[\"character_set_name\"];\n if (dbColumn[\"collation_name\"])\n tableColumn.collation = dbColumn[\"collation_name\"];\n return [2 /*return*/, tableColumn];\n }\n });\n }); }))];\n case 1:\n // create columns from the loaded columns\n _a.columns = _b.sent();\n tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"UNIQUE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.uniques = tableUniqueConstraints.map(function (constraint) {\n var uniques = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableUnique({\n name: constraint[\"constraint_name\"],\n columnNames: uniques.map(function (u) { return u[\"column_name\"]; })\n });\n });\n tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"CHECK\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.checks = tableCheckConstraints.map(function (constraint) {\n var checks = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableCheck({\n name: constraint[\"constraint_name\"],\n columnNames: checks.map(function (c) { return c[\"column_name\"]; }),\n expression: constraint[\"expression\"].replace(/^\\s*CHECK\\s*\\((.*)\\)\\s*$/i, \"$1\")\n });\n });\n tableExclusionConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"EXCLUDE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.exclusions = tableExclusionConstraints.map(function (constraint) {\n return new TableExclusion({\n name: constraint[\"constraint_name\"],\n expression: constraint[\"expression\"].substring(8) // trim EXCLUDE from start of expression\n });\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(function (dbForeignKey) {\n return _this.driver.buildTableName(dbForeignKey[\"table_name\"], dbForeignKey[\"table_schema\"]) === tableFullName;\n }), function (dbForeignKey) { return dbForeignKey[\"constraint_name\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (dbForeignKey) {\n var foreignKeys = dbForeignKeys.filter(function (dbFk) { return dbFk[\"constraint_name\"] === dbForeignKey[\"constraint_name\"]; });\n // if referenced table located in currently used schema, we don't need to concat schema name to table name.\n var schema = getSchemaFromKey(dbForeignKey, \"referenced_table_schema\");\n var referencedTableName = _this.driver.buildTableName(dbForeignKey[\"referenced_table_name\"], schema);\n return new TableForeignKey({\n name: dbForeignKey[\"constraint_name\"],\n columnNames: foreignKeys.map(function (dbFk) { return dbFk[\"column_name\"]; }),\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk[\"referenced_column_name\"]; }),\n onDelete: dbForeignKey[\"on_delete\"],\n onUpdate: dbForeignKey[\"on_update\"],\n deferrable: dbForeignKey[\"deferrable\"] ? dbForeignKey[\"deferred\"] : undefined,\n });\n });\n tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(function (dbIndex) {\n return _this.driver.buildTableName(dbIndex[\"table_name\"], dbIndex[\"table_schema\"]) === tableFullName;\n }), function (dbIndex) { return dbIndex[\"constraint_name\"]; });\n table.indices = tableIndexConstraints.map(function (constraint) {\n var indices = dbIndices.filter(function (index) {\n return index[\"table_schema\"] === constraint[\"table_schema\"]\n && index[\"table_name\"] === constraint[\"table_name\"]\n && index[\"constraint_name\"] === constraint[\"constraint_name\"];\n });\n return new TableIndex({\n table: table,\n name: constraint[\"constraint_name\"],\n columnNames: indices.map(function (i) { return i[\"column_name\"]; }),\n isUnique: constraint[\"is_unique\"] === \"TRUE\",\n where: constraint[\"condition\"],\n isSpatial: indices.every(function (i) { return _this.driver.spatialTypes.indexOf(i[\"type_name\"]) >= 0; }),\n isFulltext: false\n });\n });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n PostgresQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(table, column); }).join(\", \");\n var sql = \"CREATE TABLE \" + this.escapePath(table) + \" (\" + columnDefinitions;\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.exclusions.length > 0) {\n var exclusionsSql = table.exclusions.map(function (exclusion) {\n var exclusionName = exclusion.name ? exclusion.name : _this.connection.namingStrategy.exclusionConstraintName(table.name, exclusion.expression);\n return \"CONSTRAINT \\\"\" + exclusionName + \"\\\" EXCLUDE \" + exclusion.expression;\n }).join(\", \");\n sql += \", \" + exclusionsSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \" + _this.escapePath(fk.referencedTableName) + \" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n if (fk.deferrable)\n constraint += \" DEFERRABLE \" + fk.deferrable;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (primaryColumns.length > 0) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(function (column) { return column.name; }));\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n table.columns\n .filter(function (it) { return it.comment; })\n .forEach(function (it) { return sql += \"; COMMENT ON COLUMN \" + _this.escapePath(table) + \".\\\"\" + it.name + \"\\\" IS \" + _this.escapeComment(it.comment); });\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n PostgresQueryRunner.prototype.dropTableSql = function (tableOrPath) {\n return new Query(\"DROP TABLE \" + this.escapePath(tableOrPath));\n };\n PostgresQueryRunner.prototype.createViewSql = function (view) {\n var materializedClause = view.materialized ? \"MATERIALIZED \" : \"\";\n var viewName = this.escapePath(view);\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression(this.connection).getQuery());\n }\n };\n PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, splittedName, schema, name, expression, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n splittedName = view.name.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = view.name;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", schema: schema, name: name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Builds drop view sql.\n */\n PostgresQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n return new Query(\"DROP VIEW \" + this.escapePath(viewOrPath));\n };\n /**\n * Builds remove view sql.\n */\n PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, viewName, splittedName, schema, name, qb, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n splittedName = viewName.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = viewName;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n qb = this.connection.createQueryBuilder();\n _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"schema\") + \" = :schema\", { schema: schema })\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: name })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Extracts schema name from given Table object or table name string.\n */\n PostgresQueryRunner.prototype.extractSchema = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n return tableName.indexOf(\".\") === -1 ? this.driver.options.schema : tableName.split(\".\")[0];\n };\n /**\n * Drops ENUM type from given schemas.\n */\n PostgresQueryRunner.prototype.dropEnumTypes = function (schemaNames) {\n return __awaiter(this, void 0, void 0, function () {\n var selectDropsQuery, dropQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n selectDropsQuery = \"SELECT 'DROP TYPE IF EXISTS \\\"' || n.nspname || '\\\".\\\"' || t.typname || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_enum\\\" \\\"e\\\" ON \\\"e\\\".\\\"enumtypid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" IN (\" + schemaNames + \") GROUP BY \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\"\");\n return [4 /*yield*/, this.query(selectDropsQuery)];\n case 1:\n dropQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Checks if enum with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasEnumType = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, enumName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = this.parseTableName(table).schema;\n enumName = this.buildEnumName(table, column, false, true);\n sql = \"SELECT \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = \" + schema + \" AND \\\"t\\\".\\\"typname\\\" = '\" + enumName + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.createEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n var enumValues = column.enum.map(function (value) { return \"'\" + value.replace(\"'\", \"''\") + \"'\"; }).join(\", \");\n return new Query(\"CREATE TYPE \" + enumName + \" AS ENUM(\" + enumValues + \")\");\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.dropEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n return new Query(\"DROP TYPE \" + enumName);\n };\n /**\n * Builds create index sql.\n */\n PostgresQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \" + this.escapePath(table) + \" \" + (index.isSpatial ? \"USING GiST \" : \"\") + \"(\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n PostgresQueryRunner.prototype.dropIndexSql = function (table, indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n var schema = this.extractSchema(table);\n return schema ? new Query(\"DROP INDEX \\\"\" + schema + \"\\\".\\\"\" + indexName + \"\\\"\") : new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds create primary key sql.\n */\n PostgresQueryRunner.prototype.createPrimaryKeySql = function (table, columnNames) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n var columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\");\n };\n /**\n * Builds drop primary key sql.\n */\n PostgresQueryRunner.prototype.dropPrimaryKeySql = function (table) {\n var columnNames = table.primaryColumns.map(function (column) { return column.name; });\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + primaryKeyName + \"\\\"\");\n };\n /**\n * Builds create unique constraint sql.\n */\n PostgresQueryRunner.prototype.createUniqueConstraintSql = function (table, uniqueConstraint) {\n var columnNames = uniqueConstraint.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\" + columnNames + \")\");\n };\n /**\n * Builds drop unique constraint sql.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraintSql = function (table, uniqueOrName) {\n var uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueName + \"\\\"\");\n };\n /**\n * Builds create check constraint sql.\n */\n PostgresQueryRunner.prototype.createCheckConstraintSql = function (table, checkConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + checkConstraint.name + \"\\\" CHECK (\" + checkConstraint.expression + \")\");\n };\n /**\n * Builds drop check constraint sql.\n */\n PostgresQueryRunner.prototype.dropCheckConstraintSql = function (table, checkOrName) {\n var checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + checkName + \"\\\"\");\n };\n /**\n * Builds create exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.createExclusionConstraintSql = function (table, exclusionConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + exclusionConstraint.name + \"\\\" EXCLUDE \" + exclusionConstraint.expression);\n };\n /**\n * Builds drop exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraintSql = function (table, exclusionOrName) {\n var exclusionName = exclusionOrName instanceof TableExclusion ? exclusionOrName.name : exclusionOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + exclusionName + \"\\\"\");\n };\n /**\n * Builds create foreign key sql.\n */\n PostgresQueryRunner.prototype.createForeignKeySql = function (table, foreignKey) {\n var columnNames = foreignKey.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n var referencedColumnNames = foreignKey.referencedColumnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\",\");\n var sql = \"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + foreignKey.name + \"\\\" FOREIGN KEY (\" + columnNames + \") \" +\n (\"REFERENCES \" + this.escapePath(foreignKey.referencedTableName) + \"(\" + referencedColumnNames + \")\");\n if (foreignKey.onDelete)\n sql += \" ON DELETE \" + foreignKey.onDelete;\n if (foreignKey.onUpdate)\n sql += \" ON UPDATE \" + foreignKey.onUpdate;\n if (foreignKey.deferrable)\n sql += \" DEFERRABLE \" + foreignKey.deferrable;\n return new Query(sql);\n };\n /**\n * Builds drop foreign key sql.\n */\n PostgresQueryRunner.prototype.dropForeignKeySql = function (table, foreignKeyOrName) {\n var foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + foreignKeyName + \"\\\"\");\n };\n /**\n * Builds sequence name from given table and column.\n */\n PostgresQueryRunner.prototype.buildSequenceName = function (table, columnOrName, currentSchema, disableEscape, skipSchema) {\n var columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n var schema = undefined;\n var tableName = undefined;\n if (table.name.indexOf(\".\") === -1) {\n tableName = table.name;\n }\n else {\n schema = table.name.split(\".\")[0];\n tableName = table.name.split(\".\")[1];\n }\n var seqName = tableName + \"_\" + columnName + \"_seq\";\n if (seqName.length > this.connection.driver.maxAliasLength) // note doesn't yet handle corner cases where .length differs from number of UTF-8 bytes\n seqName = tableName.substring(0, 29) + \"_\" + columnName.substring(0, Math.max(29, 63 - tableName.length - 5)) + \"_seq\";\n if (schema && schema !== currentSchema && !skipSchema) {\n return disableEscape ? schema + \".\" + seqName : \"\\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\"\";\n }\n else {\n return disableEscape ? \"\" + seqName : \"\\\"\" + seqName + \"\\\"\";\n }\n };\n /**\n * Builds ENUM type name from given table and column.\n */\n PostgresQueryRunner.prototype.buildEnumName = function (table, column, withSchema, disableEscape, toOld) {\n if (withSchema === void 0) { withSchema = true; }\n var schema = table.name.indexOf(\".\") === -1 ? this.driver.options.schema : table.name.split(\".\")[0];\n var tableName = table.name.indexOf(\".\") === -1 ? table.name : table.name.split(\".\")[1];\n var enumName = column.enumName ? column.enumName : tableName + \"_\" + column.name.toLowerCase() + \"_enum\";\n if (schema && withSchema)\n enumName = schema + \".\" + enumName;\n if (toOld)\n enumName = enumName + \"_old\";\n return enumName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n PostgresQueryRunner.prototype.getEnumTypeName = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, _a, schema, name, result, udtName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n _a = __read(table.name.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = this.driver.options.schema || currentSchema;\n }\n return [4 /*yield*/, this.query(\"SELECT \\\"udt_schema\\\", \\\"udt_name\\\" \" +\n (\"FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"' AND \\\"column_name\\\"='\" + column.name + \"'\"))];\n case 2:\n result = _b.sent();\n udtName = result[0][\"udt_name\"];\n if (udtName.indexOf(\"_\") === 0) {\n udtName = udtName.substr(1, udtName.length);\n }\n return [2 /*return*/, {\n enumTypeSchema: result[0][\"udt_schema\"],\n enumTypeName: udtName\n }];\n }\n });\n });\n };\n /**\n * Escapes a given comment so it's safe to include in a query.\n */\n PostgresQueryRunner.prototype.escapeComment = function (comment) {\n if (!comment || comment.length === 0) {\n return \"NULL\";\n }\n comment = comment\n .replace(/'/g, \"''\")\n .replace(\"\\0\", \"\"); // Null bytes aren't allowed in comments\n return \"'\" + comment + \"'\";\n };\n /**\n * Escapes given table or view path.\n */\n PostgresQueryRunner.prototype.escapePath = function (target, disableEscape) {\n var tableName = target instanceof Table || target instanceof View ? target.name : target;\n tableName = tableName.indexOf(\".\") === -1 && this.driver.options.schema ? this.driver.options.schema + \".\" + tableName : tableName;\n return tableName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n /**\n * Returns object with table schema and table name.\n */\n PostgresQueryRunner.prototype.parseTableName = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n if (tableName.indexOf(\".\") === -1) {\n return {\n schema: this.driver.options.schema ? \"'\" + this.driver.options.schema + \"'\" : \"current_schema()\",\n tableName: \"'\" + tableName + \"'\"\n };\n }\n else {\n return {\n schema: \"'\" + tableName.split(\".\")[0] + \"'\",\n tableName: \"'\" + tableName.split(\".\")[1] + \"'\"\n };\n }\n };\n /**\n * Builds a query for create column.\n */\n PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column.isGenerated === true && column.generationStrategy !== \"uuid\") {\n if (column.type === \"integer\" || column.type === \"int\" || column.type === \"int4\")\n c += \" SERIAL\";\n if (column.type === \"smallint\" || column.type === \"int2\")\n c += \" SMALLSERIAL\";\n if (column.type === \"bigint\" || column.type === \"int8\")\n c += \" BIGSERIAL\";\n }\n if (column.type === \"enum\" || column.type === \"simple-enum\") {\n c += \" \" + this.buildEnumName(table, column);\n if (column.isArray)\n c += \" array\";\n }\n else if (!column.isGenerated || column.type === \"uuid\") {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.charset)\n c += \" CHARACTER SET \\\"\" + column.charset + \"\\\"\";\n if (column.collation)\n c += \" COLLATE \\\"\" + column.collation + \"\\\"\";\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT \" + column.default;\n if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default)\n c += \" DEFAULT \" + this.driver.uuidGenerator;\n return c;\n };\n /**\n * Checks if the PostgreSQL server has support for partitioned tables\n */\n PostgresQueryRunner.prototype.hasSupportForPartitionedTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT TRUE FROM information_schema.columns WHERE table_name = 'pg_class' and column_name = 'relispartition'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n return PostgresQueryRunner;\n}(BaseQueryRunner));\nexport { PostgresQueryRunner };\n\n//# sourceMappingURL=PostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { PostgresQueryRunner } from \"../postgres/PostgresQueryRunner\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nvar PostgresQueryRunnerWrapper = /** @class */ (function (_super) {\n __extends(PostgresQueryRunnerWrapper, _super);\n function PostgresQueryRunnerWrapper(driver, mode) {\n return _super.call(this, driver, mode) || this;\n }\n return PostgresQueryRunnerWrapper;\n}(PostgresQueryRunner));\n/**\n * Runs queries on a single postgres database connection.\n */\nvar AuroraDataApiPostgresQueryRunner = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresQueryRunner(driver, client, mode) {\n var _this = _super.call(this, driver, mode) || this;\n _this.client = client;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Starts transaction on the current connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.client.startTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.commitTransaction()];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.rollbackTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n AuroraDataApiPostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.client.query(query, parameters)];\n case 1:\n result = _a.sent();\n if (result.records) {\n return [2 /*return*/, result.records];\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n return AuroraDataApiPostgresQueryRunner;\n}(PostgresQueryRunnerWrapper));\nexport { AuroraDataApiPostgresQueryRunner };\n\n//# sourceMappingURL=AuroraDataApiPostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { PostgresDriver } from \"../postgres/PostgresDriver\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { AuroraDataApiPostgresQueryRunner } from \"../aurora-data-api-pg/AuroraDataApiPostgresQueryRunner\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\nvar PostgresWrapper = /** @class */ (function (_super) {\n __extends(PostgresWrapper, _super);\n function PostgresWrapper() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PostgresWrapper;\n}(PostgresDriver));\nvar AuroraDataApiPostgresDriver = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresDriver(connection) {\n var _this = _super.call(this) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.isReplicated = false;\n // load data-api package\n _this.loadDependencies();\n _this.client = new _this.DataApiDriver(_this.options.region, _this.options.secretArn, _this.options.resourceArn, _this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, _this.options.serviceConfigOptions, _this.options.formatOptions);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n AuroraDataApiPostgresDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Closes connection with database.\n */\n AuroraDataApiPostgresDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n AuroraDataApiPostgresDriver.prototype.createQueryRunner = function (mode) {\n var _this = this;\n return new AuroraDataApiPostgresQueryRunner(this, new this.DataApiDriver(this.options.region, this.options.secretArn, this.options.resourceArn, this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, this.options.serviceConfigOptions, this.options.formatOptions), mode);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.preparePersistentValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n return this.client.preparePersistentValue(value, columnMetadata);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.prepareHydratedValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return this.client.prepareHydratedValue(value, columnMetadata);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AuroraDataApiPostgresDriver.prototype.loadDependencies = function () {\n var pg = PlatformTools.load(\"typeorm-aurora-data-api-driver\").pg;\n this.DataApiDriver = pg;\n };\n /**\n * Executes given query.\n */\n AuroraDataApiPostgresDriver.prototype.executeQuery = function (connection, query) {\n return this.connection.query(query);\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AuroraDataApiPostgresDriver.prototype.afterConnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var extensionsMetadata;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.checkMetadataForExtensions()];\n case 1:\n extensionsMetadata = _a.sent();\n if (!extensionsMetadata.hasExtensions) return [3 /*break*/, 3];\n return [4 /*yield*/, this.enableExtensions(extensionsMetadata, this.connection)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/, Promise.resolve()];\n }\n });\n });\n };\n return AuroraDataApiPostgresDriver;\n}(PostgresWrapper));\nexport { AuroraDataApiPostgresDriver };\n\n//# sourceMappingURL=AuroraDataApiPostgresDriver.js.map\n","import { MissingDriverError } from \"../error/MissingDriverError\";\nimport { CockroachDriver } from \"./cockroachdb/CockroachDriver\";\nimport { MongoDriver } from \"./mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"./sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"./oracle/OracleDriver\";\nimport { SqliteDriver } from \"./sqlite/SqliteDriver\";\nimport { CordovaDriver } from \"./cordova/CordovaDriver\";\nimport { ReactNativeDriver } from \"./react-native/ReactNativeDriver\";\nimport { NativescriptDriver } from \"./nativescript/NativescriptDriver\";\nimport { SqljsDriver } from \"./sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"./mysql/MysqlDriver\";\nimport { PostgresDriver } from \"./postgres/PostgresDriver\";\nimport { ExpoDriver } from \"./expo/ExpoDriver\";\nimport { AuroraDataApiDriver } from \"./aurora-data-api/AuroraDataApiDriver\";\nimport { AuroraDataApiPostgresDriver } from \"./aurora-data-api-pg/AuroraDataApiPostgresDriver\";\nimport { SapDriver } from \"./sap/SapDriver\";\nimport { BetterSqlite3Driver } from \"./better-sqlite3/BetterSqlite3Driver\";\n/**\n * Helps to create drivers.\n */\nvar DriverFactory = /** @class */ (function () {\n function DriverFactory() {\n }\n /**\n * Creates a new driver depend on a given connection's driver type.\n */\n DriverFactory.prototype.create = function (connection) {\n var type = connection.options.type;\n switch (type) {\n case \"mysql\":\n return new MysqlDriver(connection);\n case \"postgres\":\n return new PostgresDriver(connection);\n case \"cockroachdb\":\n return new CockroachDriver(connection);\n case \"sap\":\n return new SapDriver(connection);\n case \"mariadb\":\n return new MysqlDriver(connection);\n case \"sqlite\":\n return new SqliteDriver(connection);\n case \"better-sqlite3\":\n return new BetterSqlite3Driver(connection);\n case \"cordova\":\n return new CordovaDriver(connection);\n case \"nativescript\":\n return new NativescriptDriver(connection);\n case \"react-native\":\n return new ReactNativeDriver(connection);\n case \"sqljs\":\n return new SqljsDriver(connection);\n case \"oracle\":\n return new OracleDriver(connection);\n case \"mssql\":\n return new SqlServerDriver(connection);\n case \"mongodb\":\n return new MongoDriver(connection);\n case \"expo\":\n return new ExpoDriver(connection);\n case \"aurora-data-api\":\n return new AuroraDataApiDriver(connection);\n case \"aurora-data-api-pg\":\n return new AuroraDataApiPostgresDriver(connection);\n default:\n throw new MissingDriverError(type);\n }\n };\n return DriverFactory;\n}());\nexport { DriverFactory };\n\n//# sourceMappingURL=DriverFactory.js.map\n","/**\n * Dummy functions for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\n/**\n * Loads all exported classes from the given directory.\n */\nexport function importClassesFromDirectories(logger, directories, formats) {\n if (formats === void 0) { formats = [\".js\", \".cjs\", \".ts\"]; }\n return [];\n}\n/**\n * Loads all json files from the given directory.\n */\nexport function importJsonsFromDirectories(directories, format) {\n if (format === void 0) { format = \".json\"; }\n return [];\n}\n\n//# sourceMappingURL=BrowserDirectoryExportedClassesLoader.js.map\n","/**\n * Container to be used by this library for inversion control. If container was not implicitly set then by default\n * container simply creates a new instance of the given class.\n */\nvar defaultContainer = new (/** @class */ (function () {\n function class_1() {\n this.instances = [];\n }\n class_1.prototype.get = function (someClass) {\n var instance = this.instances.find(function (i) { return i.type === someClass; });\n if (!instance) {\n instance = { type: someClass, object: new someClass() };\n this.instances.push(instance);\n }\n return instance.object;\n };\n return class_1;\n}()))();\nvar userContainer;\nvar userContainerOptions;\n/**\n * Sets container to be used by this library.\n */\nexport function useContainer(iocContainer, options) {\n userContainer = iocContainer;\n userContainerOptions = options;\n}\n/**\n * Gets the IOC container used by this library.\n */\nexport function getFromContainer(someClass) {\n if (userContainer) {\n try {\n var instance = userContainer.get(someClass);\n if (instance)\n return instance;\n if (!userContainerOptions || !userContainerOptions.fallback)\n return instance;\n }\n catch (error) {\n if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)\n throw error;\n }\n }\n return defaultContainer.get(someClass);\n}\n\n//# sourceMappingURL=container.js.map\n","/**\n * Index metadata contains all information about table's index.\n */\nvar IndexMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function IndexMetadata(options) {\n /**\n * Indicates if this index must be unique.\n */\n this.isUnique = false;\n /**\n * The SPATIAL modifier indexes the entire column and does not allow indexed columns to contain NULL values.\n * Works only in MySQL.\n */\n this.isSpatial = false;\n /**\n * The FULLTEXT modifier indexes the entire column and does not allow prefixing.\n * Works only in MySQL.\n */\n this.isFulltext = false;\n /**\n * Indicates if this index must synchronize with database index.\n */\n this.synchronize = true;\n /**\n * Indexed columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n if (options.args.synchronize !== null && options.args.synchronize !== undefined)\n this.synchronize = options.args.synchronize;\n this.isUnique = !!options.args.unique;\n this.isSpatial = !!options.args.spatial;\n this.isFulltext = !!options.args.fulltext;\n this.parser = options.args.parser;\n this.where = options.args.where;\n this.isSparse = options.args.sparse;\n this.isBackground = options.args.background;\n this.expireAfterSeconds = options.args.expireAfterSeconds;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend index properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n IndexMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n if (this.synchronize === false) {\n this.name = this.givenName;\n return this;\n }\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else { // todo: indices in embeds are not implemented in this syntax. deprecate this syntax?\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyPath) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyPath; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Index \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyPath);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.indexName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }), this.where);\n return this;\n };\n return IndexMetadata;\n}());\nexport { IndexMetadata };\n\n//# sourceMappingURL=IndexMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { EntityMetadata } from \"./EntityMetadata\";\n/**\n * Contains all information about some entity's relation.\n */\nvar RelationMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationMetadata(options) {\n /**\n * Indicates if this is a parent (can be only many-to-one relation) relation in the tree tables.\n */\n this.isTreeParent = false;\n /**\n * Indicates if this is a children (can be only one-to-many relation) relation in the tree tables.\n */\n this.isTreeChildren = false;\n /**\n * Indicates if this relation's column is a primary key.\n * Can be used only for many-to-one and owner one-to-one relations.\n */\n this.isPrimary = false;\n /**\n * Indicates if this relation is lazily loaded.\n */\n this.isLazy = false;\n /**\n * Indicates if this relation is eagerly loaded.\n */\n this.isEager = false;\n /**\n * Indicates if persistence is enabled for the relation.\n * By default its enabled, but if you want to avoid any changes in the relation to be reflected in the database you can disable it.\n * If its disabled you can only change a relation from inverse side of a relation or using relation query builder functionality.\n * This is useful for performance optimization since its disabling avoid multiple extra queries during entity save.\n */\n this.persistenceEnabled = true;\n /**\n * If set to true then related objects are allowed to be inserted to the database.\n */\n this.isCascadeInsert = false;\n /**\n * If set to true then related objects are allowed to be updated in the database.\n */\n this.isCascadeUpdate = false;\n /**\n * If set to true then related objects are allowed to be remove from the database.\n */\n this.isCascadeRemove = false;\n /**\n * If set to true then related objects are allowed to be soft-removed from the database.\n */\n this.isCascadeSoftRemove = false;\n /**\n * If set to true then related objects are allowed to be recovered from the database.\n */\n this.isCascadeRecover = false;\n /**\n * Indicates if relation column value can be nullable or not.\n */\n this.isNullable = true;\n /**\n * Indicates whether foreign key constraints will be created for join columns.\n * Can be used only for many-to-one and owner one-to-one relations.\n * Defaults to true.\n */\n this.createForeignKeyConstraints = true;\n /**\n * Indicates if this side is an owner of this relation.\n */\n this.isOwning = false;\n /**\n * Checks if this relation's type is \"one-to-one\".\n */\n this.isOneToOne = false;\n /**\n * Checks if this relation is owner side of the \"one-to-one\" relation.\n * Owner side means this side of relation has a join column in the table.\n */\n this.isOneToOneOwner = false;\n /**\n * Checks if this relation has a join column (e.g. is it many-to-one or one-to-one owner side).\n */\n this.isWithJoinColumn = false;\n /**\n * Checks if this relation is NOT owner side of the \"one-to-one\" relation.\n * NOT owner side means this side of relation does not have a join column in the table.\n */\n this.isOneToOneNotOwner = false;\n /**\n * Checks if this relation's type is \"one-to-many\".\n */\n this.isOneToMany = false;\n /**\n * Checks if this relation's type is \"many-to-one\".\n */\n this.isManyToOne = false;\n /**\n * Checks if this relation's type is \"many-to-many\".\n */\n this.isManyToMany = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is owner side of the relationship.\n * Owner side means this side of relation has a join table.\n */\n this.isManyToManyOwner = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is NOT owner side of the relationship.\n * Not owner side means this side of relation does not have a join table.\n */\n this.isManyToManyNotOwner = false;\n /**\n * Foreign keys created for this relation.\n */\n this.foreignKeys = [];\n /**\n * Join table columns.\n * Join columns can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be empty.\n * If this relation is a many-to-one/one-to-one then it takes join columns from the current entity.\n * If this relation is many-to-many then it takes all owner join columns from the junction entity.\n */\n this.joinColumns = [];\n /**\n * Inverse join table columns.\n * Inverse join columns are supported only for many-to-many relations\n * and can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be undefined.\n */\n this.inverseJoinColumns = [];\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n var args = options.args;\n this.target = args.target;\n this.propertyName = args.propertyName;\n this.relationType = args.relationType;\n if (args.inverseSideProperty)\n this.givenInverseSidePropertyFactory = args.inverseSideProperty;\n this.isLazy = args.isLazy || false;\n // this.isCascadeInsert = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"insert\") !== -1);\n // this.isCascadeUpdate = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"update\") !== -1);\n // this.isCascadeRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"remove\") !== -1);\n // this.isCascadeSoftRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n // this.isCascadeRecover = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isCascadeInsert = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"insert\") !== -1);\n this.isCascadeUpdate = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"update\") !== -1);\n this.isCascadeRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"remove\") !== -1);\n this.isCascadeSoftRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n this.isCascadeRecover = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isPrimary = args.options.primary || false;\n this.isNullable = args.options.nullable === false || this.isPrimary ? false : true;\n this.onDelete = args.options.onDelete;\n this.onUpdate = args.options.onUpdate;\n this.deferrable = args.options.deferrable;\n this.createForeignKeyConstraints = args.options.createForeignKeyConstraints === false ? false : true;\n this.isEager = args.options.eager || false;\n this.persistenceEnabled = args.options.persistence === false ? false : true;\n this.orphanedRowAction = args.options.orphanedRowAction || \"nullify\";\n this.isTreeParent = args.isTreeParent || false;\n this.isTreeChildren = args.isTreeChildren || false;\n this.type = args.type instanceof Function ? args.type() : args.type;\n this.isOneToOne = this.relationType === \"one-to-one\";\n this.isOneToMany = this.relationType === \"one-to-many\";\n this.isManyToOne = this.relationType === \"many-to-one\";\n this.isManyToMany = this.relationType === \"many-to-many\";\n this.isOneToOneNotOwner = this.isOneToOne ? true : false;\n this.isManyToManyNotOwner = this.isManyToMany ? true : false;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates join column ids map from the given related entity ids array.\n */\n RelationMetadata.prototype.getRelationIdMap = function (entity) {\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n // console.log(\"entity\", entity);\n // console.log(\"referencedColumns\", referencedColumns);\n return EntityMetadata.getValueMap(entity, referencedColumns);\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n RelationMetadata.prototype.ensureRelationIdMap = function (id) {\n if (id instanceof Object)\n return id;\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n if (referencedColumns.length > 1)\n throw new Error(\"Cannot create relation id map for a single value because relation contains multiple referenced columns.\");\n return referencedColumns[0].createValueMap(id);\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n RelationMetadata.prototype.getEntityValue = function (entity, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n if (entity === null || entity === undefined)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_1 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n if (value[propertyName]) {\n return extractEmbeddedColumnValue_1(propertyNames, value[propertyName]);\n }\n return undefined;\n }\n return value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_1(propertyNames, entity);\n if (this.isLazy) {\n if (embeddedObject[\"__\" + this.propertyName + \"__\"] !== undefined)\n return embeddedObject[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return embeddedObject[this.propertyName];\n return undefined;\n }\n return embeddedObject ? embeddedObject[this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName] : undefined;\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.isLazy) {\n if (entity[\"__\" + this.propertyName + \"__\"] !== undefined)\n return entity[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return entity[this.propertyName];\n return undefined;\n }\n return entity[this.propertyName];\n }\n };\n /**\n * Sets given entity's relation's value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n *\n * If merge is set to true, it merges given value into currently\n */\n RelationMetadata.prototype.setEntityValue = function (entity, value) {\n var propertyName = this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_2 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_2(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_2(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n entity[propertyName] = value;\n }\n };\n /**\n * Creates entity id map from the given entity ids array.\n */\n RelationMetadata.prototype.createValueMap = function (value) {\n var _a;\n var _this = this;\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_3 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_3(propertyNames, map[propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_3(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n return _a = {}, _a[this.propertyName] = value, _a;\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation metadata properties.\n * This builder method should be used only after embedded metadata tree was build.\n */\n RelationMetadata.prototype.build = function () {\n this.propertyPath = this.buildPropertyPath();\n };\n /**\n * Registers given foreign keys in the relation.\n * This builder method should be used to register foreign key in the relation.\n */\n RelationMetadata.prototype.registerForeignKeys = function () {\n var _a;\n var foreignKeys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foreignKeys[_i] = arguments[_i];\n }\n (_a = this.foreignKeys).push.apply(_a, __spreadArray([], __read(foreignKeys)));\n };\n /**\n * Registers given join columns in the relation.\n * This builder method should be used to register join column in the relation.\n */\n RelationMetadata.prototype.registerJoinColumns = function (joinColumns, inverseJoinColumns) {\n if (joinColumns === void 0) { joinColumns = []; }\n if (inverseJoinColumns === void 0) { inverseJoinColumns = []; }\n this.joinColumns = joinColumns;\n this.inverseJoinColumns = inverseJoinColumns;\n this.isOwning = this.isManyToOne || ((this.isManyToMany || this.isOneToOne) && this.joinColumns.length > 0);\n this.isOneToOneOwner = this.isOneToOne && this.isOwning;\n this.isOneToOneNotOwner = this.isOneToOne && !this.isOwning;\n this.isManyToManyOwner = this.isManyToMany && this.isOwning;\n this.isManyToManyNotOwner = this.isManyToMany && !this.isOwning;\n this.isWithJoinColumn = this.isManyToOne || this.isOneToOneOwner;\n };\n /**\n * Registers a given junction entity metadata.\n * This builder method can be called after junction entity metadata for the many-to-many relation was created.\n */\n RelationMetadata.prototype.registerJunctionEntityMetadata = function (junctionEntityMetadata) {\n this.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n if (this.inverseRelation) {\n this.inverseRelation.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n }\n };\n /**\n * Builds inverse side property path based on given inverse side property factory.\n * This builder method should be used only after properties map of the inverse entity metadata was build.\n */\n RelationMetadata.prototype.buildInverseSidePropertyPath = function () {\n if (this.givenInverseSidePropertyFactory) {\n var ownerEntityPropertiesMap = this.inverseEntityMetadata.propertiesMap;\n if (typeof this.givenInverseSidePropertyFactory === \"function\")\n return this.givenInverseSidePropertyFactory(ownerEntityPropertiesMap);\n if (typeof this.givenInverseSidePropertyFactory === \"string\")\n return this.givenInverseSidePropertyFactory;\n }\n else if (this.isTreeParent && this.entityMetadata.treeChildrenRelation) {\n return this.entityMetadata.treeChildrenRelation.propertyName;\n }\n else if (this.isTreeChildren && this.entityMetadata.treeParentRelation) {\n return this.entityMetadata.treeParentRelation.propertyName;\n }\n return \"\";\n };\n /**\n * Builds relation's property path based on its embedded tree.\n */\n RelationMetadata.prototype.buildPropertyPath = function () {\n if (!this.embeddedMetadata || !this.embeddedMetadata.parentPropertyNames.length)\n return this.propertyName;\n return this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\" + this.propertyName;\n };\n return RelationMetadata;\n}());\nexport { RelationMetadata };\n\n//# sourceMappingURL=RelationMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Contains all information about entity's embedded property.\n */\nvar EmbeddedMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EmbeddedMetadata(options) {\n /**\n * Columns inside this embed.\n */\n this.columns = [];\n /**\n * Relations inside this embed.\n */\n this.relations = [];\n /**\n * Entity listeners inside this embed.\n */\n this.listeners = [];\n /**\n * Indices applied to the embed columns.\n */\n this.indices = [];\n /**\n * Uniques applied to the embed columns.\n */\n this.uniques = [];\n /**\n * Relation ids inside this embed.\n */\n this.relationIds = [];\n /**\n * Relation counts inside this embed.\n */\n this.relationCounts = [];\n /**\n * Nested embeddable in this embeddable (which has current embedded as parent embedded).\n */\n this.embeddeds = [];\n /**\n * Indicates if this embedded is in array mode.\n *\n * This option works only in mongodb.\n */\n this.isArray = false;\n /**\n * Returns array of property names of current embed and all its parent embeds.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * we need to get value of \"id\" column from the post real entity object.\n * this method will return [\"data\", \"information\", \"counters\"]\n */\n this.parentPropertyNames = [];\n /**\n * Returns array of prefixes of current embed and all its parent embeds.\n */\n this.parentPrefixes = [];\n /**\n * Returns embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.embeddedMetadataTree = [];\n /**\n * Embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.columnsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.relationsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.listenersFromTree = [];\n /**\n * Indices of this embed and all indices from its child embeds.\n */\n this.indicesFromTree = [];\n /**\n * Uniques of this embed and all uniques from its child embeds.\n */\n this.uniquesFromTree = [];\n /**\n * Relation ids of this embed and all relation ids from its child embeds.\n */\n this.relationIdsFromTree = [];\n /**\n * Relation counts of this embed and all relation counts from its child embeds.\n */\n this.relationCountsFromTree = [];\n this.entityMetadata = options.entityMetadata;\n this.type = options.args.type();\n this.propertyName = options.args.propertyName;\n this.customPrefix = options.args.prefix;\n this.isArray = options.args.isArray;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates a new embedded object.\n */\n EmbeddedMetadata.prototype.create = function () {\n return new this.type;\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.build = function (connection) {\n this.embeddeds.forEach(function (embedded) { return embedded.build(connection); });\n this.prefix = this.buildPrefix(connection);\n this.parentPropertyNames = this.buildParentPropertyNames();\n this.parentPrefixes = this.buildParentPrefixes();\n this.propertyPath = this.parentPropertyNames.join(\".\");\n this.embeddedMetadataTree = this.buildEmbeddedMetadataTree();\n this.columnsFromTree = this.buildColumnsFromTree();\n this.relationsFromTree = this.buildRelationsFromTree();\n this.listenersFromTree = this.buildListenersFromTree();\n this.indicesFromTree = this.buildIndicesFromTree();\n this.uniquesFromTree = this.buildUniquesFromTree();\n this.relationIdsFromTree = this.buildRelationIdsFromTree();\n this.relationCountsFromTree = this.buildRelationCountsFromTree();\n return this;\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.buildPartialPrefix = function () {\n // if prefix option was not set or explicitly set to true - default prefix\n if (this.customPrefix === undefined || this.customPrefix === true) {\n return [this.propertyName];\n }\n // if prefix option was set to empty string or explicity set to false - disable prefix\n if (this.customPrefix === \"\" || this.customPrefix === false) {\n return [];\n }\n // use custom prefix\n if (typeof this.customPrefix === \"string\") {\n return [this.customPrefix];\n }\n throw new Error(\"Invalid prefix option given for \" + this.entityMetadata.targetName + \"#\" + this.propertyName);\n };\n EmbeddedMetadata.prototype.buildPrefix = function (connection) {\n if (connection.driver instanceof MongoDriver)\n return this.propertyName;\n var prefixes = [];\n if (this.parentEmbeddedMetadata)\n prefixes.push(this.parentEmbeddedMetadata.buildPrefix(connection));\n prefixes.push.apply(prefixes, __spreadArray([], __read(this.buildPartialPrefix())));\n return prefixes.join(\"_\"); // todo: use naming strategy instead of \"_\" !!!\n };\n EmbeddedMetadata.prototype.buildParentPropertyNames = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPropertyNames().concat(this.propertyName) : [this.propertyName];\n };\n EmbeddedMetadata.prototype.buildParentPrefixes = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPrefixes().concat(this.buildPartialPrefix()) : this.buildPartialPrefix();\n };\n EmbeddedMetadata.prototype.buildEmbeddedMetadataTree = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildEmbeddedMetadataTree().concat(this) : [this];\n };\n EmbeddedMetadata.prototype.buildColumnsFromTree = function () {\n return this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.buildColumnsFromTree()); }, this.columns);\n };\n EmbeddedMetadata.prototype.buildRelationsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationsFromTree()); }, this.relations);\n };\n EmbeddedMetadata.prototype.buildListenersFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildListenersFromTree()); }, this.listeners);\n };\n EmbeddedMetadata.prototype.buildIndicesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildIndicesFromTree()); }, this.indices);\n };\n EmbeddedMetadata.prototype.buildUniquesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildUniquesFromTree()); }, this.uniques);\n };\n EmbeddedMetadata.prototype.buildRelationIdsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationIdsFromTree()); }, this.relationIds);\n };\n EmbeddedMetadata.prototype.buildRelationCountsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationCountsFromTree()); }, this.relationCounts);\n };\n return EmbeddedMetadata;\n}());\nexport { EmbeddedMetadata };\n\n//# sourceMappingURL=EmbeddedMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationIdMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationIdMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Sets relation id value from the given entity.\n *\n * todo: make it to work in embeds as well.\n */\n RelationIdMetadata.prototype.setValue = function (entity) {\n var _this = this;\n var inverseEntity = this.relation.getEntityValue(entity);\n if (Array.isArray(inverseEntity)) {\n entity[this.propertyName] = inverseEntity.map(function (item) {\n return _this.relation.inverseEntityMetadata.getEntityIdMixedMap(item);\n }).filter(function (item) { return item !== null && item !== undefined; });\n }\n else {\n var value = this.relation.inverseEntityMetadata.getEntityIdMixedMap(inverseEntity);\n if (value !== undefined)\n entity[this.propertyName] = value;\n }\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation id properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationIdMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationId decorator.\");\n this.relation = relation;\n };\n return RelationIdMetadata;\n}());\nexport { RelationIdMetadata };\n\n//# sourceMappingURL=RelationIdMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationCountMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationCountMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation count metadata properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationCountMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationCount decorator.\");\n this.relation = relation;\n };\n return RelationCountMetadata;\n}());\nexport { RelationCountMetadata };\n\n//# sourceMappingURL=RelationCountMetadata.js.map\n","/**\n * Provides a constants for each entity listener type.\n */\nvar EventListenerTypes = /** @class */ (function () {\n function EventListenerTypes() {\n }\n EventListenerTypes.AFTER_LOAD = \"after-load\";\n EventListenerTypes.BEFORE_INSERT = \"before-insert\";\n EventListenerTypes.AFTER_INSERT = \"after-insert\";\n EventListenerTypes.BEFORE_UPDATE = \"before-update\";\n EventListenerTypes.AFTER_UPDATE = \"after-update\";\n EventListenerTypes.BEFORE_REMOVE = \"before-remove\";\n EventListenerTypes.AFTER_REMOVE = \"after-remove\";\n return EventListenerTypes;\n}());\nexport { EventListenerTypes };\n\n//# sourceMappingURL=EventListenerTypes.js.map\n","/**\n * Metadata args utility functions.\n */\nvar MetadataUtils = /** @class */ (function () {\n function MetadataUtils() {\n }\n /**\n * Gets given's entity all inherited classes.\n * Gives in order from parents to children.\n * For example Post extends ContentModel which extends Unit it will give\n * [Unit, ContentModel, Post]\n */\n MetadataUtils.getInheritanceTree = function (entity) {\n var tree = [entity];\n var getPrototypeOf = function (object) {\n var proto = Object.getPrototypeOf(object);\n if (proto && proto.name) {\n tree.push(proto);\n getPrototypeOf(proto);\n }\n };\n getPrototypeOf(entity);\n return tree;\n };\n /**\n * Checks if this table is inherited from another table.\n */\n MetadataUtils.isInherited = function (target1, target2) {\n return target1.prototype instanceof target2;\n };\n /**\n * Filters given array of targets by a given classes.\n * If classes are not given, then it returns array itself.\n */\n MetadataUtils.filterByTarget = function (array, classes) {\n if (!classes)\n return array;\n return array.filter(function (item) { return item.target && classes.indexOf(item.target) !== -1; });\n };\n return MetadataUtils;\n}());\nexport { MetadataUtils };\n\n//# sourceMappingURL=MetadataUtils.js.map\n","/**\n * Contains all information about entity's foreign key.\n */\nvar ForeignKeyMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ForeignKeyMetadata(options) {\n /**\n * Array of columns of this foreign key.\n */\n this.columns = [];\n /**\n * Array of referenced columns.\n */\n this.referencedColumns = [];\n /**\n * Gets array of column names.\n */\n this.columnNames = [];\n /**\n * Gets array of referenced column names.\n */\n this.referencedColumnNames = [];\n this.entityMetadata = options.entityMetadata;\n this.referencedEntityMetadata = options.referencedEntityMetadata;\n this.columns = options.columns;\n this.referencedColumns = options.referencedColumns;\n this.onDelete = options.onDelete || \"NO ACTION\";\n this.onUpdate = options.onUpdate || \"NO ACTION\";\n this.deferrable = options.deferrable;\n if (options.namingStrategy)\n this.build(options.namingStrategy);\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend foreign key properties.\n * Must be called after all entity metadatas and their columns are built.\n */\n ForeignKeyMetadata.prototype.build = function (namingStrategy) {\n this.columnNames = this.columns.map(function (column) { return column.databaseName; });\n this.referencedColumnNames = this.referencedColumns.map(function (column) { return column.databaseName; });\n this.referencedTablePath = this.referencedEntityMetadata.tablePath;\n this.name = namingStrategy.foreignKeyName(this.entityMetadata.tablePath, this.columnNames, this.referencedTablePath, this.referencedColumnNames);\n };\n return ForeignKeyMetadata;\n}());\nexport { ForeignKeyMetadata };\n\n//# sourceMappingURL=ForeignKeyMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates EntityMetadata for junction tables.\n * Junction tables are tables generated by many-to-many relations.\n */\nvar JunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the junction of the given many-to-many relation.\n */\n JunctionEntityMetadataBuilder.prototype.build = function (relation, joinTable) {\n var _this = this;\n var referencedColumns = this.collectReferencedColumns(relation, joinTable);\n var inverseReferencedColumns = this.collectInverseReferencedColumns(relation, joinTable);\n var joinTableName = joinTable.name || this.connection.namingStrategy.joinTableName(relation.entityMetadata.tableNameWithoutPrefix, relation.inverseEntityMetadata.tableNameWithoutPrefix, relation.propertyPath, relation.inverseRelation ? relation.inverseRelation.propertyName : \"\");\n var entityMetadata = new EntityMetadata({\n connection: this.connection,\n args: {\n target: \"\",\n name: joinTableName,\n type: \"junction\",\n database: joinTable.database || relation.entityMetadata.database,\n schema: joinTable.schema || relation.entityMetadata.schema,\n }\n });\n entityMetadata.build();\n // create original side junction columns\n var junctionColumns = referencedColumns.map(function (referencedColumn) {\n var joinColumn = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.propertyName, referencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: referencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n name: columnName,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n type: referencedColumn.type,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.zerofill ? true : referencedColumn.unsigned,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n // create inverse side junction columns\n var inverseJunctionColumns = inverseReferencedColumns.map(function (inverseReferencedColumn) {\n var joinColumn = joinTable.inverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableInverseColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.propertyName, inverseReferencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: inverseReferencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n length: !inverseReferencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (inverseReferencedColumn.generationStrategy === \"uuid\" || inverseReferencedColumn.type === \"uuid\")\n ? \"36\"\n : inverseReferencedColumn.length,\n width: inverseReferencedColumn.width,\n type: inverseReferencedColumn.type,\n precision: inverseReferencedColumn.precision,\n scale: inverseReferencedColumn.scale,\n charset: inverseReferencedColumn.charset,\n collation: inverseReferencedColumn.collation,\n zerofill: inverseReferencedColumn.zerofill,\n unsigned: inverseReferencedColumn.zerofill ? true : inverseReferencedColumn.unsigned,\n enum: inverseReferencedColumn.enum,\n enumName: inverseReferencedColumn.enumName,\n name: columnName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n this.changeDuplicatedColumnNames(junctionColumns, inverseJunctionColumns);\n // set junction table columns\n entityMetadata.ownerColumns = junctionColumns;\n entityMetadata.inverseColumns = inverseJunctionColumns;\n entityMetadata.ownColumns = __spreadArray(__spreadArray([], __read(junctionColumns)), __read(inverseJunctionColumns));\n entityMetadata.ownColumns.forEach(function (column) { return column.relationMetadata = relation; });\n // create junction table foreign keys\n entityMetadata.foreignKeys = relation.createForeignKeyConstraints ? [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.entityMetadata,\n columns: junctionColumns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n columns: inverseJunctionColumns,\n referencedColumns: inverseReferencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n ] : [];\n // create junction table indices\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: junctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: inverseJunctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // finally return entity metadata\n return entityMetadata;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectReferencedColumns = function (relation, joinTable) {\n var hasAnyReferencedColumnName = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!joinTable.joinColumns || (joinTable.joinColumns && !hasAnyReferencedColumnName)) {\n return relation.entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n }\n else {\n return joinTable.joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.entityMetadata.columns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.entityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects inverse referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectInverseReferencedColumns = function (relation, joinTable) {\n var hasInverseJoinColumns = !!joinTable.inverseJoinColumns;\n var hasAnyInverseReferencedColumnName = hasInverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!hasInverseJoinColumns || (hasInverseJoinColumns && !hasAnyInverseReferencedColumnName)) {\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else {\n return joinTable.inverseJoinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n JunctionEntityMetadataBuilder.prototype.changeDuplicatedColumnNames = function (junctionColumns, inverseJunctionColumns) {\n var _this = this;\n junctionColumns.forEach(function (junctionColumn) {\n inverseJunctionColumns.forEach(function (inverseJunctionColumn) {\n if (junctionColumn.givenDatabaseName === inverseJunctionColumn.givenDatabaseName) {\n var junctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(junctionColumn.propertyName, 1);\n junctionColumn.propertyName = junctionColumnName;\n junctionColumn.givenDatabaseName = junctionColumnName;\n var inverseJunctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(inverseJunctionColumn.propertyName, 2);\n inverseJunctionColumn.propertyName = inverseJunctionColumnName;\n inverseJunctionColumn.givenDatabaseName = inverseJunctionColumnName;\n }\n });\n });\n };\n return JunctionEntityMetadataBuilder;\n}());\nexport { JunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=JunctionEntityMetadataBuilder.js.map\n","import { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\n/**\n * Creates EntityMetadata for junction tables of the closure entities.\n * Closure junction tables are tables generated by closure entities.\n */\nvar ClosureJunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureJunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the closure junction of the given closure entity.\n */\n ClosureJunctionEntityMetadataBuilder.prototype.build = function (parentClosureEntityMetadata) {\n var _this = this;\n // create entity metadata itself\n var entityMetadata = new EntityMetadata({\n parentClosureEntityMetadata: parentClosureEntityMetadata,\n connection: this.connection,\n args: {\n target: \"\",\n name: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.closureTableName ? parentClosureEntityMetadata.treeOptions.closureTableName : parentClosureEntityMetadata.tableNameWithoutPrefix,\n type: \"closure-junction\"\n }\n });\n entityMetadata.build();\n // create ancestor and descendant columns for new closure junction table\n parentClosureEntityMetadata.primaryColumns.forEach(function (primaryColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"ancestor\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.ancestorColumnName ? parentClosureEntityMetadata.treeOptions.ancestorColumnName(primaryColumn) : primaryColumn.propertyName + \"_ancestor\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"descendant\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.descendantColumnName ? parentClosureEntityMetadata.treeOptions.descendantColumnName(primaryColumn) : primaryColumn.propertyName + \"_descendant\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type,\n }\n }\n }));\n });\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // if tree level column was defined by a closure entity then add it to the junction columns as well\n if (parentClosureEntityMetadata.treeLevelColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: \"level\",\n options: {\n type: this.connection.driver.mappedDataTypes.treeLevel,\n }\n }\n }));\n }\n // create junction table foreign keys\n entityMetadata.foreignKeys = [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n ];\n return entityMetadata;\n };\n return ClosureJunctionEntityMetadataBuilder;\n}());\nexport { ClosureJunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=ClosureJunctionEntityMetadataBuilder.js.map\n","/**\n * Unique metadata contains all information about table's unique constraints.\n */\nvar UniqueMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function UniqueMetadata(options) {\n /**\n * Unique columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend unique constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n UniqueMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else {\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyName) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyName; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyName; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Unique constraint \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyName);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.uniqueConstraintName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }));\n return this;\n };\n return UniqueMetadata;\n}());\nexport { UniqueMetadata };\n\n//# sourceMappingURL=UniqueMetadata.js.map\n","import { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds join column for the many-to-one and one-to-one owner relations.\n *\n * Cases it should cover:\n * 1. when join column is set with custom name and without referenced column name\n * we need automatically set referenced column name - primary ids by default\n * @JoinColumn({ name: \"custom_name\" })\n *\n * 2. when join column is set with only referenced column name\n * we need automatically set join column name - relation name + referenced column name\n * @JoinColumn({ referencedColumnName: \"title\" })\n *\n * 3. when join column is set without both referenced column name and join column name\n * we need to automatically set both of them\n * @JoinColumn()\n *\n * 4. when join column is not set at all (as in case of @ManyToOne relation)\n * we need to create join column for it with proper referenced column name and join column name\n *\n * 5. when multiple join columns set none of referencedColumnName and name can be optional\n * both options are required\n * @JoinColumn([\n * { name: \"category_title\", referencedColumnName: \"type\" },\n * { name: \"category_title\", referencedColumnName: \"name\" },\n * ])\n *\n * Since for many-to-one relations having JoinColumn decorator is not required,\n * we need to go thought each many-to-one relation without join column decorator set\n * and create join column metadata args for them.\n */\nvar RelationJoinColumnBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationJoinColumnBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a foreign key of the many-to-one or one-to-one owner relations.\n */\n RelationJoinColumnBuilder.prototype.build = function (joinColumns, relation) {\n var referencedColumns = this.collectReferencedColumns(joinColumns, relation);\n var columns = this.collectColumns(joinColumns, relation, referencedColumns);\n if (!referencedColumns.length || !relation.createForeignKeyConstraints)\n return { foreignKey: undefined, columns: columns, uniqueConstraint: undefined }; // this case is possible for one-to-one non owning side and relations with createForeignKeyConstraints = false\n var foreignKey = new ForeignKeyMetadata({\n entityMetadata: relation.entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n namingStrategy: this.connection.namingStrategy,\n columns: columns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete,\n onUpdate: relation.onUpdate,\n deferrable: relation.deferrable,\n });\n // Oracle does not allow both primary and unique constraints on the same column\n if (this.connection.driver instanceof OracleDriver && columns.every(function (column) { return column.isPrimary; }))\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n // CockroachDB requires UNIQUE constraints on referenced columns\n if (referencedColumns.length > 0 && relation.isOneToOne) {\n var uniqueConstraint = new UniqueMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n name: this.connection.namingStrategy.relationConstraintName(relation.entityMetadata.tablePath, foreignKey.columns.map(function (c) { return c.databaseName; })),\n target: relation.entityMetadata.target,\n }\n });\n uniqueConstraint.build(this.connection.namingStrategy);\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: uniqueConstraint };\n }\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectReferencedColumns = function (joinColumns, relation) {\n var hasAnyReferencedColumnName = joinColumns.find(function (joinColumnArgs) { return !!joinColumnArgs.referencedColumnName; });\n var manyToOneWithoutJoinColumn = joinColumns.length === 0 && relation.isManyToOne;\n var hasJoinColumnWithoutAnyReferencedColumnName = joinColumns.length > 0 && !hasAnyReferencedColumnName;\n if (manyToOneWithoutJoinColumn || hasJoinColumnWithoutAnyReferencedColumnName) { // covers case3 and case1\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else { // cases with referenced columns defined\n return joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; }); // todo: can we also search in relations?\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectColumns = function (joinColumns, relation, referencedColumns) {\n var _this = this;\n return referencedColumns.map(function (referencedColumn) {\n // in the case if relation has join column with only name set we need this check\n var joinColumnMetadataArg = joinColumns.find(function (joinColumn) {\n return (!joinColumn.referencedColumnName || joinColumn.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumn.name;\n });\n var joinColumnName = joinColumnMetadataArg ? joinColumnMetadataArg.name : _this.connection.namingStrategy.joinColumnName(relation.propertyName, referencedColumn.propertyName);\n var relationalColumn = relation.entityMetadata.ownColumns.find(function (column) { return column.databaseName === joinColumnName; });\n if (!relationalColumn) {\n relationalColumn = new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: relation.entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: relation.propertyName,\n options: {\n name: joinColumnName,\n type: referencedColumn.type,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.unsigned,\n comment: referencedColumn.comment,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n primary: relation.isPrimary,\n nullable: relation.isNullable,\n }\n }\n });\n relation.entityMetadata.registerColumn(relationalColumn);\n }\n relationalColumn.referencedColumn = referencedColumn; // its important to set it here because we need to set referenced column for user defined join column\n relationalColumn.type = referencedColumn.type; // also since types of relational column and join column must be equal we override user defined column type\n relationalColumn.relationMetadata = relation;\n relationalColumn.build(_this.connection);\n return relationalColumn;\n });\n };\n return RelationJoinColumnBuilder;\n}());\nexport { RelationJoinColumnBuilder };\n\n//# sourceMappingURL=RelationJoinColumnBuilder.js.map\n","/**\n * This metadata contains all information about entity's listeners.\n */\nvar EntityListenerMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityListenerMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.type = options.args.type;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Checks if entity listener is allowed to be executed on the given entity.\n */\n EntityListenerMetadata.prototype.isAllowed = function (entity) {\n return this.entityMetadata.target === entity.constructor || // todo: .constructor won't work for entity schemas, but there are no entity listeners in schemas since there are no objects, right?\n (this.entityMetadata.target instanceof Function && entity.constructor.prototype instanceof this.entityMetadata.target); // todo: also need to implement entity schema inheritance\n };\n /**\n * Executes listener method of the given entity.\n */\n EntityListenerMetadata.prototype.execute = function (entity) {\n if (!this.embeddedMetadata)\n return entity[this.propertyName]();\n this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(\".\"));\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Calls embedded entity listener method no matter how nested it is.\n */\n EntityListenerMetadata.prototype.callEntityEmbeddedMethod = function (entity, propertyPaths) {\n var propertyPath = propertyPaths.shift();\n if (!propertyPath || !entity[propertyPath])\n return;\n if (propertyPaths.length === 0) {\n entity[propertyPath][this.propertyName]();\n }\n else {\n if (entity[propertyPath])\n this.callEntityEmbeddedMethod(entity[propertyPath], propertyPaths);\n }\n };\n return EntityListenerMetadata;\n}());\nexport { EntityListenerMetadata };\n\n//# sourceMappingURL=EntityListenerMetadata.js.map\n","/**\n * Check metadata contains all information about table's check constraints.\n */\nvar CheckMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CheckMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend check constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n CheckMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.checkConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return CheckMetadata;\n}());\nexport { CheckMetadata };\n\n//# sourceMappingURL=CheckMetadata.js.map\n","/**\n * Exclusion metadata contains all information about table's exclusion constraints.\n */\nvar ExclusionMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ExclusionMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend exclusion constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n ExclusionMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.exclusionConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return ExclusionMetadata;\n}());\nexport { ExclusionMetadata };\n\n//# sourceMappingURL=ExclusionMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\nimport { EmbeddedMetadata } from \"../metadata/EmbeddedMetadata\";\nimport { RelationIdMetadata } from \"../metadata/RelationIdMetadata\";\nimport { RelationCountMetadata } from \"../metadata/RelationCountMetadata\";\nimport { EventListenerTypes } from \"../metadata/types/EventListenerTypes\";\nimport { MetadataUtils } from \"./MetadataUtils\";\nimport { JunctionEntityMetadataBuilder } from \"./JunctionEntityMetadataBuilder\";\nimport { ClosureJunctionEntityMetadataBuilder } from \"./ClosureJunctionEntityMetadataBuilder\";\nimport { RelationJoinColumnBuilder } from \"./RelationJoinColumnBuilder\";\nimport { EntityListenerMetadata } from \"../metadata/EntityListenerMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { CheckMetadata } from \"../metadata/CheckMetadata\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { ExclusionMetadata } from \"../metadata/ExclusionMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds EntityMetadata objects and all its sub-metadatas.\n */\nvar EntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityMetadataBuilder(connection, metadataArgsStorage) {\n this.connection = connection;\n this.metadataArgsStorage = metadataArgsStorage;\n this.junctionEntityMetadataBuilder = new JunctionEntityMetadataBuilder(connection);\n this.closureJunctionEntityMetadataBuilder = new ClosureJunctionEntityMetadataBuilder(connection);\n this.relationJoinColumnBuilder = new RelationJoinColumnBuilder(connection);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a complete entity metadatas for the given entity classes.\n */\n EntityMetadataBuilder.prototype.build = function (entityClasses) {\n var _this = this;\n // if entity classes to filter entities by are given then do filtering, otherwise use all\n var allTables = entityClasses ? this.metadataArgsStorage.filterTables(entityClasses) : this.metadataArgsStorage.tables;\n // filter out table metadata args for those we really create entity metadatas and tables in the db\n var realTables = allTables.filter(function (table) { return table.type === \"regular\" || table.type === \"closure\" || table.type === \"entity-child\" || table.type === \"view\"; });\n // create entity metadatas for a user defined entities (marked with @Entity decorator or loaded from entity schemas)\n var entityMetadatas = realTables.map(function (tableArgs) { return _this.createEntityMetadata(tableArgs); });\n // compute parent entity metadatas for table inheritance\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeParentEntityMetadata(entityMetadatas, entityMetadata); });\n // after all metadatas created we set child entity metadatas for table inheritance\n entityMetadatas.forEach(function (metadata) {\n metadata.childEntityMetadatas = entityMetadatas.filter(function (childMetadata) {\n return metadata.target instanceof Function\n && childMetadata.target instanceof Function\n && MetadataUtils.isInherited(childMetadata.target, metadata.target);\n });\n });\n // build entity metadata (step0), first for non-single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // build entity metadata (step0), now for single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // compute entity metadata columns, relations, etc. first for the regular, non-single-table-inherited entity metadatas\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // then do it for single table inheritance children (since they are depend on their parents to be built)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // calculate entity metadata computed properties and all its sub-metadatas\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeEntityMetadataStep2(entityMetadata); });\n // calculate entity metadata's inverse properties\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeInverseProperties(entityMetadata, entityMetadatas); });\n // go through all entity metadatas and create foreign keys / junction entity metadatas for their relations\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) {\n // create entity's relations join columns (for many-to-one and one-to-one owner)\n entityMetadata.relations.filter(function (relation) { return relation.isOneToOne || relation.isManyToOne; }).forEach(function (relation) {\n var joinColumns = _this.metadataArgsStorage.filterJoinColumns(relation.target, relation.propertyName);\n var _a = _this.relationJoinColumnBuilder.build(joinColumns, relation), foreignKey = _a.foreignKey, columns = _a.columns, uniqueConstraint = _a.uniqueConstraint; // create a foreign key based on its metadata args\n if (foreignKey) {\n relation.registerForeignKeys(foreignKey); // push it to the relation and thus register there a join column\n entityMetadata.foreignKeys.push(foreignKey);\n }\n if (columns) {\n relation.registerJoinColumns(columns);\n }\n if (uniqueConstraint) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver\n || _this.connection.driver instanceof SqlServerDriver || _this.connection.driver instanceof SapDriver) {\n var index = new IndexMetadata({\n entityMetadata: uniqueConstraint.entityMetadata,\n columns: uniqueConstraint.columns,\n args: {\n target: uniqueConstraint.target,\n name: uniqueConstraint.name,\n unique: true,\n synchronize: true\n }\n });\n if (_this.connection.driver instanceof SqlServerDriver) {\n index.where = index.columns.map(function (column) {\n return _this.connection.driver.escape(column.databaseName) + \" IS NOT NULL\";\n }).join(\" AND \");\n }\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n else {\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.uniques.push(uniqueConstraint);\n }\n else {\n relation.entityMetadata.ownUniques.push(uniqueConstraint);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n }\n if (foreignKey && _this.connection.driver instanceof CockroachDriver) {\n var index = new IndexMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n target: relation.entityMetadata.target,\n synchronize: true\n }\n });\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n // create junction entity metadatas for entity many-to-many relations\n entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; }).forEach(function (relation) {\n var joinTable = _this.metadataArgsStorage.findJoinTable(relation.target, relation.propertyName);\n if (!joinTable)\n return; // no join table set - no need to do anything (it means this is many-to-many inverse side)\n // here we create a junction entity metadata for a new junction table of many-to-many relation\n var junctionEntityMetadata = _this.junctionEntityMetadataBuilder.build(relation, joinTable);\n relation.registerForeignKeys.apply(relation, __spreadArray([], __read(junctionEntityMetadata.foreignKeys)));\n relation.registerJoinColumns(junctionEntityMetadata.ownIndices[0].columns, junctionEntityMetadata.ownIndices[1].columns);\n relation.registerJunctionEntityMetadata(junctionEntityMetadata);\n // compute new entity metadata properties and push it to entity metadatas pool\n _this.computeEntityMetadataStep2(junctionEntityMetadata);\n _this.computeInverseProperties(junctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(junctionEntityMetadata);\n });\n });\n // update entity metadata depend properties\n entityMetadatas\n .forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns = entityMetadata.relations.filter(function (relation) { return relation.isWithJoinColumn; });\n entityMetadata.hasNonNullableRelations = entityMetadata.relationsWithJoinColumns.some(function (relation) { return !relation.isNullable || relation.isPrimary; });\n });\n // generate closure junction tables for all closure tables\n entityMetadatas\n .filter(function (metadata) { return metadata.treeType === \"closure-table\"; })\n .forEach(function (entityMetadata) {\n var closureJunctionEntityMetadata = _this.closureJunctionEntityMetadataBuilder.build(entityMetadata);\n entityMetadata.closureJunctionTable = closureJunctionEntityMetadata;\n _this.computeEntityMetadataStep2(closureJunctionEntityMetadata);\n _this.computeInverseProperties(closureJunctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(closureJunctionEntityMetadata);\n });\n // generate keys for tables with single-table inheritance\n entityMetadatas\n .filter(function (metadata) { return metadata.inheritancePattern === \"STI\" && metadata.discriminatorColumn; })\n .forEach(function (entityMetadata) { return _this.createKeysForTableInheritance(entityMetadata); });\n // build all indices (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.indices.forEach(function (index) { return index.build(_this.connection.namingStrategy); });\n });\n // build all unique constraints (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.uniques.forEach(function (unique) { return unique.build(_this.connection.namingStrategy); });\n });\n // build all check constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.checks.forEach(function (check) { return check.build(_this.connection.namingStrategy); });\n });\n // build all exclusion constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.exclusions.forEach(function (exclusion) { return exclusion.build(_this.connection.namingStrategy); });\n });\n // add lazy initializer for entity relations\n entityMetadatas\n .filter(function (metadata) { return metadata.target instanceof Function; })\n .forEach(function (entityMetadata) {\n entityMetadata.relations\n .filter(function (relation) { return relation.isLazy; })\n .forEach(function (relation) {\n _this.connection.relationLoader.enableLazyLoad(relation, entityMetadata.target.prototype);\n });\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.columns.forEach(function (column) {\n // const target = column.embeddedMetadata ? column.embeddedMetadata.type : column.target;\n var generated = _this.metadataArgsStorage.findGenerated(column.target, column.propertyName);\n if (generated) {\n column.isGenerated = true;\n column.generationStrategy = generated.strategy;\n if (generated.strategy === \"uuid\") {\n column.type = \"uuid\";\n }\n else if (generated.strategy === \"rowid\") {\n column.type = \"int\";\n }\n else {\n column.type = column.type || Number;\n }\n column.build(_this.connection);\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n });\n return entityMetadatas;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates entity metadata from the given table args.\n * Creates column, relation, etc. metadatas for everything this entity metadata owns.\n */\n EntityMetadataBuilder.prototype.createEntityMetadata = function (tableArgs) {\n // we take all \"inheritance tree\" from a target entity to collect all stored metadata args\n // (by decorators or inside entity schemas). For example for target Post < ContentModel < Unit\n // it will be an array of [Post, ContentModel, Unit] and we can then get all metadata args of those classes\n var inheritanceTree = tableArgs.target instanceof Function\n ? MetadataUtils.getInheritanceTree(tableArgs.target)\n : [tableArgs.target]; // todo: implement later here inheritance for string-targets\n var tableInheritance = this.metadataArgsStorage.findInheritanceType(tableArgs.target);\n var tableTree = this.metadataArgsStorage.findTree(tableArgs.target);\n // if single table inheritance used, we need to copy all children columns in to parent table\n var singleTableChildrenTargets;\n if ((tableInheritance && tableInheritance.pattern === \"STI\") || tableArgs.type === \"entity-child\") {\n singleTableChildrenTargets = this.metadataArgsStorage\n .filterSingleTableChildren(tableArgs.target)\n .map(function (args) { return args.target; })\n .filter(function (target) { return target instanceof Function; });\n inheritanceTree.push.apply(inheritanceTree, __spreadArray([], __read(singleTableChildrenTargets)));\n }\n return new EntityMetadata({\n connection: this.connection,\n args: tableArgs,\n inheritanceTree: inheritanceTree,\n tableTree: tableTree,\n inheritancePattern: tableInheritance ? tableInheritance.pattern : undefined\n });\n };\n EntityMetadataBuilder.prototype.computeParentEntityMetadata = function (allEntityMetadatas, entityMetadata) {\n // after all metadatas created we set parent entity metadata for table inheritance\n if (entityMetadata.tableType === \"entity-child\") {\n entityMetadata.parentEntityMetadata = allEntityMetadatas.find(function (allEntityMetadata) {\n return allEntityMetadata.inheritanceTree.indexOf(entityMetadata.target) !== -1 && allEntityMetadata.inheritancePattern === \"STI\";\n });\n }\n };\n EntityMetadataBuilder.prototype.computeEntityMetadataStep1 = function (allEntityMetadatas, entityMetadata) {\n var _a, _b, _c;\n var _this = this;\n var entityInheritance = this.metadataArgsStorage.findInheritanceType(entityMetadata.target);\n var discriminatorValue = this.metadataArgsStorage.findDiscriminatorValue(entityMetadata.target);\n if (typeof discriminatorValue !== \"undefined\") {\n entityMetadata.discriminatorValue = discriminatorValue.value;\n }\n else {\n entityMetadata.discriminatorValue = entityMetadata.target.name;\n }\n // if single table inheritance is used, we need to mark all embedded columns as nullable\n entityMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(entityMetadata.inheritanceTree))\n .map(function (embedded) {\n if (entityMetadata.inheritancePattern === \"STI\") {\n embedded.columns = embedded.columns.map(function (column) {\n column.isNullable = true;\n return column;\n });\n }\n return embedded;\n });\n entityMetadata.ownColumns = this.metadataArgsStorage\n .filterColumns(entityMetadata.inheritanceTree)\n .map(function (args) {\n // for single table children we reuse columns created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.propertyName === args.propertyName; });\n var column = new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, args: args });\n // if single table inheritance used, we need to mark all inherit table columns as nullable\n var columnInSingleTableInheritedChild = allEntityMetadatas.find(function (otherEntityMetadata) { return otherEntityMetadata.tableType === \"entity-child\" && otherEntityMetadata.target === args.target; });\n if (columnInSingleTableInheritedChild)\n column.isNullable = true;\n return column;\n });\n // for table inheritance we need to add a discriminator column\n //\n if (entityInheritance && entityInheritance.column) {\n var discriminatorColumnName_1 = entityInheritance.column && entityInheritance.column.name ? entityInheritance.column.name : \"type\";\n var discriminatorColumn = entityMetadata.ownColumns.find(function (column) { return column.propertyName === discriminatorColumnName_1; });\n if (!discriminatorColumn) {\n discriminatorColumn = new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: discriminatorColumnName_1,\n options: entityInheritance.column || {\n name: discriminatorColumnName_1,\n type: \"varchar\",\n nullable: false\n }\n }\n });\n discriminatorColumn.isVirtual = true;\n discriminatorColumn.isDiscriminator = true;\n entityMetadata.ownColumns.push(discriminatorColumn);\n }\n else {\n discriminatorColumn.isDiscriminator = true;\n }\n }\n // add discriminator column to the child entity metadatas\n // discriminator column will not be there automatically since we are creating it in the code above\n if (entityMetadata.tableType === \"entity-child\") {\n var discriminatorColumn_1 = entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.isDiscriminator; });\n if (discriminatorColumn_1 && !entityMetadata.ownColumns.find(function (column) { return column === discriminatorColumn_1; })) {\n entityMetadata.ownColumns.push(discriminatorColumn_1);\n }\n }\n var namingStrategy = this.connection.namingStrategy;\n // check if tree is used then we need to add extra columns for specific tree types\n if (entityMetadata.treeType === \"materialized-path\") {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n materializedPath: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: \"mpath\",\n options: /*tree.column || */ {\n name: namingStrategy.materializedPathColumnName,\n type: \"varchar\",\n nullable: true,\n default: \"\"\n }\n }\n }));\n }\n else if (entityMetadata.treeType === \"nested-set\") {\n var _d = namingStrategy.nestedSetColumnNames, left = _d.left, right = _d.right;\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetLeft: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: left,\n options: /*tree.column || */ {\n name: left,\n type: \"integer\",\n nullable: false,\n default: 1\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetRight: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: right,\n options: /*tree.column || */ {\n name: right,\n type: \"integer\",\n nullable: false,\n default: 2\n }\n }\n }));\n }\n entityMetadata.ownRelations = this.metadataArgsStorage.filterRelations(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relations created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownRelations.find(function (relation) { return relation.propertyName === args.propertyName; });\n return new RelationMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation ids created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationIds.find(function (relationId) { return relationId.propertyName === args.propertyName; });\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation counts created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationCounts.find(function (relationCount) { return relationCount.propertyName === args.propertyName; });\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.ownListeners = this.metadataArgsStorage.filterListeners(entityMetadata.inheritanceTree).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.checks = this.metadataArgsStorage.filterChecks(entityMetadata.inheritanceTree).map(function (args) {\n return new CheckMetadata({ entityMetadata: entityMetadata, args: args });\n });\n // Only PostgreSQL supports exclusion constraints.\n if (this.connection.driver instanceof PostgresDriver) {\n entityMetadata.exclusions = this.metadataArgsStorage.filterExclusions(entityMetadata.inheritanceTree).map(function (args) {\n return new ExclusionMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n if (this.connection.driver instanceof CockroachDriver) {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return !args.unique; })\n .map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n var uniques = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return args.unique; })\n .map(function (args) {\n return new UniqueMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n }\n });\n });\n (_a = entityMetadata.ownUniques).push.apply(_a, __spreadArray([], __read(uniques)));\n }\n else {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n // Mysql and SAP HANA stores unique constraints as unique indices.\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n var indices = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n unique: true,\n synchronize: true\n }\n });\n });\n (_b = entityMetadata.ownIndices).push.apply(_b, __spreadArray([], __read(indices)));\n }\n else {\n var uniques = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, args: args });\n });\n (_c = entityMetadata.ownUniques).push.apply(_c, __spreadArray([], __read(uniques)));\n }\n };\n /**\n * Creates from the given embedded metadata args real embedded metadatas with its columns and relations,\n * and does the same for all its sub-embeddeds (goes recursively).\n */\n EntityMetadataBuilder.prototype.createEmbeddedsRecursively = function (entityMetadata, embeddedArgs) {\n var _this = this;\n return embeddedArgs.map(function (embeddedArgs) {\n var embeddedMetadata = new EmbeddedMetadata({ entityMetadata: entityMetadata, args: embeddedArgs });\n var targets = MetadataUtils.getInheritanceTree(embeddedMetadata.type);\n embeddedMetadata.columns = _this.metadataArgsStorage.filterColumns(targets).map(function (args) {\n return new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relations = _this.metadataArgsStorage.filterRelations(targets).map(function (args) {\n return new RelationMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.listeners = _this.metadataArgsStorage.filterListeners(targets).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.indices = _this.metadataArgsStorage.filterIndices(targets).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.uniques = _this.metadataArgsStorage.filterUniques(targets).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relationIds = _this.metadataArgsStorage.filterRelationIds(targets).map(function (args) {\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.relationCounts = _this.metadataArgsStorage.filterRelationCounts(targets).map(function (args) {\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.embeddeds = _this.createEmbeddedsRecursively(entityMetadata, _this.metadataArgsStorage.filterEmbeddeds(targets));\n embeddedMetadata.embeddeds.forEach(function (subEmbedded) { return subEmbedded.parentEmbeddedMetadata = embeddedMetadata; });\n entityMetadata.allEmbeddeds.push(embeddedMetadata);\n return embeddedMetadata;\n });\n };\n /**\n * Computes all entity metadata's computed properties, and all its sub-metadatas (relations, columns, embeds, etc).\n */\n EntityMetadataBuilder.prototype.computeEntityMetadataStep2 = function (entityMetadata) {\n var _this = this;\n entityMetadata.embeddeds.forEach(function (embedded) { return embedded.build(_this.connection); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.columnsFromTree.forEach(function (column) { return column.build(_this.connection); });\n embedded.relationsFromTree.forEach(function (relation) { return relation.build(); });\n });\n entityMetadata.ownColumns.forEach(function (column) { return column.build(_this.connection); });\n entityMetadata.ownRelations.forEach(function (relation) { return relation.build(); });\n entityMetadata.relations = entityMetadata.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.relationsFromTree); }, entityMetadata.ownRelations);\n entityMetadata.eagerRelations = entityMetadata.relations.filter(function (relation) { return relation.isEager; });\n entityMetadata.lazyRelations = entityMetadata.relations.filter(function (relation) { return relation.isLazy; });\n entityMetadata.oneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOne; });\n entityMetadata.oneToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToMany; });\n entityMetadata.manyToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToOne; });\n entityMetadata.manyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; });\n entityMetadata.ownerOneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOneOwner; });\n entityMetadata.ownerManyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToManyOwner; });\n entityMetadata.treeParentRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeParent; });\n entityMetadata.treeChildrenRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeChildren; });\n entityMetadata.columns = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, entityMetadata.ownColumns);\n entityMetadata.listeners = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.listenersFromTree); }, entityMetadata.ownListeners);\n entityMetadata.afterLoadListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_LOAD; });\n entityMetadata.afterInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_INSERT; });\n entityMetadata.afterUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_UPDATE; });\n entityMetadata.afterRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_REMOVE; });\n entityMetadata.beforeInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_INSERT; });\n entityMetadata.beforeUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_UPDATE; });\n entityMetadata.beforeRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_REMOVE; });\n entityMetadata.indices = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.indicesFromTree); }, entityMetadata.ownIndices);\n entityMetadata.uniques = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.uniquesFromTree); }, entityMetadata.ownUniques);\n entityMetadata.primaryColumns = entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n entityMetadata.nonVirtualColumns = entityMetadata.columns.filter(function (column) { return !column.isVirtual; });\n entityMetadata.ancestorColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"ancestor\"; });\n entityMetadata.descendantColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"descendant\"; });\n entityMetadata.hasMultiplePrimaryKeys = entityMetadata.primaryColumns.length > 1;\n entityMetadata.generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.isObjectId; });\n entityMetadata.hasUUIDGeneratedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n entityMetadata.createDateColumn = entityMetadata.columns.find(function (column) { return column.isCreateDate; });\n entityMetadata.updateDateColumn = entityMetadata.columns.find(function (column) { return column.isUpdateDate; });\n entityMetadata.deleteDateColumn = entityMetadata.columns.find(function (column) { return column.isDeleteDate; });\n entityMetadata.versionColumn = entityMetadata.columns.find(function (column) { return column.isVersion; });\n entityMetadata.discriminatorColumn = entityMetadata.columns.find(function (column) { return column.isDiscriminator; });\n entityMetadata.treeLevelColumn = entityMetadata.columns.find(function (column) { return column.isTreeLevel; });\n entityMetadata.nestedSetLeftColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetLeft; });\n entityMetadata.nestedSetRightColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetRight; });\n entityMetadata.materializedPathColumn = entityMetadata.columns.find(function (column) { return column.isMaterializedPath; });\n entityMetadata.objectIdColumn = entityMetadata.columns.find(function (column) { return column.isObjectId; });\n entityMetadata.foreignKeys.forEach(function (foreignKey) { return foreignKey.build(_this.connection.namingStrategy); });\n entityMetadata.propertiesMap = entityMetadata.createPropertiesMap();\n entityMetadata.relationIds.forEach(function (relationId) { return relationId.build(); });\n entityMetadata.relationCounts.forEach(function (relationCount) { return relationCount.build(); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.relationIdsFromTree.forEach(function (relationId) { return relationId.build(); });\n embedded.relationCountsFromTree.forEach(function (relationCount) { return relationCount.build(); });\n });\n };\n /**\n * Computes entity metadata's relations inverse side properties.\n */\n EntityMetadataBuilder.prototype.computeInverseProperties = function (entityMetadata, entityMetadatas) {\n entityMetadata.relations.forEach(function (relation) {\n // compute inverse side (related) entity metadatas for all relation metadatas\n var inverseEntityMetadata = entityMetadatas.find(function (m) { return m.target === relation.type || (typeof relation.type === \"string\" && (m.targetName === relation.type || m.givenTableName === relation.type)); });\n if (!inverseEntityMetadata)\n throw new Error(\"Entity metadata for \" + entityMetadata.name + \"#\" + relation.propertyPath + \" was not found. Check if you specified a correct entity object and if it's connected in the connection options.\");\n relation.inverseEntityMetadata = inverseEntityMetadata;\n relation.inverseSidePropertyPath = relation.buildInverseSidePropertyPath();\n // and compute inverse relation and mark if it has such\n relation.inverseRelation = inverseEntityMetadata.relations.find(function (foundRelation) { return foundRelation.propertyPath === relation.inverseSidePropertyPath; });\n });\n };\n /**\n * Creates indices for the table of single table inheritance.\n */\n EntityMetadataBuilder.prototype.createKeysForTableInheritance = function (entityMetadata) {\n entityMetadata.indices.push(new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.discriminatorColumn],\n args: {\n target: entityMetadata.target,\n unique: false\n }\n }));\n };\n return EntityMetadataBuilder;\n}());\nexport { EntityMetadataBuilder };\n\n//# sourceMappingURL=EntityMetadataBuilder.js.map\n","import { MetadataUtils } from \"../metadata-builder/MetadataUtils\";\n/**\n * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc.\n * Each metadata args represents some specifications of what it represents.\n * MetadataArgs used to create a real Metadata objects.\n */\nvar MetadataArgsStorage = /** @class */ (function () {\n function MetadataArgsStorage() {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n this.tables = [];\n this.trees = [];\n this.entityRepositories = [];\n this.transactionEntityManagers = [];\n this.transactionRepositories = [];\n this.namingStrategies = [];\n this.entitySubscribers = [];\n this.indices = [];\n this.uniques = [];\n this.checks = [];\n this.exclusions = [];\n this.columns = [];\n this.generations = [];\n this.relations = [];\n this.joinColumns = [];\n this.joinTables = [];\n this.entityListeners = [];\n this.relationCounts = [];\n this.relationIds = [];\n this.embeddeds = [];\n this.inheritances = [];\n this.discriminatorValues = [];\n }\n MetadataArgsStorage.prototype.filterTables = function (target) {\n return this.filterByTarget(this.tables, target);\n };\n MetadataArgsStorage.prototype.filterColumns = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.columns, target);\n };\n MetadataArgsStorage.prototype.findGenerated = function (target, propertyName) {\n return this.generations.find(function (generated) {\n return (Array.isArray(target) ? target.indexOf(generated.target) !== -1 : generated.target === target) && generated.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.findTree = function (target) {\n return this.trees.find(function (tree) {\n return (Array.isArray(target) ? target.indexOf(tree.target) !== -1 : tree.target === target);\n });\n };\n MetadataArgsStorage.prototype.filterRelations = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relations, target);\n };\n MetadataArgsStorage.prototype.filterRelationIds = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationIds, target);\n };\n MetadataArgsStorage.prototype.filterRelationCounts = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationCounts, target);\n };\n MetadataArgsStorage.prototype.filterIndices = function (target) {\n // todo: implement parent-entity overrides?\n return this.indices.filter(function (index) {\n return Array.isArray(target) ? target.indexOf(index.target) !== -1 : index.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterUniques = function (target) {\n return this.uniques.filter(function (unique) {\n return Array.isArray(target) ? target.indexOf(unique.target) !== -1 : unique.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterChecks = function (target) {\n return this.checks.filter(function (check) {\n return Array.isArray(target) ? target.indexOf(check.target) !== -1 : check.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterExclusions = function (target) {\n return this.exclusions.filter(function (exclusion) {\n return Array.isArray(target) ? target.indexOf(exclusion.target) !== -1 : exclusion.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterListeners = function (target) {\n return this.filterByTarget(this.entityListeners, target);\n };\n MetadataArgsStorage.prototype.filterEmbeddeds = function (target) {\n return this.filterByTargetAndWithoutDuplicateEmbeddedProperties(this.embeddeds, target);\n };\n MetadataArgsStorage.prototype.findJoinTable = function (target, propertyName) {\n return this.joinTables.find(function (joinTable) {\n return joinTable.target === target && joinTable.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterJoinColumns = function (target, propertyName) {\n // todo: implement parent-entity overrides?\n return this.joinColumns.filter(function (joinColumn) {\n return joinColumn.target === target && joinColumn.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSubscribers = function (target) {\n return this.filterByTarget(this.entitySubscribers, target);\n };\n MetadataArgsStorage.prototype.filterNamingStrategies = function (target) {\n return this.filterByTarget(this.namingStrategies, target);\n };\n MetadataArgsStorage.prototype.filterTransactionEntityManagers = function (target, propertyName) {\n return this.transactionEntityManagers.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterTransactionRepository = function (target, propertyName) {\n return this.transactionRepositories.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSingleTableChildren = function (target) {\n return this.tables.filter(function (table) {\n return table.target instanceof Function\n && target instanceof Function\n && MetadataUtils.isInherited(table.target, target)\n && table.type === \"entity-child\";\n });\n };\n MetadataArgsStorage.prototype.findInheritanceType = function (target) {\n return this.inheritances.find(function (inheritance) { return inheritance.target === target; });\n };\n MetadataArgsStorage.prototype.findDiscriminatorValue = function (target) {\n return this.discriminatorValues.find(function (discriminatorValue) { return discriminatorValue.target === target; });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Filters given array by a given target or targets.\n */\n MetadataArgsStorage.prototype.filterByTarget = function (array, target) {\n return array.filter(function (table) {\n return Array.isArray(target) ? target.indexOf(table.target) !== -1 : table.target === target;\n });\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n if (!newArray.find(function (newItem) { return newItem.propertyName === item.propertyName; }))\n newArray.push(item);\n }\n });\n return newArray;\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate embedded property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateEmbeddedProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n var isDuplicateEmbeddedProperty = newArray.find(function (newItem) {\n return newItem.prefix === item.prefix && newItem.propertyName === item.propertyName;\n });\n if (!isDuplicateEmbeddedProperty)\n newArray.push(item);\n }\n });\n return newArray;\n };\n return MetadataArgsStorage;\n}());\nexport { MetadataArgsStorage };\n\n//# sourceMappingURL=MetadataArgsStorage.js.map\n","import { __values } from \"tslib\";\nimport { MetadataArgsStorage } from \"../metadata-args/MetadataArgsStorage\";\n/**\n * Transforms entity schema into metadata args storage.\n * The result will be just like entities read from decorators.\n */\nvar EntitySchemaTransformer = /** @class */ (function () {\n function EntitySchemaTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Transforms entity schema into new metadata args storage object.\n */\n EntitySchemaTransformer.prototype.transform = function (schemas) {\n var metadataArgsStorage = new MetadataArgsStorage();\n schemas.forEach(function (entitySchema) {\n var options = entitySchema.options;\n // add table metadata args from the schema\n var tableMetadata = {\n target: options.target || options.name,\n name: options.tableName,\n database: options.database,\n schema: options.schema,\n type: options.type || \"regular\",\n orderBy: options.orderBy,\n synchronize: options.synchronize,\n expression: options.expression\n };\n metadataArgsStorage.tables.push(tableMetadata);\n // add columns metadata args from the schema\n Object.keys(options.columns).forEach(function (columnName) {\n var column = options.columns[columnName];\n var mode = \"regular\";\n if (column.createDate)\n mode = \"createDate\";\n if (column.updateDate)\n mode = \"updateDate\";\n if (column.deleteDate)\n mode = \"deleteDate\";\n if (column.version)\n mode = \"version\";\n if (column.treeChildrenCount)\n mode = \"treeChildrenCount\";\n if (column.treeLevel)\n mode = \"treeLevel\";\n if (column.objectId)\n mode = \"objectId\";\n var columnAgrs = {\n target: options.target || options.name,\n mode: mode,\n propertyName: columnName,\n options: {\n type: column.type,\n name: column.objectId ? \"_id\" : column.name,\n length: column.length,\n width: column.width,\n nullable: column.nullable,\n readonly: column.readonly,\n update: column.update,\n select: column.select,\n insert: column.insert,\n primary: column.primary,\n unique: column.unique,\n comment: column.comment,\n default: column.default,\n onUpdate: column.onUpdate,\n precision: column.precision,\n scale: column.scale,\n zerofill: column.zerofill,\n unsigned: column.unsigned,\n charset: column.charset,\n collation: column.collation,\n enum: column.enum,\n asExpression: column.asExpression,\n generatedType: column.generatedType,\n hstoreType: column.hstoreType,\n array: column.array,\n transformer: column.transformer,\n spatialFeatureType: column.spatialFeatureType,\n srid: column.srid\n }\n };\n metadataArgsStorage.columns.push(columnAgrs);\n if (column.generated) {\n var generationArgs = {\n target: options.target || options.name,\n propertyName: columnName,\n strategy: typeof column.generated === \"string\" ? column.generated : \"increment\"\n };\n metadataArgsStorage.generations.push(generationArgs);\n }\n if (column.unique)\n metadataArgsStorage.uniques.push({ target: options.target || options.name, columns: [columnName] });\n });\n // add relation metadata args from the schema\n if (options.relations) {\n Object.keys(options.relations).forEach(function (relationName) {\n var e_1, _a;\n var relationSchema = options.relations[relationName];\n var relation = {\n target: options.target || options.name,\n propertyName: relationName,\n relationType: relationSchema.type,\n isLazy: relationSchema.lazy || false,\n type: relationSchema.target,\n inverseSideProperty: relationSchema.inverseSide,\n isTreeParent: relationSchema.treeParent,\n isTreeChildren: relationSchema.treeChildren,\n options: {\n eager: relationSchema.eager || false,\n cascade: relationSchema.cascade,\n nullable: relationSchema.nullable,\n onDelete: relationSchema.onDelete,\n onUpdate: relationSchema.onUpdate,\n deferrable: relationSchema.deferrable,\n primary: relationSchema.primary,\n persistence: relationSchema.persistence\n }\n };\n metadataArgsStorage.relations.push(relation);\n // add join column\n if (relationSchema.joinColumn) {\n if (typeof relationSchema.joinColumn === \"boolean\") {\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n else {\n var joinColumnsOptions = Array.isArray(relationSchema.joinColumn) ? relationSchema.joinColumn : [relationSchema.joinColumn];\n try {\n for (var joinColumnsOptions_1 = __values(joinColumnsOptions), joinColumnsOptions_1_1 = joinColumnsOptions_1.next(); !joinColumnsOptions_1_1.done; joinColumnsOptions_1_1 = joinColumnsOptions_1.next()) {\n var joinColumnOption = joinColumnsOptions_1_1.value;\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName,\n name: joinColumnOption.name,\n referencedColumnName: joinColumnOption.referencedColumnName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (joinColumnsOptions_1_1 && !joinColumnsOptions_1_1.done && (_a = joinColumnsOptions_1.return)) _a.call(joinColumnsOptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n }\n // add join table\n if (relationSchema.joinTable) {\n if (typeof relationSchema.joinTable === \"boolean\") {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n else {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName,\n name: relationSchema.joinTable.name,\n database: relationSchema.joinTable.database,\n schema: relationSchema.joinTable.schema,\n joinColumns: (relationSchema.joinTable.joinColumn ? [relationSchema.joinTable.joinColumn] : relationSchema.joinTable.joinColumns),\n inverseJoinColumns: (relationSchema.joinTable.inverseJoinColumn ? [relationSchema.joinTable.inverseJoinColumn] : relationSchema.joinTable.inverseJoinColumns),\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n }\n });\n }\n // add index metadata args from the schema\n if (options.indices) {\n options.indices.forEach(function (index) {\n var indexAgrs = {\n target: options.target || options.name,\n name: index.name,\n unique: index.unique === true ? true : false,\n spatial: index.spatial === true ? true : false,\n fulltext: index.fulltext === true ? true : false,\n parser: index.parser,\n synchronize: index.synchronize === false ? false : true,\n where: index.where,\n sparse: index.sparse,\n columns: index.columns\n };\n metadataArgsStorage.indices.push(indexAgrs);\n });\n }\n // add unique metadata args from the schema\n if (options.uniques) {\n options.uniques.forEach(function (unique) {\n var uniqueAgrs = {\n target: options.target || options.name,\n name: unique.name,\n columns: unique.columns\n };\n metadataArgsStorage.uniques.push(uniqueAgrs);\n });\n }\n // add check metadata args from the schema\n if (options.checks) {\n options.checks.forEach(function (check) {\n var checkAgrs = {\n target: options.target || options.name,\n name: check.name,\n expression: check.expression\n };\n metadataArgsStorage.checks.push(checkAgrs);\n });\n }\n // add exclusion metadata args from the schema\n if (options.exclusions) {\n options.exclusions.forEach(function (exclusion) {\n var exclusionArgs = {\n target: options.target || options.name,\n name: exclusion.name,\n expression: exclusion.expression\n };\n metadataArgsStorage.exclusions.push(exclusionArgs);\n });\n }\n });\n return metadataArgsStorage;\n };\n return EntitySchemaTransformer;\n}());\nexport { EntitySchemaTransformer };\n\n//# sourceMappingURL=EntitySchemaTransformer.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { importClassesFromDirectories } from \"../util/DirectoryExportedClassesLoader\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { getFromContainer } from \"../container\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { EntityMetadataBuilder } from \"../metadata-builder/EntityMetadataBuilder\";\nimport { EntitySchemaTransformer } from \"../entity-schema/EntitySchemaTransformer\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nvar ConnectionMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ConnectionMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds migration instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildMigrations = function (migrations) {\n var _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];\n var allMigrationClasses = __spreadArray(__spreadArray([], __read(migrationClasses)), __read(importClassesFromDirectories(this.connection.logger, migrationDirectories)));\n return allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); });\n };\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildSubscribers = function (subscribers) {\n var _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];\n var allSubscriberClasses = __spreadArray(__spreadArray([], __read(subscriberClasses)), __read(importClassesFromDirectories(this.connection.logger, subscriberDirectories)));\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(function (metadata) { return getFromContainer(metadata.target); });\n };\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildEntityMetadatas = function (entities) {\n // todo: instead we need to merge multiple metadata args storages\n var _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];\n var entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });\n var entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });\n var allEntityClasses = __spreadArray(__spreadArray([], __read(entityClasses)), __read(importClassesFromDirectories(this.connection.logger, entityDirectories)));\n allEntityClasses.forEach(function (entityClass) {\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n allEntityClasses.slice(allEntityClasses.indexOf(entityClass), 1);\n }\n });\n var decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n var metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n var schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n return __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas)), __read(schemaEntityMetadatas));\n };\n return ConnectionMetadataBuilder;\n}());\nexport { ConnectionMetadataBuilder };\n\n//# sourceMappingURL=ConnectionMetadataBuilder.js.map\n","/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and does not use syntax highlighting.\n */\nvar SimpleConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SimpleConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n SimpleConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query\" + \": \" + sql);\n }\n };\n /**\n * Logs query that is failed.\n */\n SimpleConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query failed: \" + sql);\n console.log(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n SimpleConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query is slow: \" + sql);\n console.log(\"execution time: \" + time);\n };\n /**\n * Logs events from the schema build process.\n */\n SimpleConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n console.log(message);\n }\n };\n /**\n * Logs events from the migrations run process.\n */\n SimpleConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n console.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n SimpleConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n console.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n console.info(message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(message);\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n SimpleConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return SimpleConsoleLogger;\n}());\nexport { SimpleConsoleLogger };\n\n//# sourceMappingURL=SimpleConsoleLogger.js.map\n","import { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and use syntax highlighting.\n */\nvar AdvancedConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AdvancedConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n AdvancedConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logInfo(\"query:\", PlatformTools.highlightSql(sql));\n }\n };\n /**\n * Logs query that is failed.\n */\n AdvancedConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logError(\"query failed:\", PlatformTools.highlightSql(sql));\n PlatformTools.logError(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n AdvancedConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logWarn(\"query is slow:\", PlatformTools.highlightSql(sql));\n PlatformTools.logWarn(\"execution time:\", time);\n };\n /**\n * Logs events from the schema build process.\n */\n AdvancedConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n PlatformTools.log(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n AdvancedConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n PlatformTools.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n AdvancedConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n PlatformTools.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n PlatformTools.logInfo(\"INFO:\", message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(PlatformTools.warn(message));\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n AdvancedConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return AdvancedConsoleLogger;\n}());\nexport { AdvancedConsoleLogger };\n\n//# sourceMappingURL=AdvancedConsoleLogger.js.map\n","import { __extends } from \"tslib\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger logs everything into ormlogs.log file.\n */\nvar DummyLogger = /** @class */ (function () {\n function DummyLogger() {\n }\n /**\n * Logs query and parameters used in it.\n */\n DummyLogger.prototype.logQuery = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is failed.\n */\n DummyLogger.prototype.logQueryError = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is slow.\n */\n DummyLogger.prototype.logQuerySlow = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the schema build process.\n */\n DummyLogger.prototype.logSchemaBuild = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the migrations run process.\n */\n DummyLogger.prototype.logMigration = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n DummyLogger.prototype.log = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n return DummyLogger;\n}());\nexport { DummyLogger };\nvar FileLogger = /** @class */ (function (_super) {\n __extends(FileLogger, _super);\n function FileLogger() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FileLogger;\n}(DummyLogger));\nexport { FileLogger };\n\n//# sourceMappingURL=BrowserFileLoggerDummy.js.map\n","import debug from \"debug\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM via debug library.\n */\nvar DebugLogger = /** @class */ (function () {\n function DebugLogger() {\n this.debugQueryLog = debug(\"typeorm:query:log\");\n this.debugQueryError = debug(\"typeorm:query:error\");\n this.debugQuerySlow = debug(\"typeorm:query:slow\");\n this.debugSchemaBuild = debug(\"typeorm:schema\");\n this.debugMigration = debug(\"typeorm:migration\");\n this.debugLog = debug(\"typeorm:log\");\n this.debugInfo = debug(\"typeorm:info\");\n this.debugWarn = debug(\"typeorm:warn\");\n }\n /**\n * Logs query and parameters used in it.\n */\n DebugLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.debugQueryLog.enabled) {\n this.debugQueryLog(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryLog(\"parameters:\", parameters);\n }\n }\n };\n /**\n * Logs query that failed.\n */\n DebugLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.debugQueryError.enabled) {\n this.debugQueryError(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryError(\"parameters:\", parameters);\n }\n this.debugQueryError(\"error: \", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n DebugLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n if (this.debugQuerySlow.enabled) {\n this.debugQuerySlow(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQuerySlow(\"parameters:\", parameters);\n }\n this.debugQuerySlow(\"execution time:\", time);\n }\n };\n /**\n * Logs events from the schema build process.\n */\n DebugLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.debugSchemaBuild.enabled) {\n this.debugSchemaBuild(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n DebugLogger.prototype.logMigration = function (message, queryRunner) {\n if (this.debugMigration.enabled) {\n this.debugMigration(message);\n }\n };\n /**\n * Perform logging using given logger.\n * Log has its own level and message.\n */\n DebugLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.debugLog.enabled) {\n this.debugLog(message);\n }\n break;\n case \"info\":\n if (this.debugInfo.enabled) {\n this.debugInfo(message);\n }\n break;\n case \"warn\":\n if (this.debugWarn.enabled) {\n this.debugWarn(message);\n }\n break;\n }\n };\n return DebugLogger;\n}());\nexport { DebugLogger };\n\n//# sourceMappingURL=DebugLogger.js.map\n","import { SimpleConsoleLogger } from \"./SimpleConsoleLogger\";\nimport { AdvancedConsoleLogger } from \"./AdvancedConsoleLogger\";\nimport { FileLogger } from \"./FileLogger\";\nimport { DebugLogger } from \"./DebugLogger\";\n/**\n * Helps to create logger instances.\n */\nvar LoggerFactory = /** @class */ (function () {\n function LoggerFactory() {\n }\n /**\n * Creates a new logger depend on a given connection's driver.\n */\n LoggerFactory.prototype.create = function (logger, options) {\n if (logger instanceof Object)\n return logger;\n if (logger) {\n switch (logger) {\n case \"simple-console\":\n return new SimpleConsoleLogger(options);\n case \"file\":\n return new FileLogger(options);\n case \"advanced-console\":\n return new AdvancedConsoleLogger(options);\n case \"debug\":\n return new DebugLogger();\n }\n }\n return new AdvancedConsoleLogger(options);\n };\n return LoggerFactory;\n}());\nexport { LoggerFactory };\n\n//# sourceMappingURL=LoggerFactory.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Caches query result into Redis database.\n */\nvar RedisQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RedisQueryResultCache(connection, clientType) {\n this.connection = connection;\n this.clientType = clientType;\n this.redis = this.loadRedis();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n RedisQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var cacheOptions;\n return __generator(this, function (_a) {\n cacheOptions = this.connection.options.cache;\n if (this.clientType === \"redis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = this.redis.createClient(cacheOptions.options);\n }\n else {\n this.client = this.redis.createClient();\n }\n }\n else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options);\n }\n else {\n this.client = new this.redis();\n }\n }\n else if (this.clientType === \"ioredis/cluster\") {\n if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n }\n else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n }\n else {\n throw new Error(\"options.startupNodes required for \" + this.clientType + \".\");\n }\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects the connection\n */\n RedisQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.quit(function (err, result) {\n if (err)\n return fail(err);\n ok();\n _this.client = undefined;\n });\n })];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n RedisQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n RedisQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n var _this = this;\n return new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.get(options.identifier, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else if (options.query) {\n _this.client.get(options.query, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else {\n ok(undefined);\n }\n });\n };\n /**\n * Checks if cache is expired or not.\n */\n RedisQueryResultCache.prototype.isExpired = function (savedCache) {\n return (savedCache.time + savedCache.duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n RedisQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n else if (options.query) {\n _this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n })];\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n RedisQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.flushdb(function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n })];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n RedisQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n return _this.deleteKey(identifier);\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes a single key from redis database.\n */\n RedisQueryResultCache.prototype.deleteKey = function (key) {\n var _this = this;\n return new Promise(function (ok, fail) {\n _this.client.del(key, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n });\n };\n /**\n * Loads redis dependency.\n */\n RedisQueryResultCache.prototype.loadRedis = function () {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\");\n }\n else {\n return PlatformTools.load(this.clientType);\n }\n }\n catch (e) {\n throw new Error(\"Cannot use cache because \" + this.clientType + \" is not installed. Please run \\\"npm i \" + this.clientType + \" --save\\\".\");\n }\n };\n return RedisQueryResultCache;\n}());\nexport { RedisQueryResultCache };\n\n//# sourceMappingURL=RedisQueryResultCache.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nvar DbQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DbQueryResultCache(connection) {\n this.connection = connection;\n var options = this.connection.driver.options;\n var cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n var cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n DbQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects with given cache provider.\n */\n DbQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n DbQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var driver, tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n driver = this.connection.driver;\n return [4 /*yield*/, queryRunner.hasTable(this.queryResultCacheTable)];\n case 1:\n tableExist = _a.sent();\n if (tableExist)\n return [2 /*return*/];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheId }),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheIdentifier }),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheTime }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheDuration }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheQuery }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheResult }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n DbQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n queryRunner = this.getQueryRunner(queryRunner);\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n if (options.identifier) {\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"identifier\") + \" = :identifier\")\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n }\n else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(\"dbms_lob.compare(\" + qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \", :query) = 0\", { query: options.query })\n .getRawOne();\n }\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \" = :query\")\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n return Promise.resolve(undefined);\n };\n /**\n * Checks if cache is expired or not.\n */\n DbQueryResultCache.prototype.isExpired = function (savedCache) {\n var duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time) : savedCache.time) + duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n DbQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var insertedValues, qb, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n insertedValues = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n if (!(savedCache && savedCache.identifier)) return [3 /*break*/, 2];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n qb.where(qb.escape(\"identifier\") + \" = :condition\", { condition: insertedValues.identifier });\n return [4 /*yield*/, qb.execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 6];\n case 2:\n if (!(savedCache && savedCache.query)) return [3 /*break*/, 4];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(\"dbms_lob.compare(\\\"query\\\", :condition) = 0\", { condition: insertedValues.query });\n }\n else {\n qb.where(qb.escape(\"query\") + \" = :condition\", { condition: insertedValues.query });\n }\n return [4 /*yield*/, qb.execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 6];\n case 4: // otherwise insert\n return [4 /*yield*/, queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n DbQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable)];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n DbQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n var qb = _this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(_this.queryResultCacheTable)\n .where(qb.escape(\"identifier\") + \" = :identifier\", { identifier: identifier })\n .execute();\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets a query runner to work with.\n */\n DbQueryResultCache.prototype.getQueryRunner = function (queryRunner) {\n if (queryRunner)\n return queryRunner;\n return this.connection.createQueryRunner();\n };\n return DbQueryResultCache;\n}());\nexport { DbQueryResultCache };\n\n//# sourceMappingURL=DbQueryResultCache.js.map\n","import { RedisQueryResultCache } from \"./RedisQueryResultCache\";\nimport { DbQueryResultCache } from \"./DbQueryResultCache\";\n/**\n * Caches query result into Redis database.\n */\nvar QueryResultCacheFactory = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryResultCacheFactory(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query result cache based on connection options.\n */\n QueryResultCacheFactory.prototype.create = function () {\n if (!this.connection.options.cache)\n throw new Error(\"To use cache you need to enable it in connection options by setting cache: true or providing some caching options. Example: { host: ..., username: ..., cache: true }\");\n var cache = this.connection.options.cache;\n if (cache.provider && typeof cache.provider === \"function\") {\n return cache.provider(this.connection);\n }\n if (cache.type === \"redis\" || cache.type === \"ioredis\" || cache.type === \"ioredis/cluster\") {\n return new RedisQueryResultCache(this.connection, cache.type);\n }\n else {\n return new DbQueryResultCache(this.connection);\n }\n };\n return QueryResultCacheFactory;\n}());\nexport { QueryResultCacheFactory };\n\n//# sourceMappingURL=QueryResultCacheFactory.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nvar RelationLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationLoader(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation data for the given entity and its relation.\n */\n RelationLoader.prototype.load = function (relation, entityOrEntities, queryRunner) {\n if (queryRunner && queryRunner.isReleased)\n queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n }\n else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n };\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n RelationLoader.prototype.loadManyToOneOrOneToOneOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var columns = relation.entityMetadata.primaryColumns;\n var joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation.joinColumns;\n var conditions = joinColumns.map(function (joinColumn) {\n return relation.entityMetadata.name + \".\" + joinColumn.propertyName + \" = \" + relation.propertyName + \".\" + joinColumn.referencedColumn.propertyName;\n }).join(\" AND \");\n var joinAliasName = relation.entityMetadata.name;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target, joinAliasName, conditions);\n if (columns.length === 1) {\n qb.where(joinAliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (joinAliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n RelationLoader.prototype.loadOneToManyOrOneToOneNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var aliasName = relation.propertyName;\n var columns = relation.inverseRelation.joinColumns;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation.entityMetadata.target, aliasName);\n if (columns.length === 1) {\n qb.where(aliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (aliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n RelationLoader.prototype.loadManyToManyOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" IN (:...\" + joinColumn.propertyName + \")\";\n });\n var inverseJoinColumnConditions = relation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \"=\" + mainAlias + \".\" + inverseJoinColumn.referencedColumn.propertyName;\n });\n var parameters = relation.joinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n RelationLoader.prototype.loadManyToManyNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" = \" + mainAlias + \".\" + joinColumn.referencedColumn.propertyName;\n });\n var inverseJoinColumnConditions = relation.inverseRelation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \" IN (:...\" + inverseJoinColumn.propertyName + \")\";\n });\n var parameters = relation.inverseRelation.inverseJoinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n RelationLoader.prototype.enableLazyLoad = function (relation, entity, queryRunner) {\n var relationLoader = this;\n var dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n var promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n var resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n var setData = function (entity, value) {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n var setPromise = function (entity, value) {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n function (result) { return entity[promiseIndex] === value ? setData(entity, result) : result; });\n return value;\n };\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n var loader = relationLoader.load(relation, this, queryRunner).then(function (result) { return relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result; });\n return setPromise(this, loader);\n },\n set: function (value) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n }\n else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n };\n return RelationLoader;\n}());\nexport { RelationLoader };\n\n//# sourceMappingURL=RelationLoader.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\n/**\n * Loads relation ids for the given entities.\n */\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection) {\n this.connection = connection;\n }\n /**\n * Loads relation ids of the given entity or entities.\n */\n RelationIdLoader.prototype.load = function (relationOrTarget, relationNameOrEntities, entitiesOrRelatedEntities, maybeRelatedEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, entities, relatedEntities, entityMetadata;\n return __generator(this, function (_a) {\n if (relationOrTarget instanceof RelationMetadata) {\n relation = relationOrTarget;\n entities = Array.isArray(relationNameOrEntities) ? relationNameOrEntities : [relationNameOrEntities];\n relatedEntities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : (entitiesOrRelatedEntities ? [entitiesOrRelatedEntities] : undefined);\n }\n else {\n entityMetadata = this.connection.getMetadata(relationOrTarget);\n relation = entityMetadata.findRelationWithPropertyPath(relationNameOrEntities);\n if (!relation)\n throw new Error(\"Relation \\\"\" + relation + \"\\\" was not found in \\\"\" + entityMetadata.name + \"\\\".\");\n entities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : [entitiesOrRelatedEntities];\n relatedEntities = Array.isArray(maybeRelatedEntities) ? maybeRelatedEntities : (maybeRelatedEntities ? [maybeRelatedEntities] : undefined);\n }\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return [2 /*return*/, this.loadForManyToMany(relation, entities, relatedEntities)];\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return [2 /*return*/, this.loadForManyToOneAndOneToOneOwner(relation, entities, relatedEntities)];\n }\n else { // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return [2 /*return*/, this.loadForOneToManyAndOneToOneNotOwner(relation, entities, relatedEntities)];\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n RelationIdLoader.prototype.loadManyToManyRelationIdsAndGroup = function (relation, entitiesOrEntities, relatedEntityOrEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var isMany, entities, relationIds, relatedEntities, columns, inverseColumns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isMany = relation.isManyToMany || relation.isOneToMany;\n entities = Array.isArray(entitiesOrEntities) ? entitiesOrEntities : [entitiesOrEntities];\n if (!!relatedEntityOrEntities) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.relationLoader.load(relation, entitiesOrEntities)];\n case 1:\n relatedEntityOrEntities = _a.sent();\n if (!relatedEntityOrEntities.length)\n return [2 /*return*/, entities.map(function (entity) { return ({ entity: entity, related: isMany ? [] : undefined }); })];\n _a.label = 2;\n case 2: return [4 /*yield*/, this.load(relation, entitiesOrEntities, relatedEntityOrEntities)];\n case 3:\n relationIds = _a.sent();\n relatedEntities = Array.isArray(relatedEntityOrEntities) ? relatedEntityOrEntities : [relatedEntityOrEntities];\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.entityMetadata.primaryColumns;\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.entityMetadata.primaryColumns;\n inverseColumns = relation.inverseRelation.joinColumns.map(function (column) { return column.referencedColumn; });\n }\n else {\n }\n return [2 /*return*/, entities.map(function (entity) {\n var group = { entity: entity, related: isMany ? [] : undefined };\n relationIds.forEach(function (relationId) {\n var entityMatched = inverseColumns.every(function (column) {\n return column.getEntityValue(entity) === relationId[column.entityMetadata.name + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (entityMatched) {\n relatedEntities.forEach(function (relatedEntity) {\n var relatedEntityMatched = columns.every(function (column) {\n return column.getEntityValue(relatedEntity) === relationId[column.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (relatedEntityMatched) {\n if (isMany) {\n group.related.push(relatedEntity);\n }\n else {\n group.related = relatedEntity;\n }\n }\n });\n }\n });\n return group;\n })];\n }\n });\n });\n };\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise {\n\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation ids for the many-to-many relation.\n */\n RelationIdLoader.prototype.loadForManyToMany = function (relation, entities, relatedEntities) {\n var junctionMetadata = relation.junctionEntityMetadata;\n var mainAlias = junctionMetadata.name;\n var columns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n var inverseColumns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n var qb = this.connection.createQueryBuilder();\n // select all columns from junction table\n junctionMetadata.ownerColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n junctionMetadata.inverseColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add conditions for the given entities\n var condition1 = \"\";\n if (columns.length === 1) {\n qb.setParameter(\"values1\", entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n condition1 = mainAlias + \".\" + columns[0].propertyPath + \" IN (:...values1)\"; // todo: use ANY for postgres\n }\n else {\n condition1 = \"(\" + entities.map(function (entity, entityIndex) {\n return columns.map(function (column) {\n var paramName = \"entity1_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n // add conditions for the given inverse entities\n var condition2 = \"\";\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n qb.setParameter(\"values2\", relatedEntities.map(function (entity) { return inverseColumns[0].referencedColumn.getEntityValue(entity); }));\n condition2 = mainAlias + \".\" + inverseColumns[0].propertyPath + \" IN (:...values2)\"; // todo: use ANY for postgres\n }\n else {\n condition2 = \"(\" + relatedEntities.map(function (entity, entityIndex) {\n return inverseColumns.map(function (column) {\n var paramName = \"entity2_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n }\n // execute query\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"))\n .getRawMany();\n };\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n RelationIdLoader.prototype.loadForManyToOneAndOneToOneOwner = function (relation, entities, relatedEntities) {\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.entityMetadata.primaryColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.entityMetadata.primaryColumns[0].getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.entityMetadata.primaryColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n RelationIdLoader.prototype.loadForOneToManyAndOneToOneNotOwner = function (relation, entities, relatedEntities) {\n relation = relation.inverseRelation;\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + relation.inverseRelation.propertyPath.replace(\".\", \"_\") + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.joinColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.joinColumns[0].referencedColumn.getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.joinColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.joinColumns.map(function (joinColumn, joinColumnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + joinColumnIndex;\n qb.setParameter(paramName, joinColumn.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + joinColumn.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\";\nimport { CannotExecuteNotConnectedError } from \"../error/CannotExecuteNotConnectedError\";\nimport { CannotConnectAlreadyConnectedError } from \"../error/CannotConnectAlreadyConnectedError\";\nimport { EntityMetadataNotFoundError } from \"../error/EntityMetadataNotFoundError\";\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoEntityManager } from \"../entity-manager/MongoEntityManager\";\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\";\nimport { DriverFactory } from \"../driver/DriverFactory\";\nimport { ConnectionMetadataBuilder } from \"./ConnectionMetadataBuilder\";\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\";\nimport { LoggerFactory } from \"../logger/LoggerFactory\";\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\";\nimport { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\";\nimport { RelationLoader } from \"../query-builder/RelationLoader\";\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\";\nimport { EntitySchema } from \"../\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nvar Connection = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Connection(options) {\n /**\n * Migration instances that are registered for this connection.\n */\n this.migrations = [];\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n this.subscribers = [];\n /**\n * All entity metadatas that are registered for this connection.\n */\n this.entityMetadatas = [];\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.relationIdLoader = new RelationIdLoader(this);\n this.isConnected = false;\n }\n Object.defineProperty(Connection.prototype, \"mongoManager\", {\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get: function () {\n if (!(this.manager instanceof MongoEntityManager))\n throw new Error(\"MongoEntityManager is only available for MongoDB databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Connection.prototype, \"sqljsManager\", {\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get: function () {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new Error(\"SqljsEntityManager is only available for Sqljs databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n Connection.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n // connect to the database via its driver\n return [4 /*yield*/, this.driver.connect()];\n case 1:\n // connect to the database via its driver\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.connect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n _a.label = 4;\n case 4:\n _a.trys.push([4, 12, , 14]);\n // build all metadatas registered in the current connection\n this.buildMetadatas();\n return [4 /*yield*/, this.driver.afterConnect()];\n case 5:\n _a.sent();\n if (!this.options.dropSchema) return [3 /*break*/, 7];\n return [4 /*yield*/, this.dropDatabase()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7:\n if (!this.options.synchronize) return [3 /*break*/, 9];\n return [4 /*yield*/, this.synchronize()];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!this.options.migrationsRun) return [3 /*break*/, 11];\n return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 14];\n case 12:\n error_1 = _a.sent();\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n return [4 /*yield*/, this.close()];\n case 13:\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n _a.sent();\n throw error_1;\n case 14: return [2 /*return*/, this];\n }\n });\n });\n };\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n Connection.prototype.close = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n return [4 /*yield*/, this.driver.disconnect()];\n case 1:\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.disconnect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n ObjectUtils.assign(this, { isConnected: false });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n Connection.prototype.synchronize = function (dropBeforeSync) {\n if (dropBeforeSync === void 0) { dropBeforeSync = false; }\n return __awaiter(this, void 0, void 0, function () {\n var schemaBuilder;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n if (!dropBeforeSync) return [3 /*break*/, 2];\n return [4 /*yield*/, this.dropDatabase()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n schemaBuilder = this.driver.createSchemaBuilder();\n return [4 /*yield*/, schemaBuilder.build()];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n Connection.prototype.dropDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, databases_2, databases_1, databases_1_1, database, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.createQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 13, 15]);\n if (!(this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 10];\n databases_2 = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(function (metadata) {\n if (metadata.database && databases_2.indexOf(metadata.database) === -1)\n databases_2.push(metadata.database);\n });\n _b.label = 2;\n case 2:\n _b.trys.push([2, 7, 8, 9]);\n databases_1 = __values(databases_2), databases_1_1 = databases_1.next();\n _b.label = 3;\n case 3:\n if (!!databases_1_1.done) return [3 /*break*/, 6];\n database = databases_1_1.value;\n return [4 /*yield*/, queryRunner.clearDatabase(database)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n databases_1_1 = databases_1.next();\n return [3 /*break*/, 3];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (databases_1_1 && !databases_1_1.done && (_a = databases_1.return)) _a.call(databases_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 9: return [3 /*break*/, 12];\n case 10: return [4 /*yield*/, queryRunner.clearDatabase()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [3 /*break*/, 15];\n case 13: return [4 /*yield*/, queryRunner.release()];\n case 14:\n _b.sent();\n return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.runMigrations = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor, successMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.executePendingMigrations()];\n case 1:\n successMigrations = _a.sent();\n return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.undoLastMigration = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.undoLastMigration()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n Connection.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n migrationExecutor = new MigrationExecutor(this);\n return [4 /*yield*/, migrationExecutor.showMigrations()];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n Connection.prototype.hasMetadata = function (target) {\n return !!this.findMetadata(target);\n };\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n Connection.prototype.getMetadata = function (target) {\n var metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n return metadata;\n };\n /**\n * Gets repository for the given entity.\n */\n Connection.prototype.getRepository = function (target) {\n return this.manager.getRepository(target);\n };\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n Connection.prototype.getTreeRepository = function (target) {\n return this.manager.getTreeRepository(target);\n };\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n Connection.prototype.getMongoRepository = function (target) {\n if (!(this.driver instanceof MongoDriver))\n throw new Error(\"You can use getMongoRepository only for MongoDB connections.\");\n return this.manager.getRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n Connection.prototype.getCustomRepository = function (customRepository) {\n return this.manager.getCustomRepository(customRepository);\n };\n Connection.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.manager.transaction(isolationOrRunInTransaction, runInTransactionParam)];\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n Connection.prototype.query = function (query, parameters, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var usedQueryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this instanceof MongoEntityManager)\n throw new Error(\"Queries aren't supported by MongoDB.\");\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n usedQueryRunner = queryRunner || this.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, usedQueryRunner.query(query, parameters)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, usedQueryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {\n if (this instanceof MongoEntityManager)\n throw new Error(\"Query Builder is not supported by MongoDB.\");\n if (alias) {\n var metadata = this.getMetadata(entityOrRunner);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n }\n else {\n return new SelectQueryBuilder(this, entityOrRunner);\n }\n };\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n Connection.prototype.createQueryRunner = function (mode) {\n if (mode === void 0) { mode = \"master\"; }\n var queryRunner = this.driver.createQueryRunner(mode);\n var manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n };\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n Connection.prototype.getManyToManyMetadata = function (entityTarget, relationPropertyPath) {\n var relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \\\"\" + relationPropertyPath + \"\\\" was not found in \" + entityTarget + \" entity.\");\n if (!relationMetadata.isManyToMany)\n throw new Error(\"Relation \\\"\" + entityTarget + \"#\" + relationPropertyPath + \"\\\" does not have a many-to-many relationship.\" +\n \"You can use this method only on many-to-many relations.\");\n return relationMetadata.junctionEntityMetadata;\n };\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n Connection.prototype.createEntityManager = function (queryRunner) {\n return new EntityManagerFactory().create(this, queryRunner);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n Connection.prototype.findMetadata = function (target) {\n return this.entityMetadatas.find(function (metadata) {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n }\n else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n return false;\n });\n };\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n Connection.prototype.buildMetadatas = function () {\n var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n var entityMetadataValidator = new EntityMetadataValidator();\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n // build entity metadatas\n var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n // create migration instances\n var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n this.driver.database = this.getDatabaseName();\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== \"view\"; }), this.driver);\n };\n // This database name property is nested for replication configs.\n Connection.prototype.getDatabaseName = function () {\n var options = this.options;\n switch (options.type) {\n case \"mysql\":\n case \"mariadb\":\n case \"postgres\":\n case \"cockroachdb\":\n case \"mssql\":\n case \"oracle\":\n return DriverUtils.buildDriverOptions(options.replication ? options.replication.master : options).database;\n case \"mongodb\":\n return DriverUtils.buildMongoDBDriverOptions(options).database;\n default:\n return DriverUtils.buildDriverOptions(options).database;\n }\n };\n return Connection;\n}());\nexport { Connection };\n\n//# sourceMappingURL=Connection.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to get connection that does not exist.\n */\nvar ConnectionNotFoundError = /** @class */ (function (_super) {\n __extends(ConnectionNotFoundError, _super);\n function ConnectionNotFoundError(name) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionNotFoundError\";\n Object.setPrototypeOf(_this, ConnectionNotFoundError.prototype);\n _this.message = \"Connection \\\"\" + name + \"\\\" was not found.\";\n return _this;\n }\n return ConnectionNotFoundError;\n}(Error));\nexport { ConnectionNotFoundError };\n\n//# sourceMappingURL=ConnectionNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to recreate connection with the same name, but previous connection was not closed yet.\n */\nvar AlreadyHasActiveConnectionError = /** @class */ (function (_super) {\n __extends(AlreadyHasActiveConnectionError, _super);\n function AlreadyHasActiveConnectionError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"AlreadyHasActiveConnectionError\";\n Object.setPrototypeOf(_this, AlreadyHasActiveConnectionError.prototype);\n _this.message = \"Cannot create a new connection named \\\"\" + connectionName + \"\\\", because connection with such name \" +\n \"already exist and it now has an active connection session.\";\n return _this;\n }\n return AlreadyHasActiveConnectionError;\n}(Error));\nexport { AlreadyHasActiveConnectionError };\n\n//# sourceMappingURL=AlreadyHasActiveConnectionError.js.map\n","import { Connection } from \"./Connection\";\nimport { ConnectionNotFoundError } from \"../error/ConnectionNotFoundError\";\nimport { AlreadyHasActiveConnectionError } from \"../error/AlreadyHasActiveConnectionError\";\n/**\n * ConnectionManager is used to store and manage multiple orm connections.\n * It also provides useful factory methods to simplify connection creation.\n */\nvar ConnectionManager = /** @class */ (function () {\n function ConnectionManager() {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * List of connections registered in this connection manager.\n */\n this.connections = [];\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if connection with the given name exist in the manager.\n */\n ConnectionManager.prototype.has = function (name) {\n return !!this.connections.find(function (connection) { return connection.name === name; });\n };\n /**\n * Gets registered connection with the given name.\n * If connection name is not given then it will get a default connection.\n * Throws error if connection with the given name was not found.\n */\n ConnectionManager.prototype.get = function (name) {\n if (name === void 0) { name = \"default\"; }\n var connection = this.connections.find(function (connection) { return connection.name === name; });\n if (!connection)\n throw new ConnectionNotFoundError(name);\n return connection;\n };\n /**\n * Creates a new connection based on the given connection options and registers it in the manager.\n * Connection won't be established, you'll need to manually call connect method to establish connection.\n */\n ConnectionManager.prototype.create = function (options) {\n // check if such connection is already registered\n var existConnection = this.connections.find(function (connection) { return connection.name === (options.name || \"default\"); });\n if (existConnection) {\n // if connection is registered and its not closed then throw an error\n if (existConnection.isConnected)\n throw new AlreadyHasActiveConnectionError(options.name || \"default\");\n // if its registered but closed then simply remove it from the manager\n this.connections.splice(this.connections.indexOf(existConnection), 1);\n }\n // create a new connection\n var connection = new Connection(options);\n this.connections.push(connection);\n return connection;\n };\n return ConnectionManager;\n}());\nexport { ConnectionManager };\n\n//# sourceMappingURL=ConnectionManager.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsEnvReader = /** @class */ (function () {\n function ConnectionOptionsEnvReader() {\n }\n ConnectionOptionsEnvReader.prototype.read = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsEnvReader;\n}());\nexport { ConnectionOptionsEnvReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsXmlReader = /** @class */ (function () {\n function ConnectionOptionsXmlReader() {\n }\n ConnectionOptionsXmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsXmlReader;\n}());\nexport { ConnectionOptionsXmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsYmlReader = /** @class */ (function () {\n function ConnectionOptionsYmlReader() {\n }\n ConnectionOptionsYmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsYmlReader;\n}());\nexport { ConnectionOptionsYmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsReader = /** @class */ (function () {\n function ConnectionOptionsReader() {\n }\n ConnectionOptionsReader.prototype.all = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.get = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.has = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsReader;\n}());\nexport { ConnectionOptionsReader };\n\n//# sourceMappingURL=BrowserConnectionOptionsReaderDummy.js.map\n","export {};\n\n//# sourceMappingURL=EntityTarget.js.map\n","export {};\n\n//# sourceMappingURL=ObjectType.js.map\n","export {};\n\n//# sourceMappingURL=ObjectLiteral.js.map\n","export {};\n\n//# sourceMappingURL=DeepPartial.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get method parameter's type.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar CannotReflectMethodParameterTypeError = /** @class */ (function (_super) {\n __extends(CannotReflectMethodParameterTypeError, _super);\n function CannotReflectMethodParameterTypeError(target, methodName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotReflectMethodParameterTypeError\";\n Object.setPrototypeOf(_this, CannotReflectMethodParameterTypeError.prototype);\n _this.message = \"Cannot get reflected type for a \\\"\" + methodName + \"\\\" method's parameter of \\\"\" + target.name + \"\\\" class. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application.\";\n return _this;\n }\n return CannotReflectMethodParameterTypeError;\n}(Error));\nexport { CannotReflectMethodParameterTypeError };\n\n//# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to execute operation that requires connection to be established.\n */\nvar ConnectionIsNotSetError = /** @class */ (function (_super) {\n __extends(ConnectionIsNotSetError, _super);\n function ConnectionIsNotSetError(dbType) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionIsNotSetError\";\n Object.setPrototypeOf(_this, ConnectionIsNotSetError.prototype);\n _this.message = \"Connection with \" + dbType + \" database is not established. Check connection configuration.\";\n return _this;\n }\n return ConnectionIsNotSetError;\n}(Error));\nexport { ConnectionIsNotSetError };\n\n//# sourceMappingURL=ConnectionIsNotSetError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataAlreadyExistsError, _super);\n function MetadataAlreadyExistsError(metadataType, constructor, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata already exists for the class constructor \" + JSON.stringify(constructor) +\n (propertyName ? \" on property \" + propertyName : \". If you previously renamed or moved entity class, make sure\" +\n \" that compiled version of old entity class source wasn't left in the compiler output directory.\");\n return _this;\n }\n return MetadataAlreadyExistsError;\n}(Error));\nexport { MetadataAlreadyExistsError };\n\n//# sourceMappingURL=MetadataAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\nvar PrimaryColumnCannotBeNullableError = /** @class */ (function (_super) {\n __extends(PrimaryColumnCannotBeNullableError, _super);\n function PrimaryColumnCannotBeNullableError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"PrimaryColumnCannotBeNullableError\";\n Object.setPrototypeOf(_this, PrimaryColumnCannotBeNullableError.prototype);\n _this.message = \"Primary column \" + object.constructor.name + \"#\" + propertyName + \" cannot be nullable. \" +\n \"Its not allowed for primary keys. Try to remove nullable option.\";\n return _this;\n }\n return PrimaryColumnCannotBeNullableError;\n}(Error));\nexport { PrimaryColumnCannotBeNullableError };\n\n//# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access repository before connection is established.\n */\nvar NoConnectionForRepositoryError = /** @class */ (function (_super) {\n __extends(NoConnectionForRepositoryError, _super);\n function NoConnectionForRepositoryError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NoConnectionForRepositoryError\";\n Object.setPrototypeOf(_this, NoConnectionForRepositoryError.prototype);\n _this.message = \"Cannot get a Repository for \\\"\" + connectionName + \" connection, because connection with the database \" +\n \"is not established yet. Call connection#connect method to establish connection.\";\n return _this;\n }\n return NoConnectionForRepositoryError;\n}(Error));\nexport { NoConnectionForRepositoryError };\n\n//# sourceMappingURL=NoConnectionForRepositoryError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableIsNotAllowedError, _super);\n function UsingJoinTableIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableIsNotAllowedError.prototype);\n _this.message = \"Using JoinTable on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n (entityMetadata.name + \"#\" + relation.propertyName + \" has \" + relation.relationType + \" relation, \") +\n \"however you can use JoinTable only on many-to-many relations.\";\n return _this;\n }\n return UsingJoinTableIsNotAllowedError;\n}(Error));\nexport { UsingJoinTableIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinTableIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinColumnError = /** @class */ (function (_super) {\n __extends(MissingJoinColumnError, _super);\n function MissingJoinColumnError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinColumnError\";\n Object.setPrototypeOf(_this, MissingJoinColumnError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinColumn is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" one-to-one relationship. \") +\n \"You need to put JoinColumn decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinColumn is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" one-to-one relationship. \" +\n \"You need to put JoinColumn decorator on it.\";\n }\n return _this;\n }\n return MissingJoinColumnError;\n}(Error));\nexport { MissingJoinColumnError };\n\n//# sourceMappingURL=MissingJoinColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access entity manager before connection is established.\n */\nvar CannotGetEntityManagerNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotGetEntityManagerNotConnectedError, _super);\n function CannotGetEntityManagerNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotGetEntityManagerNotConnectedError\";\n Object.setPrototypeOf(_this, CannotGetEntityManagerNotConnectedError.prototype);\n _this.message = \"Cannot get entity manager for \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotGetEntityManagerNotConnectedError;\n}(Error));\nexport { CannotGetEntityManagerNotConnectedError };\n\n//# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataWithSuchNameAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataWithSuchNameAlreadyExistsError, _super);\n function MetadataWithSuchNameAlreadyExistsError(metadataType, name) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataWithSuchNameAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataWithSuchNameAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata with such name \" + name + \" already exists. \" +\n \"Do you apply decorator twice? Or maybe try to change a name?\";\n return _this;\n }\n return MetadataWithSuchNameAlreadyExistsError;\n}(Error));\nexport { MetadataWithSuchNameAlreadyExistsError };\n\n//# sourceMappingURL=MetadataWithSuchNameAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use naming strategy that does not exist.\n */\nvar NamingStrategyNotFoundError = /** @class */ (function (_super) {\n __extends(NamingStrategyNotFoundError, _super);\n function NamingStrategyNotFoundError(strategyName, connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NamingStrategyNotFoundError\";\n Object.setPrototypeOf(_this, NamingStrategyNotFoundError.prototype);\n var name = strategyName instanceof Function ? strategyName.name : strategyName;\n _this.message = \"Naming strategy \\\"\" + name + \"\\\" was not found. Looks like this naming strategy does not \" +\n (\"exist or it was not registered in current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return NamingStrategyNotFoundError;\n}(Error));\nexport { NamingStrategyNotFoundError };\n\n//# sourceMappingURL=NamingStrategyNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinTableError = /** @class */ (function (_super) {\n __extends(MissingJoinTableError, _super);\n function MissingJoinTableError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinTableError\";\n Object.setPrototypeOf(_this, MissingJoinTableError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinTable is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" many-to-many relationship. \") +\n \"You need to put decorator decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinTable is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" many-to-many relationship. \" +\n \"You need to put JoinTable decorator on it.\";\n }\n return _this;\n }\n return MissingJoinTableError;\n}(Error));\nexport { MissingJoinTableError };\n\n//# sourceMappingURL=MissingJoinTableError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnOnlyOnOneSideAllowedError, _super);\n function UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinColumn is allowed only on one side of the one-to-one relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinTable decorator only on it.\";\n return _this;\n }\n return UsingJoinColumnOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinColumnOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableOnlyOnOneSideAllowedError, _super);\n function UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinTable is allowed only on one side of the many-to-many relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinColumn decorator only on it.\";\n return _this;\n }\n return UsingJoinTableOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinTableOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinTableOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown . Theoretically can't be thrown.\n */\nvar PersistedEntityNotFoundError = /** @class */ (function (_super) {\n __extends(PersistedEntityNotFoundError, _super);\n function PersistedEntityNotFoundError() {\n var _this = _super.call(this) || this;\n _this.name = \"PersistedEntityNotFoundError\";\n Object.setPrototypeOf(_this, PersistedEntityNotFoundError.prototype);\n _this.message = \"Internal error. Persisted entity was not found in the list of prepared operated entities.\";\n return _this;\n }\n return PersistedEntityNotFoundError;\n}(Error));\nexport { PersistedEntityNotFoundError };\n\n//# sourceMappingURL=PersistedEntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnIsNotAllowedError, _super);\n function UsingJoinColumnIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnIsNotAllowedError.prototype);\n _this.message = \"Using JoinColumn on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n \"You can use JoinColumn only on one-to-one and many-to-one relations.\";\n return _this;\n }\n return UsingJoinColumnIsNotAllowedError;\n}(Error));\nexport { UsingJoinColumnIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get column's type automatically.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar ColumnTypeUndefinedError = /** @class */ (function (_super) {\n __extends(ColumnTypeUndefinedError, _super);\n function ColumnTypeUndefinedError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"ColumnTypeUndefinedError\";\n Object.setPrototypeOf(_this, ColumnTypeUndefinedError.prototype);\n _this.message = \"Column type for \" + object.constructor.name + \"#\" + propertyName + \" is not defined and cannot be guessed. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application (before any entity imported).\" +\n \"If you are using JavaScript instead of TypeScript you must explicitly provide a column type.\";\n return _this;\n }\n return ColumnTypeUndefinedError;\n}(Error));\nexport { ColumnTypeUndefinedError };\n\n//# sourceMappingURL=ColumnTypeUndefinedError.js.map\n","export * from \"./CannotReflectMethodParameterTypeError\";\nexport * from \"./AlreadyHasActiveConnectionError\";\nexport * from \"./SubjectWithoutIdentifierError\";\nexport * from \"./CannotConnectAlreadyConnectedError\";\nexport * from \"./LockNotSupportedOnGivenDriverError\";\nexport * from \"./ConnectionIsNotSetError\";\nexport * from \"./CannotCreateEntityIdMapError\";\nexport * from \"./MetadataAlreadyExistsError\";\nexport * from \"./CannotDetermineEntityError\";\nexport * from \"./UpdateValuesMissingError\";\nexport * from \"./TreeRepositoryNotSupportedError\";\nexport * from \"./CustomRepositoryNotFoundError\";\nexport * from \"./TransactionNotStartedError\";\nexport * from \"./TransactionAlreadyStartedError\";\nexport * from \"./EntityNotFoundError\";\nexport * from \"./EntityMetadataNotFoundError\";\nexport * from \"./MustBeEntityError\";\nexport * from \"./OptimisticLockVersionMismatchError\";\nexport * from \"./LimitOnUpdateNotSupportedError\";\nexport * from \"./PrimaryColumnCannotBeNullableError\";\nexport * from \"./CustomRepositoryCannotInheritRepositoryError\";\nexport * from \"./QueryRunnerProviderAlreadyReleasedError\";\nexport * from \"./CannotAttachTreeChildrenEntityError\";\nexport * from \"./CustomRepositoryDoesNotHaveEntityError\";\nexport * from \"./MissingDeleteDateColumnError\";\nexport * from \"./NoConnectionForRepositoryError\";\nexport * from \"./CircularRelationsError\";\nexport * from \"./ReturningStatementNotSupportedError\";\nexport * from \"./UsingJoinTableIsNotAllowedError\";\nexport * from \"./MissingJoinColumnError\";\nexport * from \"./MissingPrimaryColumnError\";\nexport * from \"./EntityColumnNotFound\";\nexport * from \"./MissingDriverError\";\nexport * from \"./DriverPackageNotInstalledError\";\nexport * from \"./CannotGetEntityManagerNotConnectedError\";\nexport * from \"./ConnectionNotFoundError\";\nexport * from \"./NoVersionOrUpdateDateColumnError\";\nexport * from \"./InsertValuesMissingError\";\nexport * from \"./OptimisticLockCanNotBeUsedError\";\nexport * from \"./MetadataWithSuchNameAlreadyExistsError\";\nexport * from \"./DriverOptionNotSetError\";\nexport * from \"./FindRelationsNotFoundError\";\nexport * from \"./RepositoryNotFoundError\";\nexport * from \"./NamingStrategyNotFoundError\";\nexport * from \"./PessimisticLockTransactionRequiredError\";\nexport * from \"./RepositoryNotTreeError\";\nexport * from \"./DataTypeNotSupportedError\";\nexport * from \"./InitializedRelationError\";\nexport * from \"./MissingJoinTableError\";\nexport * from \"./QueryFailedError\";\nexport * from \"./NoNeedToReleaseEntityManagerError\";\nexport * from \"./UsingJoinColumnOnlyOnOneSideAllowedError\";\nexport * from \"./UsingJoinTableOnlyOnOneSideAllowedError\";\nexport * from \"./SubjectRemovedAndUpdatedError\";\nexport * from \"./PersistedEntityNotFoundError\";\nexport * from \"./UsingJoinColumnIsNotAllowedError\";\nexport * from \"./ColumnTypeUndefinedError\";\nexport * from \"./QueryRunnerAlreadyReleasedError\";\nexport * from \"./OffsetWithoutLimitNotSupportedError\";\nexport * from \"./CannotExecuteNotConnectedError\";\nexport * from \"./NoConnectionOptionError\";\n\n//# sourceMappingURL=index.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n */\nexport function Column(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\" || typeOrOptions instanceof Function) {\n type = typeOrOptions;\n }\n else if (typeOrOptions) {\n options = typeOrOptions;\n type = typeOrOptions.type;\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType) // if type is not given explicitly then try to guess it\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // specify HSTORE type if column is HSTORE\n if (options.type === \"hstore\" && !options.hstoreType)\n options.hstoreType = reflectMetadataType === Object ? \"object\" : \"string\";\n if (typeOrOptions instanceof Function) { // register an embedded\n getMetadataArgsStorage().embeddeds.push({\n target: object.constructor,\n propertyName: propertyName,\n isArray: reflectMetadataType === Array || options.array === true,\n prefix: options.prefix !== undefined ? options.prefix : undefined,\n type: typeOrOptions\n });\n }\n else { // register a regular column\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // create unique\n if (options.unique === true)\n getMetadataArgsStorage().uniques.push({ target: object.constructor, columns: [propertyName] });\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n }\n };\n}\n\n//# sourceMappingURL=Column.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a creation date of the inserted object.\n * Creation date is generated and inserted only once,\n * at the first time when you create an object, the value is inserted into the table, and is never touched again.\n */\nexport function CreateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"createDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=CreateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a delete date of the soft-deleted object.\n * This date is being updated each time you soft-delete the object.\n */\nexport function DeleteDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"deleteDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=DeleteDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * This column creates an integer PRIMARY COLUMN with generated set to true.\n */\nexport function PrimaryGeneratedColumn(strategyOrOptions, maybeOptions) {\n // normalize parameters\n var options = {};\n var strategy;\n if (strategyOrOptions) {\n if (typeof strategyOrOptions === \"string\")\n strategy = strategyOrOptions;\n if (strategyOrOptions instanceof Object) {\n strategy = \"increment\";\n Object.assign(options, strategyOrOptions);\n }\n }\n else {\n strategy = \"increment\";\n }\n if (maybeOptions instanceof Object)\n Object.assign(options, maybeOptions);\n return function (object, propertyName) {\n // if column type is not explicitly set then determine it based on generation strategy\n if (!options.type) {\n if (strategy === \"increment\") {\n options.type = Number;\n }\n else if (strategy === \"uuid\") {\n options.type = \"uuid\";\n }\n else if (strategy === \"rowid\") {\n options.type = \"int\";\n }\n }\n // explicitly set a primary and generated to column options\n options.primary = true;\n // register column metadata args\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n // register generated metadata args\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=PrimaryGeneratedColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\nimport { PrimaryColumnCannotBeNullableError } from \"../../error/PrimaryColumnCannotBeNullableError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * Primary columns also creates a PRIMARY KEY for this column in a db.\n */\nexport function PrimaryColumn(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\") {\n type = typeOrOptions;\n }\n else {\n options = Object.assign({}, typeOrOptions);\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType)\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // check if column is not nullable, because we cannot allow a primary key to be nullable\n if (options.nullable)\n throw new PrimaryColumnCannotBeNullableError(object, propertyName);\n // explicitly set a primary to column options\n options.primary = true;\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n };\n}\n\n//# sourceMappingURL=PrimaryColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store an update date of the updated object.\n * This date is being updated each time you persist the object.\n */\nexport function UpdateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"updateDate\",\n options: options ? options : {}\n });\n };\n}\n\n//# sourceMappingURL=UpdateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a number - version of the entity.\n * Every time your entity will be persisted, this number will be increased by one -\n * so you can organize visioning and update strategies of your entity.\n */\nexport function VersionColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"version\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=VersionColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * ViewColumn decorator is used to mark a specific class property as a view column.\n */\nexport function ViewColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=ViewColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of column that is available only for MongoDB database.\n * Marks your entity's column to be an object id.\n */\nexport function ObjectIdColumn(options) {\n return function (object, propertyName) {\n // if column options are not given then create a new empty options\n if (!options)\n options = {};\n options.primary = true;\n if (!options.name)\n options.name = \"_id\";\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"objectId\",\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ObjectIdColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity insertion.\n */\nexport function AfterInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_INSERT\n });\n };\n}\n\n//# sourceMappingURL=AfterInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after entity is loaded.\n */\nexport function AfterLoad() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_LOAD\n });\n };\n}\n\n//# sourceMappingURL=AfterLoad.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity removal.\n */\nexport function AfterRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=AfterRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity update.\n */\nexport function AfterUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=AfterUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity insertion.\n */\nexport function BeforeInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_INSERT\n });\n };\n}\n\n//# sourceMappingURL=BeforeInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity removal.\n */\nexport function BeforeRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=BeforeRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity update.\n */\nexport function BeforeUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=BeforeUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event\n * occurs. Those classes must implement EventSubscriberInterface interface.\n */\nexport function EventSubscriber() {\n return function (target) {\n getMetadataArgsStorage().entitySubscribers.push({\n target: target\n });\n };\n}\n\n//# sourceMappingURL=EventSubscriber.js.map\n","export {};\n\n//# sourceMappingURL=ColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=IndexOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinTableOptions.js.map\n","export {};\n\n//# sourceMappingURL=RelationOptions.js.map\n","export {};\n\n//# sourceMappingURL=EntityOptions.js.map\n","export {};\n\n//# sourceMappingURL=ValueTransformer.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(optionsOrOptionsArray) {\n return function (object, propertyName) {\n var options = Array.isArray(optionsOrOptionsArray) ? optionsOrOptionsArray : [optionsOrOptionsArray || {}];\n options.forEach(function (options) {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName\n });\n });\n };\n}\n\n//# sourceMappingURL=JoinColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(options) {\n return function (object, propertyName) {\n options = options || {};\n getMetadataArgsStorage().joinTables.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n joinColumns: (options && options.joinColumn ? [options.joinColumn] : options.joinColumns),\n inverseJoinColumns: (options && options.inverseJoinColumn ? [options.inverseJoinColumn] : options.inverseJoinColumns),\n schema: options && options.schema ? options.schema : undefined,\n database: options && options.database ? options.database : undefined,\n });\n };\n}\n\n//# sourceMappingURL=JoinTable.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options.lazy === true;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-many\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // Normalize parameters.\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-one\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,\n * but Entity2 has only one Entity1. Entity2 is the owner of the relationship, and stores the id of Entity1 on its\n * side of the relation.\n */\nexport function OneToMany(typeFunctionOrTarget, inverseSide, options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSide,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-one\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Holds a number of children in the closure table of the column.\n *\n * @deprecated Do not use this decorator, it may be removed in the future versions\n */\nexport function RelationCount(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationCounts.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationCount.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special decorator used to extract relation id into separate entity property.\n *\n * @experimental\n */\nexport function RelationId(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationIds.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationId.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity (table or document depend on database type).\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function Entity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n type: \"regular\",\n orderBy: options.orderBy ? options.orderBy : undefined,\n engine: options.engine ? options.engine : undefined,\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize,\n withoutRowid: options.withoutRowid\n });\n };\n}\n\n//# sourceMappingURL=Entity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of the table used in the single-table inherited tables.\n */\nexport function ChildEntity(discriminatorValue) {\n return function (target) {\n // register a table metadata\n getMetadataArgsStorage().tables.push({\n target: target,\n type: \"entity-child\",\n });\n // register discriminator value if it was provided\n if (typeof discriminatorValue !== 'undefined') {\n getMetadataArgsStorage().discriminatorValues.push({\n target: target,\n value: discriminatorValue\n });\n }\n };\n}\n\n//# sourceMappingURL=ChildEntity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Sets for entity to use table inheritance pattern.\n */\nexport function TableInheritance(options) {\n return function (target) {\n getMetadataArgsStorage().inheritances.push({\n target: target,\n pattern: options && options.pattern ? options.pattern : \"STI\",\n column: options && options.column ? typeof options.column === \"string\" ? { name: options.column } : options.column : undefined\n });\n };\n}\n\n//# sourceMappingURL=TableInheritance.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity view.\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function ViewEntity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n expression: options.expression,\n type: \"view\",\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize === false ? false : true,\n materialized: !!options.materialized\n });\n };\n}\n\n//# sourceMappingURL=ViewEntity.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { getConnection, getMetadataArgsStorage, MongoRepository, Repository, TreeRepository } from \"../../\";\nexport function Transaction(connectionOrOptions) {\n return function (target, methodName, descriptor) {\n // save original method - we gonna need it\n var originalMethod = descriptor.value;\n // override method descriptor with proxy method\n descriptor.value = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var connectionName = \"default\";\n var isolationLevel = undefined;\n if (connectionOrOptions) {\n if (typeof connectionOrOptions === \"string\") {\n connectionName = connectionOrOptions;\n }\n else {\n if (connectionOrOptions.connectionName) {\n connectionName = connectionOrOptions.connectionName;\n }\n if (connectionOrOptions.isolation) {\n isolationLevel = connectionOrOptions.isolation;\n }\n }\n }\n var transactionCallback = function (entityManager) {\n var argsWithInjectedTransactionManagerAndRepositories;\n // filter all @TransactionManager() and @TransactionRepository() decorator usages for this method\n var transactionEntityManagerMetadatas = getMetadataArgsStorage()\n .filterTransactionEntityManagers(target.constructor, methodName)\n .reverse();\n var transactionRepositoryMetadatas = getMetadataArgsStorage()\n .filterTransactionRepository(target.constructor, methodName)\n .reverse();\n // if there are @TransactionManager() decorator usages the inject them\n if (transactionEntityManagerMetadatas.length > 0) {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n // replace method params with injection of transactionEntityManager\n transactionEntityManagerMetadatas.forEach(function (metadata) {\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, entityManager);\n });\n }\n else if (transactionRepositoryMetadatas.length === 0) { // otherwise if there's no transaction repositories in use, inject it as a first parameter\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([entityManager], __read(args));\n }\n else {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n }\n // for every usage of @TransactionRepository decorator\n transactionRepositoryMetadatas.forEach(function (metadata) {\n var repositoryInstance;\n // detect type of the repository and get instance from transaction entity manager\n switch (metadata.repositoryType) {\n case Repository:\n repositoryInstance = entityManager.getRepository(metadata.entityType);\n break;\n case MongoRepository:\n repositoryInstance = entityManager.getMongoRepository(metadata.entityType);\n break;\n case TreeRepository:\n repositoryInstance = entityManager.getTreeRepository(metadata.entityType);\n break;\n // if not the TypeORM's ones, there must be custom repository classes\n default:\n repositoryInstance = entityManager.getCustomRepository(metadata.repositoryType);\n }\n // replace method param with injection of repository instance\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, repositoryInstance);\n });\n return originalMethod.apply(_this, argsWithInjectedTransactionManagerAndRepositories);\n };\n if (isolationLevel) {\n return getConnection(connectionName).manager.transaction(isolationLevel, transactionCallback);\n }\n else {\n return getConnection(connectionName).manager.transaction(transactionCallback);\n }\n };\n };\n}\n\n//# sourceMappingURL=Transaction.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Injects transaction's entity manager into the method wrapped with @Transaction decorator.\n */\nexport function TransactionManager() {\n return function (object, methodName, index) {\n getMetadataArgsStorage().transactionEntityManagers.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n });\n };\n}\n\n//# sourceMappingURL=TransactionManager.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { CannotReflectMethodParameterTypeError } from \"../../error/CannotReflectMethodParameterTypeError\";\n/**\n * Injects transaction's repository into the method wrapped with @Transaction decorator.\n */\nexport function TransactionRepository(entityType) {\n return function (object, methodName, index) {\n // get repository type\n var repositoryType;\n try {\n repositoryType = Reflect.getOwnMetadata(\"design:paramtypes\", object, methodName)[index];\n }\n catch (err) {\n throw new CannotReflectMethodParameterTypeError(object.constructor, methodName);\n }\n getMetadataArgsStorage().transactionRepositories.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n repositoryType: repositoryType,\n entityType: entityType,\n });\n };\n}\n\n//# sourceMappingURL=TransactionRepository.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Creates a \"level\"/\"length\" column to the table that holds a closure table.\n */\nexport function TreeLevelColumn() {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"treeLevel\",\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeLevelColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a parent of the tree.\n * \"Tree parent\" indicates who owns (is a parent) of this entity in tree structure.\n */\nexport function TreeParent() {\n return function (object, propertyName) {\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n getMetadataArgsStorage().relations.push({\n isTreeParent: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"many-to-one\",\n type: function () { return object.constructor; },\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeParent.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a children of the tree.\n * \"Tree children\" will contain all children (bind) of this entity.\n */\nexport function TreeChildren(options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n // add one-to-many relation for this\n getMetadataArgsStorage().relations.push({\n isTreeChildren: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: function () { return object.constructor; },\n options: options\n });\n };\n}\n\n//# sourceMappingURL=TreeChildren.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks entity to work like a tree.\n * Tree pattern that will be used for the tree entity should be specified.\n * @TreeParent decorator must be used in tree entities.\n * TreeRepository can be used to manipulate with tree entities.\n */\nexport function Tree(type, options) {\n return function (target) {\n getMetadataArgsStorage().trees.push({\n target: target,\n type: type,\n options: type === \"closure-table\" ? options : undefined\n });\n };\n}\n\n//# sourceMappingURL=Tree.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database index.\n * Can be used on entity property or on entity.\n * Can create indices with composite columns when used on entity.\n */\nexport function Index(nameOrFieldsOrOptions, maybeFieldsOrOptions, maybeOptions) {\n // normalize parameters\n var name = typeof nameOrFieldsOrOptions === \"string\" ? nameOrFieldsOrOptions : undefined;\n var fields = typeof nameOrFieldsOrOptions === \"string\" ? maybeFieldsOrOptions : nameOrFieldsOrOptions;\n var options = (typeof nameOrFieldsOrOptions === \"object\" && !Array.isArray(nameOrFieldsOrOptions)) ? nameOrFieldsOrOptions : maybeOptions;\n if (!options)\n options = (typeof maybeFieldsOrOptions === \"object\" && !Array.isArray(maybeFieldsOrOptions)) ? maybeFieldsOrOptions : maybeOptions;\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().indices.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: propertyName ? [propertyName] : fields,\n synchronize: options && options.synchronize === false ? false : true,\n where: options ? options.where : undefined,\n unique: options && options.unique ? true : false,\n spatial: options && options.spatial ? true : false,\n fulltext: options && options.fulltext ? true : false,\n parser: options ? options.parser : undefined,\n sparse: options && options.sparse ? true : false,\n background: options && options.background ? true : false,\n expireAfterSeconds: options ? options.expireAfterSeconds : undefined\n });\n };\n}\n\n//# sourceMappingURL=Index.js.map\n","import { getMetadataArgsStorage } from \"../index\";\n/**\n * Composite unique constraint must be set on entity classes and must specify entity's fields to be unique.\n */\nexport function Unique(nameOrFields, maybeFields) {\n var name = typeof nameOrFields === \"string\" ? nameOrFields : undefined;\n var fields = typeof nameOrFields === \"string\" ? maybeFields : nameOrFields;\n return function (clsOrObject, propertyName) {\n var columns = fields;\n if (propertyName !== undefined) {\n switch (typeof (propertyName)) {\n case \"string\":\n columns = [propertyName];\n break;\n case \"symbol\":\n columns = [propertyName.toString()];\n break;\n }\n }\n var args = {\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: columns,\n };\n getMetadataArgsStorage().uniques.push(args);\n };\n}\n\n//# sourceMappingURL=Unique.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database check.\n * Can be used on entity property or on entity.\n * Can create checks with composite columns when used on entity.\n */\nexport function Check(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Check expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().checks.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Check.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database exclusion.\n * Can be used on entity.\n * Can create exclusions with composite columns when used on entity.\n */\nexport function Exclusion(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Exclusion expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().exclusions.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Exclusion.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Marks a column to generate a value on entity insertion.\n * There are three types of generation strategy - increment, uuid and rowid (cockroachdb only).\n * Increment uses a number which increases by one on each insertion.\n * Uuid generates a special UUID token.\n * Rowid supports only in CockroachDB and uses `unique_rowid()` function\n *\n * Note, some databases do not support non-primary generation columns.\n */\nexport function Generated(strategy) {\n if (strategy === void 0) { strategy = \"increment\"; }\n return function (object, propertyName) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=Generated.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Used to declare a class as a custom repository.\n * Custom repository can manage some specific entity or just be generic.\n * Custom repository optionally can extend AbstractRepository, Repository or TreeRepository.\n */\nexport function EntityRepository(entity) {\n return function (target) {\n getMetadataArgsStorage().entityRepositories.push({\n target: target,\n entity: entity,\n });\n };\n}\n\n//# sourceMappingURL=EntityRepository.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Any([...]) }\n */\nexport function Any(value) {\n return new FindOperator(\"any\", value);\n}\n\n//# sourceMappingURL=Any.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Between(x, y) }\n */\nexport function Between(from, to) {\n return new FindOperator(\"between\", [from, to], true, true);\n}\n\n//# sourceMappingURL=Between.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Equal(\"value\") }\n */\nexport function Equal(value) {\n return new FindOperator(\"equal\", value);\n}\n\n//# sourceMappingURL=Equal.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: IsNull() }\n */\nexport function IsNull() {\n return new FindOperator(\"isNull\", undefined, false);\n}\n\n//# sourceMappingURL=IsNull.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThan(10) }\n */\nexport function LessThan(value) {\n return new FindOperator(\"lessThan\", value);\n}\n\n//# sourceMappingURL=LessThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThanOrEqual(10) }\n */\nexport function LessThanOrEqual(value) {\n return new FindOperator(\"lessThanOrEqual\", value);\n}\n\n//# sourceMappingURL=LessThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: ILike(\"%SOME string%\") }\n */\nexport function ILike(value) {\n return new FindOperator(\"ilike\", value);\n}\n\n//# sourceMappingURL=ILike.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Like(\"%some sting%\") }\n */\nexport function Like(value) {\n return new FindOperator(\"like\", value);\n}\n\n//# sourceMappingURL=Like.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThan(10) }\n */\nexport function MoreThan(value) {\n return new FindOperator(\"moreThan\", value);\n}\n\n//# sourceMappingURL=MoreThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThanOrEqual(10) }\n */\nexport function MoreThanOrEqual(value) {\n return new FindOperator(\"moreThanOrEqual\", value);\n}\n\n//# sourceMappingURL=MoreThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Used to negotiate expression.\n * Example: { title: not(\"hello\") } will return entities where title not equal to \"hello\".\n */\nexport function Not(value) {\n return new FindOperator(\"not\", value);\n}\n\n//# sourceMappingURL=Not.js.map\n","import { FindOperator } from \"../FindOperator\";\nexport function Raw(valueOrSqlGenerator, sqlGeneratorParameters) {\n if (typeof valueOrSqlGenerator !== 'function') {\n return new FindOperator(\"raw\", valueOrSqlGenerator, false);\n }\n return new FindOperator(\"raw\", [], true, true, valueOrSqlGenerator, sqlGeneratorParameters);\n}\n\n//# sourceMappingURL=Raw.js.map\n","export {};\n\n//# sourceMappingURL=FindConditions.js.map\n","export {};\n\n//# sourceMappingURL=FindManyOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOneOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOperatorType.js.map\n","export {};\n\n//# sourceMappingURL=JoinOptions.js.map\n","export {};\n\n//# sourceMappingURL=OrderByCondition.js.map\n","export {};\n\n//# sourceMappingURL=Logger.js.map\n","export {};\n\n//# sourceMappingURL=LoggerOptions.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getConnection } from \"../index\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nvar BaseEntity = /** @class */ (function () {\n function BaseEntity() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.prototype.hasId = function () {\n return this.constructor.getRepository().hasId(this);\n };\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n BaseEntity.prototype.save = function (options) {\n return this.constructor.getRepository().save(this, options);\n };\n /**\n * Removes current entity from the database.\n */\n BaseEntity.prototype.remove = function (options) {\n return this.constructor.getRepository().remove(this, options);\n };\n /**\n * Records the delete date of current entity.\n */\n BaseEntity.prototype.softRemove = function (options) {\n return this.constructor.getRepository().softRemove(this, options);\n };\n /**\n * Recovers a given entity in the database.\n */\n BaseEntity.prototype.recover = function (options) {\n return this.constructor.getRepository().recover(this, options);\n };\n /**\n * Reloads entity data from the database.\n */\n BaseEntity.prototype.reload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var base, newestEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n base = this.constructor;\n return [4 /*yield*/, base.getRepository().findOneOrFail(base.getId(this))];\n case 1:\n newestEntity = _a.sent();\n ObjectUtils.assign(this, newestEntity);\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Sets connection to be used by entity.\n */\n BaseEntity.useConnection = function (connection) {\n this.usedConnection = connection;\n };\n /**\n * Gets current entity's Repository.\n */\n BaseEntity.getRepository = function () {\n var connection = this.usedConnection || getConnection();\n return connection.getRepository(this);\n };\n Object.defineProperty(BaseEntity, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.getRepository().target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.hasId = function (entity) {\n return this.getRepository().hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n BaseEntity.getId = function (entity) {\n return this.getRepository().getId(entity);\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n BaseEntity.createQueryBuilder = function (alias) {\n return this.getRepository().createQueryBuilder(alias);\n };\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n BaseEntity.create = function (entityOrEntities) {\n return this.getRepository().create(entityOrEntities);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n BaseEntity.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.getRepository()).merge.apply(_a, __spreadArray([mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n BaseEntity.preload = function (entityLike) {\n return this.getRepository().preload(entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n BaseEntity.save = function (entityOrEntities, options) {\n return this.getRepository().save(entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n BaseEntity.remove = function (entityOrEntities, options) {\n return this.getRepository().remove(entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n BaseEntity.softRemove = function (entityOrEntities, options) {\n return this.getRepository().softRemove(entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n BaseEntity.insert = function (entity, options) {\n return this.getRepository().insert(entity, options);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.update = function (criteria, partialEntity, options) {\n return this.getRepository().update(criteria, partialEntity, options);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.delete = function (criteria, options) {\n return this.getRepository().delete(criteria, options);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n BaseEntity.count = function (optionsOrConditions) {\n return this.getRepository().count(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n BaseEntity.find = function (optionsOrConditions) {\n return this.getRepository().find(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n BaseEntity.findAndCount = function (optionsOrConditions) {\n return this.getRepository().findAndCount(optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n BaseEntity.findByIds = function (ids, optionsOrConditions) {\n return this.getRepository().findByIds(ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOne = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOne(optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOneOrFail(optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n BaseEntity.query = function (query, parameters) {\n return this.getRepository().query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n BaseEntity.clear = function () {\n return this.getRepository().clear();\n };\n return BaseEntity;\n}());\nexport { BaseEntity };\n\n//# sourceMappingURL=BaseEntity.js.map\n","export {};\n\n//# sourceMappingURL=RemoveOptions.js.map\n","export {};\n\n//# sourceMappingURL=SaveOptions.js.map\n","import { EventEmitter, Readable, Writable } from \"../../platform/PlatformTools\";\n\n//# sourceMappingURL=typings.js.map\n","export {};\n\n//# sourceMappingURL=DatabaseType.js.map\n","export {};\n\n//# sourceMappingURL=ReplicationMode.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/*!\n */\nimport \"reflect-metadata\";\nimport { ConnectionManager } from \"./connection/ConnectionManager\";\nimport { MetadataArgsStorage } from \"./metadata-args/MetadataArgsStorage\";\nimport { getFromContainer } from \"./container\";\nimport { PlatformTools } from \"./platform/PlatformTools\";\nimport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\n// -------------------------------------------------------------------------\n// Commonly Used exports\n// -------------------------------------------------------------------------\nexport * from \"./container\";\nexport * from \"./common/EntityTarget\";\nexport * from \"./common/ObjectType\";\nexport * from \"./common/ObjectLiteral\";\nexport * from \"./common/DeepPartial\";\nexport * from \"./error\";\nexport * from \"./decorator/columns/Column\";\nexport * from \"./decorator/columns/CreateDateColumn\";\nexport * from \"./decorator/columns/DeleteDateColumn\";\nexport * from \"./decorator/columns/PrimaryGeneratedColumn\";\nexport * from \"./decorator/columns/PrimaryColumn\";\nexport * from \"./decorator/columns/UpdateDateColumn\";\nexport * from \"./decorator/columns/VersionColumn\";\nexport * from \"./decorator/columns/ViewColumn\";\nexport * from \"./decorator/columns/ObjectIdColumn\";\nexport * from \"./decorator/listeners/AfterInsert\";\nexport * from \"./decorator/listeners/AfterLoad\";\nexport * from \"./decorator/listeners/AfterRemove\";\nexport * from \"./decorator/listeners/AfterUpdate\";\nexport * from \"./decorator/listeners/BeforeInsert\";\nexport * from \"./decorator/listeners/BeforeRemove\";\nexport * from \"./decorator/listeners/BeforeUpdate\";\nexport * from \"./decorator/listeners/EventSubscriber\";\nexport * from \"./decorator/options/ColumnOptions\";\nexport * from \"./decorator/options/IndexOptions\";\nexport * from \"./decorator/options/JoinColumnOptions\";\nexport * from \"./decorator/options/JoinTableOptions\";\nexport * from \"./decorator/options/RelationOptions\";\nexport * from \"./decorator/options/EntityOptions\";\nexport * from \"./decorator/options/ValueTransformer\";\nexport * from \"./decorator/relations/JoinColumn\";\nexport * from \"./decorator/relations/JoinTable\";\nexport * from \"./decorator/relations/ManyToMany\";\nexport * from \"./decorator/relations/ManyToOne\";\nexport * from \"./decorator/relations/OneToMany\";\nexport * from \"./decorator/relations/OneToOne\";\nexport * from \"./decorator/relations/RelationCount\";\nexport * from \"./decorator/relations/RelationId\";\nexport * from \"./decorator/entity/Entity\";\nexport * from \"./decorator/entity/ChildEntity\";\nexport * from \"./decorator/entity/TableInheritance\";\nexport * from \"./decorator/entity-view/ViewEntity\";\nexport * from \"./decorator/transaction/Transaction\";\nexport * from \"./decorator/transaction/TransactionManager\";\nexport * from \"./decorator/transaction/TransactionRepository\";\nexport * from \"./decorator/tree/TreeLevelColumn\";\nexport * from \"./decorator/tree/TreeParent\";\nexport * from \"./decorator/tree/TreeChildren\";\nexport * from \"./decorator/tree/Tree\";\nexport * from \"./decorator/Index\";\nexport * from \"./decorator/Unique\";\nexport * from \"./decorator/Check\";\nexport * from \"./decorator/Exclusion\";\nexport * from \"./decorator/Generated\";\nexport * from \"./decorator/EntityRepository\";\nexport * from \"./find-options/operator/Any\";\nexport * from \"./find-options/operator/Between\";\nexport * from \"./find-options/operator/Equal\";\nexport * from \"./find-options/operator/In\";\nexport * from \"./find-options/operator/IsNull\";\nexport * from \"./find-options/operator/LessThan\";\nexport * from \"./find-options/operator/LessThanOrEqual\";\nexport * from \"./find-options/operator/ILike\";\nexport * from \"./find-options/operator/Like\";\nexport * from \"./find-options/operator/MoreThan\";\nexport * from \"./find-options/operator/MoreThanOrEqual\";\nexport * from \"./find-options/operator/Not\";\nexport * from \"./find-options/operator/Raw\";\nexport * from \"./find-options/FindConditions\";\nexport * from \"./find-options/FindManyOptions\";\nexport * from \"./find-options/FindOneOptions\";\nexport * from \"./find-options/FindOperator\";\nexport * from \"./find-options/FindOperatorType\";\nexport * from \"./find-options/JoinOptions\";\nexport * from \"./find-options/OrderByCondition\";\nexport * from \"./find-options/FindOptionsUtils\";\nexport * from \"./logger/Logger\";\nexport * from \"./logger/LoggerOptions\";\nexport * from \"./logger/AdvancedConsoleLogger\";\nexport * from \"./logger/SimpleConsoleLogger\";\nexport * from \"./logger/FileLogger\";\nexport * from \"./metadata/EntityMetadata\";\nexport * from \"./entity-manager/EntityManager\";\nexport * from \"./repository/AbstractRepository\";\nexport * from \"./repository/Repository\";\nexport * from \"./repository/BaseEntity\";\nexport * from \"./repository/TreeRepository\";\nexport * from \"./repository/MongoRepository\";\nexport * from \"./repository/RemoveOptions\";\nexport * from \"./repository/SaveOptions\";\nexport * from \"./schema-builder/table/TableCheck\";\nexport * from \"./schema-builder/table/TableColumn\";\nexport * from \"./schema-builder/table/TableExclusion\";\nexport * from \"./schema-builder/table/TableForeignKey\";\nexport * from \"./schema-builder/table/TableIndex\";\nexport * from \"./schema-builder/table/TableUnique\";\nexport * from \"./schema-builder/table/Table\";\nexport * from \"./driver/mongodb/typings\";\nexport * from \"./driver/types/DatabaseType\";\nexport * from \"./driver/types/ReplicationMode\";\nexport * from \"./driver/sqlserver/MssqlParameter\";\nexport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\nexport { Connection } from \"./connection/Connection\";\nexport { ConnectionManager } from \"./connection/ConnectionManager\";\nexport { QueryBuilder } from \"./query-builder/QueryBuilder\";\nexport { SelectQueryBuilder } from \"./query-builder/SelectQueryBuilder\";\nexport { DeleteQueryBuilder } from \"./query-builder/DeleteQueryBuilder\";\nexport { InsertQueryBuilder } from \"./query-builder/InsertQueryBuilder\";\nexport { UpdateQueryBuilder } from \"./query-builder/UpdateQueryBuilder\";\nexport { RelationQueryBuilder } from \"./query-builder/RelationQueryBuilder\";\nexport { Brackets } from \"./query-builder/Brackets\";\nexport { InsertResult } from \"./query-builder/result/InsertResult\";\nexport { UpdateResult } from \"./query-builder/result/UpdateResult\";\nexport { DeleteResult } from \"./query-builder/result/DeleteResult\";\nexport { MongoEntityManager } from \"./entity-manager/MongoEntityManager\";\nexport { Migration } from \"./migration/Migration\";\nexport { MigrationExecutor } from \"./migration/MigrationExecutor\";\nexport { DefaultNamingStrategy } from \"./naming-strategy/DefaultNamingStrategy\";\nexport { EntitySchema } from \"./entity-schema/EntitySchema\";\n// -------------------------------------------------------------------------\n// Deprecated\n// -------------------------------------------------------------------------\n// -------------------------------------------------------------------------\n// Commonly used functionality\n// -------------------------------------------------------------------------\n/**\n * Gets metadata args storage.\n */\nexport function getMetadataArgsStorage() {\n // we should store metadata storage in a global variable otherwise it brings too much problems\n // one of the problem is that if any entity (or any other) will be imported before consumer will call\n // useContainer method with his own container implementation, that entity will be registered in the\n // old old container (default one post probably) and consumer will his entity.\n // calling useContainer before he imports any entity (or any other) is not always convenient.\n // another reason is that when we run migrations typeorm is being called from a global package\n // and it may load entities which register decorators in typeorm of local package\n // this leads to impossibility of usage of entities in migrations and cli related operations\n var globalScope = PlatformTools.getGlobalVariable();\n if (!globalScope.typeormMetadataArgsStorage)\n globalScope.typeormMetadataArgsStorage = new MetadataArgsStorage();\n return globalScope.typeormMetadataArgsStorage;\n}\n/**\n * Reads connection options stored in ormconfig configuration file.\n */\nexport function getConnectionOptions(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new ConnectionOptionsReader().get(connectionName)];\n });\n });\n}\n/**\n * Gets a ConnectionManager which creates connections.\n */\nexport function getConnectionManager() {\n return getFromContainer(ConnectionManager);\n}\n/**\n * Creates a new connection and registers it in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * Only one connection from ormconfig will be created (name \"default\" or connection without name).\n */\nexport function createConnection(optionsOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var connectionName, options, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n connectionName = typeof optionsOrName === \"string\" ? optionsOrName : \"default\";\n if (!(optionsOrName instanceof Object)) return [3 /*break*/, 1];\n _a = optionsOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, getConnectionOptions(connectionName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n options = _a;\n return [2 /*return*/, getConnectionManager().create(options).connect()];\n }\n });\n });\n}\n/**\n * Creates new connections and registers them in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * All connections from the ormconfig will be created.\n */\nexport function createConnections(options) {\n return __awaiter(this, void 0, void 0, function () {\n var connections;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!options) return [3 /*break*/, 2];\n return [4 /*yield*/, new ConnectionOptionsReader().all()];\n case 1:\n options = _a.sent();\n _a.label = 2;\n case 2:\n connections = options.map(function (options) { return getConnectionManager().create(options); });\n return [2 /*return*/, Promise.all(connections.map(function (connection) { return connection.connect(); }))];\n }\n });\n });\n}\n/**\n * Gets connection from the connection manager.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getConnection(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName);\n}\n/**\n * Gets entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets MongoDB entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getMongoManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets Sqljs entity manager from connection name.\n * \"default\" connection is used, when no name is specified.\n * Only works when Sqljs driver is used.\n */\nexport function getSqljsManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets repository for the given entity class.\n */\nexport function getRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getTreeRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getTreeRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getCustomRepository(customRepository, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getCustomRepository(customRepository);\n}\n/**\n * Gets mongodb repository for the given entity class or name.\n */\nexport function getMongoRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getMongoRepository(entityClass);\n}\n/**\n * Creates a new query builder.\n */\nexport function createQueryBuilder(entityClass, alias, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n if (entityClass) {\n return getRepository(entityClass, connectionName).createQueryBuilder(alias);\n }\n return getConnection(connectionName).createQueryBuilder();\n}\n\n//# sourceMappingURL=index.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Foreign key from the database stored in this class.\n */\nvar TableForeignKey = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableForeignKey(options) {\n /**\n * Column names which included by this foreign key.\n */\n this.columnNames = [];\n /**\n * Column names which included by this foreign key.\n */\n this.referencedColumnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.referencedColumnNames = options.referencedColumnNames;\n this.referencedTableName = options.referencedTableName;\n this.onDelete = options.onDelete;\n this.onUpdate = options.onUpdate;\n this.deferrable = options.deferrable;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this foreign key with exactly same properties.\n */\n TableForeignKey.prototype.clone = function () {\n return new TableForeignKey({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n referencedColumnNames: __spreadArray([], __read(this.referencedColumnNames)),\n referencedTableName: this.referencedTableName,\n onDelete: this.onDelete,\n onUpdate: this.onUpdate,\n deferrable: this.deferrable,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new table foreign key from the given foreign key metadata.\n */\n TableForeignKey.create = function (metadata) {\n return new TableForeignKey({\n name: metadata.name,\n columnNames: metadata.columnNames,\n referencedColumnNames: metadata.referencedColumnNames,\n referencedTableName: metadata.referencedTablePath,\n onDelete: metadata.onDelete,\n onUpdate: metadata.onUpdate,\n deferrable: metadata.deferrable,\n });\n };\n return TableForeignKey;\n}());\nexport { TableForeignKey };\n\n//# sourceMappingURL=TableForeignKey.js.map\n","import shajs from \"sha.js\";\n/**\n * Converts string into camelCase.\n *\n * @see http://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case\n */\nexport function camelCase(str, firstCapital) {\n if (firstCapital === void 0) { firstCapital = false; }\n return str.replace(/^([A-Z])|[\\s-_](\\w)/g, function (match, p1, p2, offset) {\n if (firstCapital === true && offset === 0)\n return p1;\n if (p2)\n return p2.toUpperCase();\n return p1.toLowerCase();\n });\n}\n/**\n * Converts string into snake_case.\n *\n * @see https://regex101.com/r/QeSm2I/1\n */\nexport function snakeCase(str) {\n return str.replace(/(?:([a-z])([A-Z]))|(?:((?!^)[A-Z])([a-z]))/g, \"$1_$3$2$4\").toLowerCase();\n}\n/**\n * Converts string into Title Case.\n *\n * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript\n */\nexport function titleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });\n}\n/**\n * Builds abbreviated string from given string;\n */\nexport function abbreviate(str, abbrLettersCount) {\n if (abbrLettersCount === void 0) { abbrLettersCount = 1; }\n var words = str.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0\\xDF])/g, \"$1 $2\").split(\" \");\n return words.reduce(function (res, word) {\n res += word.substr(0, abbrLettersCount);\n return res;\n }, \"\");\n}\n/**\n * Shorten a given `input`. Useful for RDBMS imposing a limit on the\n * maximum length of aliases and column names in SQL queries.\n *\n * @param input String to be shortened.\n * @param options Default to `4` for segments length, `2` for terms length, `'__'` as a separator.\n *\n * @return Shortened `input`.\n *\n * @example\n * // returns: \"UsShCa__orde__mark__dire\"\n * shorten('UserShoppingCart__order__market__director')\n *\n * // returns: \"cat_wit_ver_lon_nam_pos_wit_ver_lon_nam_pos_wit_ver_lon_nam\"\n * shorten(\n * 'category_with_very_long_name_posts_with_very_long_name_post_with_very_long_name',\n * { separator: '_', segmentLength: 3 }\n * )\n *\n * // equals: UsShCa__orde__mark_market_id\n * `${shorten('UserShoppingCart__order__market')}_market_id`\n */\nexport function shorten(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.segmentLength, segmentLength = _a === void 0 ? 4 : _a, _b = options.separator, separator = _b === void 0 ? \"__\" : _b, _c = options.termLength, termLength = _c === void 0 ? 2 : _c;\n var segments = input.split(separator);\n var shortSegments = segments.reduce(function (acc, val) {\n // split the given segment into many terms based on an eventual camel cased name\n var segmentTerms = val.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0-\\xDF])/g, \"$1 $2\").split(\" \");\n // \"OrderItemList\" becomes \"OrItLi\", while \"company\" becomes \"comp\"\n var length = segmentTerms.length > 1 ? termLength : segmentLength;\n var shortSegment = segmentTerms.map(function (term) { return term.substr(0, length); }).join(\"\");\n acc.push(shortSegment);\n return acc;\n }, []);\n return shortSegments.join(separator);\n}\n/**\n * Returns a hashed input.\n *\n * @param input String to be hashed.\n * @param options.length Optionally, shorten the output to desired length.\n */\nexport function hash(input, options) {\n if (options === void 0) { options = {}; }\n var hashFunction = shajs(\"sha256\");\n hashFunction.update(input, \"utf8\");\n var hashedInput = hashFunction.digest(\"hex\");\n if (options.length) {\n return hashedInput.slice(0, options.length);\n }\n return hashedInput;\n}\n\n//# sourceMappingURL=StringUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Helper utility functions for QueryBuilder.\n */\nvar QueryBuilderUtils = /** @class */ (function () {\n function QueryBuilderUtils() {\n }\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n QueryBuilderUtils.isAliasProperty = function (str) {\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n // extra alias and its property relation\n var _a = __read(str.split(\".\"), 2), aliasName = _a[0], propertyName = _a[1]; // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n return true;\n };\n return QueryBuilderUtils;\n}());\nexport { QueryBuilderUtils };\n\n//# sourceMappingURL=QueryBuilderUtils.js.map\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewInflater = void 0;\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst DataManager_1 = require(\"./DataManager\");\n/**\n * Singleton-Klasse genutzt zum laden von Views\n */\nclass ViewInflater {\n constructor() {\n this.loadingPromises = {};\n }\n /**\n * Statische Funktion, um die Singleton-Instanz zu holen\n *\n * @returns {ViewInflater}\n */\n static getInstance() {\n if (shared_1.Helper.isNull(ViewInflater.instance)) {\n ViewInflater.instance = new ViewInflater();\n }\n return ViewInflater.instance;\n }\n /**\n * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views\n *\n * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann\n *\n * @param viewUrl\n * @param parentUrls\n * @returns {*}\n */\n load(viewUrl, parentUrls) {\n //Kopiere Elemente, damit originale parentURLS nicht verändert werden\n parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, []));\n //Detektiert eine Schleife in den Views\n if (parentUrls.indexOf(viewUrl) !== -1) {\n //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View\n return Promise.reject(\"views are in a circuit! cannot resolve view for url \" + parentUrls[0] + \"! url \" + viewUrl + \" is in stack before!\");\n }\n parentUrls.push(viewUrl);\n //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden\n if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) {\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n let t;\n let resultPromise = Promise.resolve(t);\n if (viewUrl instanceof Element) {\n resultPromise = Promise.resolve(viewUrl);\n }\n else {\n resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(htmlText => {\n let doc = (new DOMParser()).parseFromString(htmlText, \"text/html\");\n //Parsing hat nicht geklappt, also per innerHTML\n if (shared_1.Helper.isNull(doc)) {\n doc = document.implementation.createHTMLDocument('');\n doc.body.innerHTML = htmlText;\n }\n //Wrappe Elemente mit einem Span\n let spanElem = document.createElement(\"span\");\n spanElem.classList.add(\"injected-span\");\n return ViewInflater.moveChildren(doc.body, spanElem);\n });\n }\n this.loadingPromises[viewUrl] = resultPromise.then(parentElement => {\n let promises = [];\n let childViews = parentElement.querySelectorAll(\"[data-view]\");\n //lade Kinder-Views\n childViews.forEach(childView => {\n promises.push(ViewInflater.getInstance().load(childView.dataset[\"view\"], parentUrls).then(element => {\n childView.replaceWith(element);\n ViewInflater.replaceWithChildren(element);\n }));\n });\n return Promise.all(promises).then(function () {\n return parentElement;\n });\n }).catch(e => {\n console.error(e);\n this.loadingPromises[viewUrl] = null;\n throw e;\n });\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n /**\n * Statische Funktion, um Elemente aus einem String zu kreieren\n *\n * @param string\n * @returns {NodeListOf}\n */\n static inflateElementsFromString(string) {\n let template = document.createElement('template');\n template.innerHTML = string;\n return template.content.childNodes;\n }\n /**\n * Kreiert ein Ladesymbol. Evtl entfernen\n *\n * @returns {HTMLDivElement}\n */\n static createLoadingSymbol(loaderClass) {\n let svgNS = \"http://www.w3.org/2000/svg\";\n let loader = document.createElement(\"div\");\n loader.classList.add('loader');\n //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt\n if (loaderClass) {\n loader.classList.add(loaderClass);\n }\n let svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute('viewBox', \"0 0 32 32\");\n svg.setAttribute(\"width\", \"32\");\n svg.setAttribute(\"height\", \"32\");\n let circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"class\", \"spinner\");\n circle.setAttribute(\"cx\", \"16\");\n circle.setAttribute(\"cy\", \"16\");\n circle.setAttribute(\"r\", \"14\");\n circle.setAttribute(\"fill\", \"none\");\n svg.appendChild(circle);\n loader.appendChild(svg);\n // let loader = document.createElement(\"div\");\n // loader.appendChild(document.createTextNode(\"LOADING...\"));\n return loader;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n return client_1.ViewHelper.moveChildren(from, to);\n }\n /**\n * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen)\n * @param element\n */\n static replaceWithChildren(element) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n element.childNodes.forEach(child => {\n children.push(child);\n });\n let parent = element.parentElement;\n children.forEach(child => {\n element.removeChild(child);\n parent.insertBefore(child, element);\n });\n element.remove();\n }\n}\nexports.ViewInflater = ViewInflater;\nViewInflater.instance = null;\n//# sourceMappingURL=ViewInflater.js.map","/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nvar Broadcaster = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Broadcaster(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\n var executionResult = subscriber.beforeInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\n var executionResult = subscriber.beforeUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\n var executionResult = subscriber.beforeRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\n var executionResult = subscriber.afterInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionStart) {\n var executionResult = subscriber.beforeTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionStart) {\n var executionResult = subscriber.afterTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionCommit) {\n var executionResult = subscriber.beforeTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionCommit) {\n var executionResult = subscriber.afterTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionRollback) {\n var executionResult = subscriber.beforeTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionRollback) {\n var executionResult = subscriber.afterTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\n var executionResult = subscriber.afterUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\n var executionResult = subscriber.afterRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastLoadEventsForAll = function (result, metadata, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n if (entity instanceof Promise) // todo: check why need this?\n return;\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))\n return;\n var value = relation.getEntityValue(entity);\n if (value instanceof Object)\n _this.broadcastLoadEventsForAll(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\n });\n }\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (_this.queryRunner.connection.subscribers.length) {\n _this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {\n var executionResult = subscriber.afterLoad(entity, {\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n Broadcaster.prototype.isAllowedSubscriber = function (subscriber, target) {\n return !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target);\n };\n return Broadcaster;\n}());\nexport { Broadcaster };\n\n//# sourceMappingURL=Broadcaster.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matomo = void 0;\nconst js_helper_1 = require(\"js-helper\");\nconst NativeStoragePromise_1 = require(\"../NativeStoragePromise\");\nclass Matomo {\n static init() {\n Matomo.isTrackingPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let shouldTrack = yield NativeStoragePromise_1.NativeStoragePromise.getItem(Matomo.LOCAL_STORAGE_KEY, \"1\");\n if (js_helper_1.Helper.isNull(shouldTrack)) {\n shouldTrack = yield Matomo._askIsTracking();\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);\n }\n else {\n shouldTrack = (shouldTrack === \"1\");\n yield Matomo.setTrack(shouldTrack);\n }\n resolve(shouldTrack);\n }));\n Matomo.isTrackingPromise.then(() => {\n Matomo.push(['trackPageView'], true);\n Matomo.push(['enableLinkTracking'], true);\n Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php'], true);\n Matomo.push(['setSiteId', Matomo.SIDE_ID + \"\"], true);\n let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = Matomo.TRACK_SITE + '/piwik.js';\n s.appendChild(g);\n });\n }\n static update(title) {\n if (js_helper_1.Helper.nonNull(Matomo.currentUrl)) {\n Matomo.push(['setReferrerUrl', Matomo.currentUrl]);\n }\n Matomo.currentUrl = window.location.pathname + window.location.search;\n Matomo.push(['setCustomUrl', Matomo.currentUrl]);\n Matomo.push(['setDocumentTitle', title]);\n // remove all previously assigned custom variables, requires Matomo (formerly Piwik) 3.0.2\n Matomo.push(['deleteCustomVariables', 'page']);\n Matomo.push(['setGenerationTimeMs', 0]);\n Matomo.push(['trackPageView']);\n // make Matomo aware of newly added content\n var content = document.getElementById('site-content');\n Matomo.push(['MediaAnalytics::scanForMedia', content]);\n Matomo.push(['FormAnalytics::scanForForms', content]);\n Matomo.push(['trackContentImpressionsWithinNode', content]);\n Matomo.push(['enableLinkTracking']);\n }\n static _askIsTracking() {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = new Promise(resolve => {\n Matomo.push([function () {\n resolve(!this[\"isUserOptedOut\"]());\n }]);\n });\n return Matomo.isTrackingPromise;\n });\n }\n static query(method) {\n return __awaiter(this, void 0, void 0, function* () {\n return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {\n \"mode\": \"cors\",\n \"credentials\": \"include\",\n }).then(res => res.text()).then(text => (new window[\"DOMParser\"]()).parseFromString(text, \"text/xml\"));\n });\n }\n static getTrackingPromise() {\n return Matomo.isTrackingPromise;\n }\n static setTrack(shouldTrack) {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = Promise.resolve(shouldTrack);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? \"1\" : \"0\");\n if (shouldTrack) {\n yield Matomo.push([\"forgetUserOptOut\"], true);\n }\n else {\n yield Matomo.push([\"optUserOut\"], true);\n }\n });\n }\n static trackEvent(event, name, label, value) {\n return __awaiter(this, void 0, void 0, function* () {\n let ev = [\"trackEvent\", event, name];\n if (js_helper_1.Helper.isNotNull(label)) {\n ev.push(label);\n }\n if (js_helper_1.Helper.isNotNull(value) && !isNaN(parseFloat(value)) && isFinite(value)) {\n ev.push(value);\n }\n return this.push(ev);\n });\n }\n //TODO Matomo\n static push(arr, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // if (!Array.isArray(arr)) {\n // arr = [arr];\n // }\n // window[\"_paq\"].push(arr);\n });\n }\n}\nexports.Matomo = Matomo;\nMatomo.LOCAL_STORAGE_KEY = \"matomoShouldTrack\";\nMatomo.TRACK_SITE = \"\";\nMatomo.BASE_PATH = \"\";\nMatomo.SIDE_ID = \"1\";\nMatomo.currentUrl = null;\nMatomo.isTrackingPromise = null;\n//# sourceMappingURL=Matomo.js.map","/**\n * View in the database represented in this class.\n */\nvar View = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function View(options) {\n if (options) {\n this.name = options.name;\n this.expression = options.expression;\n this.materialized = !!options.materialized;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n View.prototype.clone = function () {\n return new View({\n name: this.name,\n expression: this.expression,\n materialized: this.materialized,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates view from a given entity metadata.\n */\n View.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n expression: entityMetadata.expression,\n materialized: entityMetadata.tableMetadataArgs.materialized\n };\n return new View(options);\n };\n return View;\n}());\nexport { View };\n\n//# sourceMappingURL=View.js.map\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst NotOnlineError_1 = require(\"./DataManager/NotOnlineError\");\n/**\n * Ein Manager, welches das Laden von Resourcen übernimmt.\n */\nclass DataManager {\n /**\n * Diese Funktion sollte anstelle von dem nativen \"fetch\" verwendet werden!\n * Das native Fetch kann keine file://, welches von Cordova unter Android (und whs iOS) verwendet wird\n * Daher wird heir auf XMLHttpRequest zurückgegriffen\n *\n * @param url\n * @param useArrayBuffer\n * @returns {Promise<*>}\n */\n static fetch(url, useArrayBuffer) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n useArrayBuffer = Helper_1.Helper.nonNull(useArrayBuffer, false);\n if (useArrayBuffer) {\n xhr.responseType = \"arraybuffer\";\n }\n xhr.onload = function () {\n resolve(new Response(useArrayBuffer ? xhr.response : xhr.responseText, { status: (xhr.status === 0) ? 200 : xhr.status }));\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n static fetchBlob(url) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n xhr.onload = function (e) {\n resolve(xhr.response);\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n xhr.responseType = \"blob\";\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET die angegebene URL und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @param useBasePath\n * @returns {Promise<* | void>}\n */\n static load(url, format, useBasePath) {\n return __awaiter(this, void 0, void 0, function* () {\n format = Helper_1.Helper.nonNull(format, true);\n if (format === true) {\n format = \"json\";\n }\n else if (format === false) {\n format = \"text\";\n }\n else if (format !== \"json\" && format !== \"text\") {\n format = \"raw\";\n }\n useBasePath = Helper_1.Helper.nonNull(useBasePath, true);\n if (useBasePath === true) {\n useBasePath = DataManager._basePath;\n }\n else if (typeof useBasePath !== \"string\") {\n useBasePath = \"\";\n }\n url = DataManager.basePath(url, useBasePath);\n return DataManager.fetch(url, format === \"raw\").catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw new NotOnlineError_1.NotOnlineError(e, url);\n }).then(function (res) {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n if (format === \"json\") {\n return res.json();\n }\n else if (format === \"text\") {\n return res.text();\n }\n else {\n return res;\n }\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET das angegebene Asset und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @returns {Promise<* | void>}\n */\n static loadAsset(url, format) {\n return __awaiter(this, void 0, void 0, function* () {\n let assetPath = DataManager._assetBasePath;\n if (!url.startsWith(\"/\") && assetPath.length > 0 && !assetPath.endsWith(\"/\")) {\n assetPath += \"/\";\n }\n return this.load(url, Helper_1.Helper.nonNull(format, \"text\"), assetPath);\n });\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQuery(values) {\n let queryStrings = [];\n for (let k in values) {\n queryStrings.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(values[k]));\n }\n return \"?\" + queryStrings.join(\"&\");\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQueryWithoutNullValues(values) {\n let queryValues = {};\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(values[k])) {\n queryValues[k] = values[k];\n }\n }\n return this.buildQuery(queryValues);\n }\n static send(url, params) {\n return __awaiter(this, void 0, void 0, function* () {\n url = DataManager.basePath(url);\n let headers = {};\n if (!(params instanceof FormData) && typeof params === \"object\") {\n params = JSON.stringify(params);\n headers = {\n \"Content-Type\": \"application/json\"\n };\n }\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n headers[header] = DataManager._additionalHeaders[header];\n });\n return fetch(url, {\n \"credentials\": \"same-origin\",\n \"method\": \"POST\",\n \"headers\": headers,\n \"body\": params,\n }).then(function (res) {\n return res.json();\n }).catch(function (e) {\n debugger;\n console.error(\"error\", e);\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n return {\n \"success\": false,\n \"errors\": [\n \"not-online\"\n ]\n };\n });\n });\n }\n static basePath(url, basePath) {\n basePath = Helper_1.Helper.nonNull(basePath, DataManager._basePath);\n return basePath + ((url) ? url : \"\");\n }\n static setHeader(header, value) {\n DataManager._additionalHeaders[header] = value;\n }\n}\nexports.DataManager = DataManager;\nDataManager.onlineCallback = null;\nDataManager._additionalHeaders = {};\nDataManager._basePath = \"\";\nDataManager._assetBasePath = \"\";\n//# sourceMappingURL=DataManager.js.map","/**\n * Database's table exclusion constraint stored in this class.\n */\nvar TableExclusion = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableExclusion(options) {\n this.name = options.name;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableExclusion.prototype.clone = function () {\n return new TableExclusion({\n name: this.name,\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates exclusions from the exclusion metadata object.\n */\n TableExclusion.create = function (exclusionMetadata) {\n return new TableExclusion({\n name: exclusionMetadata.name,\n expression: exclusionMetadata.expression\n });\n };\n return TableExclusion;\n}());\nexport { TableExclusion };\n\n//# sourceMappingURL=TableExclusion.js.map\n","var ApplyValueTransformers = /** @class */ (function () {\n function ApplyValueTransformers() {\n }\n ApplyValueTransformers.transformFrom = function (transformer, databaseValue) {\n if (Array.isArray(transformer)) {\n var reverseTransformers = transformer.slice().reverse();\n return reverseTransformers.reduce(function (transformedValue, _transformer) {\n return _transformer.from(transformedValue);\n }, databaseValue);\n }\n return transformer.from(databaseValue);\n };\n ApplyValueTransformers.transformTo = function (transformer, entityValue) {\n if (Array.isArray(transformer)) {\n return transformer.reduce(function (transformedValue, _transformer) {\n return _transformer.to(transformedValue);\n }, entityValue);\n }\n return transformer.to(entityValue);\n };\n return ApplyValueTransformers;\n}());\nexport { ApplyValueTransformers };\n\n//# sourceMappingURL=ApplyValueTransformers.js.map\n","var RandomGenerator = /** @class */ (function () {\n function RandomGenerator() {\n }\n /**\n * discuss at: http://locutus.io/php/sha1/\n * original by: Webtoolkit.info (http://www.webtoolkit.info/)\n * improved by: Michael White (http://getsprink.com)\n * improved by: Kevin van Zonneveld (http://kvz.io)\n * input by: Brett Zamir (http://brett-zamir.me)\n * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then\n * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly\n * note 1: in a steaming fashion for faster and more efficient hashing\n * example 1: sha1('Kevin van Zonneveld')\n * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'\n */\n RandomGenerator.sha1 = function (str) {\n var _rotLeft = function (n, s) {\n var t4 = (n << s) | (n >>> (32 - s));\n return t4;\n };\n var _cvtHex = function (val) {\n var str = \"\";\n var i;\n var v;\n for (i = 7; i >= 0; i--) {\n v = (val >>> (i * 4)) & 0x0f;\n str += v.toString(16);\n }\n return str;\n };\n var blockstart;\n var i, j;\n var W = new Array(80);\n var H0 = 0x67452301;\n var H1 = 0xEFCDAB89;\n var H2 = 0x98BADCFE;\n var H3 = 0x10325476;\n var H4 = 0xC3D2E1F0;\n var A, B, C, D, E;\n var temp;\n // utf8_encode\n str = /*unescape*/ (encodeURIComponent(str));\n var strLen = str.length;\n var wordArray = [];\n for (i = 0; i < strLen - 3; i += 4) {\n j = str.charCodeAt(i) << 24 |\n str.charCodeAt(i + 1) << 16 |\n str.charCodeAt(i + 2) << 8 |\n str.charCodeAt(i + 3);\n wordArray.push(j);\n }\n switch (strLen % 4) {\n case 0:\n i = 0x080000000;\n break;\n case 1:\n i = str.charCodeAt(strLen - 1) << 24 | 0x0800000;\n break;\n case 2:\n i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000;\n break;\n case 3:\n i = str.charCodeAt(strLen - 3) << 24 |\n str.charCodeAt(strLen - 2) << 16 |\n str.charCodeAt(strLen - 1) <<\n 8 | 0x80;\n break;\n }\n wordArray.push(i);\n while ((wordArray.length % 16) !== 14) {\n wordArray.push(0);\n }\n wordArray.push(strLen >>> 29);\n wordArray.push((strLen << 3) & 0x0ffffffff);\n for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {\n for (i = 0; i < 16; i++) {\n W[i] = wordArray[blockstart + i];\n }\n for (i = 16; i <= 79; i++) {\n W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n }\n A = H0;\n B = H1;\n C = H2;\n D = H3;\n E = H4;\n for (i = 0; i <= 19; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 20; i <= 39; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 40; i <= 59; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 60; i <= 79; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n H0 = (H0 + A) & 0x0ffffffff;\n H1 = (H1 + B) & 0x0ffffffff;\n H2 = (H2 + C) & 0x0ffffffff;\n H3 = (H3 + D) & 0x0ffffffff;\n H4 = (H4 + E) & 0x0ffffffff;\n }\n temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4);\n return temp.toLowerCase();\n };\n /**\n * RFC4122 compliant UUID v4 generator.\n */\n RandomGenerator.uuid4 = function () {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c === \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return RandomGenerator;\n}());\nexport { RandomGenerator };\n\n//# sourceMappingURL=RandomGenerator.js.map\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst defaultMenuTemplate = require(\"../../html/siteTemplates/menuSite.html\");\nconst NavbarFragment_1 = require(\"./Menu/NavbarFragment\");\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Seite benutzt das menuTemplate, welches das ContainerTemplate includiert.\n *\n * Außerdem beinhaltet die MenuSite ein NavbarFragment, wo Menüelemente hinzugefügt werden können\n */\nclass MenuSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für eine MenuSite\n *\n * @param siteManager\n * @param view\n * @param menuTemplate\n */\n constructor(siteManager, view, menuTemplate) {\n super(siteManager, view, Helper_1.Helper.nonNull(menuTemplate, defaultMenuTemplate), \"#site-content\");\n this._navbarFragment = new NavbarFragment_1.NavbarFragment(this);\n this.addFragment(\"#navbar-fragment\", this._navbarFragment);\n }\n getNavbarFragment() {\n return this._navbarFragment;\n }\n /**\n * Während des onConstructs werden die Menüelemente hinzugefügt => aufrufen des onCreateMenu\n *\n * @param constructParameters\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = yield _super.onConstruct.call(this, constructParameters);\n this.onCreateMenu(this._navbarFragment);\n return res;\n });\n }\n onMenuPressed() {\n this._navbarFragment.openMenu();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._navbarFragment.setScrollWidget(this.findBy(\"#main-content-container\"));\n return res;\n });\n }\n /**\n * Überschreibt updateTtle, um Element in der Statusbar zu setzen\n *\n * @protected\n */\n _updateTitle() {\n super._updateTitle();\n if (this._title.element && this._state === Context_1.Context.STATE_RUNNING) {\n this._navbarFragment.setTitleElement(this._title.element);\n }\n }\n /**\n * Überschreiben durch Kinder-Klassen, um ein Menü zu erstellen\n *\n * @param {NavbarFragment} navbar\n */\n onCreateMenu(navbar) { }\n}\nexports.MenuSite = MenuSite;\n//# sourceMappingURL=MenuSite.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is already started and user tries to run it again.\n */\nvar TransactionAlreadyStartedError = /** @class */ (function (_super) {\n __extends(TransactionAlreadyStartedError, _super);\n function TransactionAlreadyStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionAlreadyStartedError\";\n Object.setPrototypeOf(_this, TransactionAlreadyStartedError.prototype);\n _this.message = \"Transaction already started for the given connection, commit current transaction before starting a new one.\";\n return _this;\n }\n return TransactionAlreadyStartedError;\n}(Error));\nexport { TransactionAlreadyStartedError };\n\n//# sourceMappingURL=TransactionAlreadyStartedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when required driver's package is not installed.\n */\nvar DriverPackageNotInstalledError = /** @class */ (function (_super) {\n __extends(DriverPackageNotInstalledError, _super);\n function DriverPackageNotInstalledError(driverName, packageName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverPackageNotInstalledError\";\n Object.setPrototypeOf(_this, DriverPackageNotInstalledError.prototype);\n _this.message = driverName + \" package has not been found installed. Try to install it: npm install \" + packageName + \" --save\";\n return _this;\n }\n return DriverPackageNotInstalledError;\n}(Error));\nexport { DriverPackageNotInstalledError };\n\n//# sourceMappingURL=DriverPackageNotInstalledError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build a query with RETURNING / OUTPUT statement,\n * but used database does not support it.\n */\nvar ReturningStatementNotSupportedError = /** @class */ (function (_super) {\n __extends(ReturningStatementNotSupportedError, _super);\n function ReturningStatementNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"ReturningStatementNotSupportedError\";\n Object.setPrototypeOf(_this, ReturningStatementNotSupportedError.prototype);\n _this.message = \"OUTPUT or RETURNING clause only supported by Microsoft SQL Server or PostgreSQL databases.\";\n return _this;\n }\n return ReturningStatementNotSupportedError;\n}(Error));\nexport { ReturningStatementNotSupportedError };\n\n//# sourceMappingURL=ReturningStatementNotSupportedError.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nimport { Query } from \"../Query\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar AbstractSqliteQueryRunner = /** @class */ (function (_super) {\n __extends(AbstractSqliteQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteQueryRunner() {\n return _super.call(this) || this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AbstractSqliteQueryRunner.prototype.connect = function () {\n return Promise.resolve(this.driver.databaseConnection);\n };\n /**\n * Releases used database connection.\n * We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.\n */\n AbstractSqliteQueryRunner.prototype.release = function () {\n this.loadedTables = [];\n this.clearSqlMemory();\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n AbstractSqliteQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n if (!isolationLevel) return [3 /*break*/, 4];\n if (isolationLevel !== \"READ UNCOMMITTED\" && isolationLevel !== \"SERIALIZABLE\") {\n throw new Error(\"SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation\");\n }\n if (!(isolationLevel === \"READ UNCOMMITTED\")) return [3 /*break*/, 2];\n return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = true\")];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = false\")];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"BEGIN TRANSACTION\")];\n case 7:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 9];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n AbstractSqliteQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n throw new Error(\"Stream is not supported by sqlite driver.\");\n };\n /**\n * Returns all available database names including system databases.\n */\n AbstractSqliteQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n AbstractSqliteQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"This driver does not support table schemas\");\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n AbstractSqliteQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" = '\" + tableName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n AbstractSqliteQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, columns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"PRAGMA table_info(\\\"\" + tableName + \"\\\")\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n columns = _a.sent();\n return [2 /*return*/, !!columns.find(function (column) { return column[\"name\"] === columnName; })];\n }\n });\n });\n };\n /**\n * Creates a new database.\n */\n AbstractSqliteQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops database.\n */\n AbstractSqliteQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n AbstractSqliteQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops table schema.\n */\n AbstractSqliteQueryRunner.prototype.dropSchema = function (schemaPath, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table.\n */\n AbstractSqliteQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, isTableExist;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _a.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n AbstractSqliteQueryRunner.prototype.dropTable = function (tableOrName, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, table, _a, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(tableOrName)];\n case 1:\n isTableExist = _b.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 3];\n _a = tableOrName;\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 4:\n _a = _b.sent();\n _b.label = 5;\n case 5:\n table = _a;\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n upQueries.push(this.dropTableSql(table, ifExist));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n AbstractSqliteQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n upQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.dropViewSql(view));\n downQueries.push(this.deleteViewDefinitionSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n AbstractSqliteQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _a.sent();\n upQueries = [];\n downQueries = [];\n upQueries.push(this.deleteViewDefinitionSql(view));\n upQueries.push(this.dropViewSql(view));\n downQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var oldTable, _a, newTable, up, down;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n newTable.name = newTableName;\n up = new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTableName + \"\\\"\");\n down = new Query(\"ALTER TABLE \\\"\" + newTableName + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\");\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n // rename old table;\n oldTable.name = newTable.name;\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n foreignKey.name = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n });\n // rename indices\n newTable.indices.forEach(function (index) {\n index.name = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n });\n // recreate table with new constraint names\n return [4 /*yield*/, this.recreateTable(newTable, oldTable)];\n case 5:\n // recreate table with new constraint names\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n return [2 /*return*/, this.addColumns(table, [column])];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) { return changedTable.addColumn(column); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n newColumn = undefined;\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n AbstractSqliteQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n return [4 /*yield*/, this.changeColumns(table, [{ oldColumn: oldColumn, newColumn: newColumn }])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n * Changed column looses all its keys in the db.\n */\n AbstractSqliteQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedColumns.forEach(function (changedColumnSet) {\n if (changedColumnSet.newColumn.name !== changedColumnSet.oldColumn.name) {\n changedTable.findColumnUniques(changedColumnSet.oldColumn).forEach(function (unique) {\n unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n unique.columnNames.push(changedColumnSet.newColumn.name);\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);\n });\n changedTable.findColumnForeignKeys(changedColumnSet.oldColumn).forEach(function (fk) {\n fk.columnNames.splice(fk.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n fk.columnNames.push(changedColumnSet.newColumn.name);\n fk.name = _this.connection.namingStrategy.foreignKeyName(changedTable, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n });\n changedTable.findColumnIndices(changedColumnSet.oldColumn).forEach(function (index) {\n index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n index.columnNames.push(changedColumnSet.newColumn.name);\n index.name = _this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);\n });\n }\n var originalColumn = changedTable.columns.find(function (column) { return column.name === changedColumnSet.oldColumn.name; });\n if (originalColumn)\n changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this.dropColumns(table, [column])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) {\n changedTable.removeColumn(column);\n changedTable.findColumnUniques(column).forEach(function (unique) { return changedTable.removeUniqueConstraint(unique); });\n changedTable.findColumnIndices(column).forEach(function (index) { return changedTable.removeIndex(index); });\n changedTable.findColumnForeignKeys(column).forEach(function (fk) { return changedTable.removeForeignKey(fk); });\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // remove column and its constraints from original table.\n columns.forEach(function (column) {\n table.removeColumn(column);\n table.findColumnUniques(column).forEach(function (unique) { return table.removeUniqueConstraint(unique); });\n table.findColumnIndices(column).forEach(function (index) { return table.removeIndex(index); });\n table.findColumnForeignKeys(column).forEach(function (fk) { return table.removeForeignKey(fk); });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n AbstractSqliteQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark columns as primary in original table\n table.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n AbstractSqliteQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n AbstractSqliteQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark primary columns as non-primary in original table\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createUniqueConstraints(tableOrName, [uniqueConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.addUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropUniqueConstraints(table, [uniqueConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates an unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.removeUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createCheckConstraints(tableOrName, [checkConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.addCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropCheckConstraints(table, [checkConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.removeCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createForeignKeys(tableOrName, [foreignKey])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.addForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n return [4 /*yield*/, this.dropForeignKeys(tableOrName, [foreignKey])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.removeForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n AbstractSqliteQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n AbstractSqliteQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.createIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.dropIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n AbstractSqliteQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"DELETE FROM \\\"\" + tableName + \"\\\"\")];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n AbstractSqliteQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = OFF;\")];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.startTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n _a.trys.push([3, 9, 14, 16]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'view'\";\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 4:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 5:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" != 'sqlite_sequence'\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 6:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 16];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = ON;\")];\n case 15:\n _a.sent();\n return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n AbstractSqliteQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, viewNamesString, query, dbViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n viewNamesString = viewNames.map(function (name) { return \"'\" + name + \"'\"; }).join(\", \");\n query = \"SELECT \\\"t\\\".* FROM \\\"\" + this.getTypeormMetadataTableName() + \"\\\" \\\"t\\\" INNER JOIN \\\"sqlite_master\\\" s ON \\\"s\\\".\\\"name\\\" = \\\"t\\\".\\\"name\\\" AND \\\"s\\\".\\\"type\\\" = 'view' WHERE \\\"t\\\".\\\"type\\\" = 'VIEW'\";\n if (viewNamesString.length > 0)\n query += \" AND \\\"t\\\".\\\"name\\\" IN (\" + viewNamesString + \")\";\n return [4 /*yield*/, this.query(query)];\n case 2:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n view.name = dbView[\"name\"];\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n AbstractSqliteQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var tableNamesString, dbTables, dbIndicesDef;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n tableNamesString = tableNames.map(function (tableName) { return \"'\" + tableName + \"'\"; }).join(\", \");\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" IN (\" + tableNamesString + \")\")];\n case 1:\n dbTables = _a.sent();\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'index' AND \\\"tbl_name\\\" IN (\" + tableNamesString + \")\")];\n case 2:\n dbIndicesDef = _a.sent();\n // if tables were not found in the db, no need to proceed\n if (!dbTables || !dbTables.length)\n return [2 /*return*/, []];\n // create table schemas for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, tableUniquePromises, _b, result, regexp, indicesPromises, indices;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n table = new Table({ name: dbTable[\"name\"] });\n sql = dbTable[\"sql\"];\n return [4 /*yield*/, Promise.all([\n this.query(\"PRAGMA table_info(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA index_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA foreign_key_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n ])];\n case 1:\n _a = __read.apply(void 0, [_c.sent(), 3]), dbColumns = _a[0], dbIndices = _a[1], dbForeignKeys = _a[2];\n autoIncrementColumnName = undefined;\n tableSql = dbTable[\"sql\"];\n autoIncrementIndex = tableSql.toUpperCase().indexOf(\"AUTOINCREMENT\");\n if (autoIncrementIndex !== -1) {\n autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);\n comma = autoIncrementColumnName.lastIndexOf(\",\");\n bracket = autoIncrementColumnName.lastIndexOf(\"(\");\n if (comma !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(comma);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n else if (bracket !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(bracket);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n }\n // create columns from the loaded columns\n table.columns = dbColumns.map(function (dbColumn) {\n var tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"name\"];\n tableColumn.type = dbColumn[\"type\"].toLowerCase();\n tableColumn.default = dbColumn[\"dflt_value\"] !== null && dbColumn[\"dflt_value\"] !== undefined ? dbColumn[\"dflt_value\"] : undefined;\n tableColumn.isNullable = dbColumn[\"notnull\"] === 0;\n // primary keys are numbered starting with 1, columns that aren't primary keys are marked with 0\n tableColumn.isPrimary = dbColumn[\"pk\"] > 0;\n tableColumn.comment = \"\"; // SQLite does not support column comments\n tableColumn.isGenerated = autoIncrementColumnName === dbColumn[\"name\"];\n if (tableColumn.isGenerated) {\n tableColumn.generationStrategy = \"increment\";\n }\n if (tableColumn.type === \"varchar\") {\n // Check if this is an enum\n var enumMatch = sql.match(new RegExp(\"\\\"(\" + tableColumn.name + \")\\\" varchar CHECK\\\\s*\\\\(\\\\s*\\\\1\\\\s+IN\\\\s*\\\\(('[^']+'(?:\\\\s*,\\\\s*'[^']+')+)\\\\s*\\\\)\\\\s*\\\\)\"));\n if (enumMatch) {\n // This is an enum\n tableColumn.enum = enumMatch[2].substr(1, enumMatch[2].length - 2).split(\"','\");\n }\n }\n // parse datatype and attempt to retrieve length, precision and scale\n var pos = tableColumn.type.indexOf(\"(\");\n if (pos !== -1) {\n var fullType = tableColumn.type;\n var dataType_1 = fullType.substr(0, pos);\n if (!!_this.driver.withLengthColumnTypes.find(function (col) { return col === dataType_1; })) {\n var len = parseInt(fullType.substring(pos + 1, fullType.length - 1));\n if (len) {\n tableColumn.length = len.toString();\n tableColumn.type = dataType_1; // remove the length part from the datatype\n }\n }\n if (!!_this.driver.withPrecisionColumnTypes.find(function (col) { return col === dataType_1; })) {\n var re = new RegExp(\"^\" + dataType_1 + \"\\\\((\\\\d+),?\\\\s?(\\\\d+)?\\\\)\");\n var matches = fullType.match(re);\n if (matches && matches[1]) {\n tableColumn.precision = +matches[1];\n }\n if (!!_this.driver.withScaleColumnTypes.find(function (col) { return col === dataType_1; })) {\n if (matches && matches[2]) {\n tableColumn.scale = +matches[2];\n }\n }\n tableColumn.type = dataType_1; // remove the precision/scale part from the datatype\n }\n }\n return tableColumn;\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, function (dbForeignKey) { return dbForeignKey[\"id\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (foreignKey) {\n var ownForeignKeys = dbForeignKeys.filter(function (dbForeignKey) { return dbForeignKey[\"id\"] === foreignKey[\"id\"] && dbForeignKey[\"table\"] === foreignKey[\"table\"]; });\n var columnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"from\"]; });\n var referencedColumnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"to\"]; });\n // build foreign key name, because we can not get it directly.\n var fkName = _this.connection.namingStrategy.foreignKeyName(table, columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n return new TableForeignKey({\n name: fkName,\n columnNames: columnNames,\n referencedTableName: foreignKey[\"table\"],\n referencedColumnNames: referencedColumnNames,\n onDelete: foreignKey[\"on_delete\"],\n onUpdate: foreignKey[\"on_update\"]\n });\n });\n tableUniquePromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"u\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var dbIndex, indexInfos, indexColumns, column;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n if (indexColumns.length === 1) {\n column = table.columns.find(function (column) {\n return !!indexColumns.find(function (indexColumn) { return indexColumn === column.name; });\n });\n if (column)\n column.isUnique = true;\n }\n // Sqlite does not store unique constraint name, so we generate its name manually.\n return [2 /*return*/, new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),\n columnNames: indexColumns\n })];\n }\n });\n }); });\n _b = table;\n return [4 /*yield*/, Promise.all(tableUniquePromises)];\n case 2:\n _b.uniques = (_c.sent());\n regexp = /CONSTRAINT \"([^\"]*)\" CHECK (\\(.*?\\))([,]|[)]$)/g;\n while (((result = regexp.exec(sql)) !== null)) {\n table.checks.push(new TableCheck({ name: result[1], expression: result[2] }));\n }\n indicesPromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"c\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; }) // unqiue\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var indexDef, condition, dbIndex, indexInfos, indexColumns, isUnique;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n indexDef = dbIndicesDef.find(function (dbIndexDef) { return dbIndexDef[\"name\"] === dbIndexName; });\n condition = /WHERE (.*)/.exec(indexDef[\"sql\"]);\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n isUnique = dbIndex[\"unique\"] === \"1\" || dbIndex[\"unique\"] === 1;\n return [2 /*return*/, new TableIndex({\n table: table,\n name: dbIndex[\"name\"],\n columnNames: indexColumns,\n isUnique: isUnique,\n where: condition ? condition[1] : undefined\n })];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(indicesPromises)];\n case 3:\n indices = _c.sent();\n table.indices = indices.filter(function (index) { return !!index; });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n AbstractSqliteQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n var hasAutoIncrement = primaryColumns.find(function (column) { return column.isGenerated && column.generationStrategy === \"increment\"; });\n var skipPrimary = primaryColumns.length > 1;\n if (skipPrimary && hasAutoIncrement)\n throw new Error(\"Sqlite does not support AUTOINCREMENT on composite primary key\");\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(column, skipPrimary); }).join(\", \");\n var sql = \"CREATE TABLE \\\"\" + table.name + \"\\\" (\" + columnDefinitions;\n // need for `addColumn()` method, because it recreates table.\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \\\"\" + fk.referencedTableName + \"\\\" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n if (primaryColumns.length > 1) {\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n var tableMetadata = this.connection.entityMetadatas.find(function (metadata) { return metadata.tableName === table.name; });\n if (tableMetadata && tableMetadata.withoutRowid) {\n sql += \" WITHOUT ROWID\";\n }\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n AbstractSqliteQueryRunner.prototype.dropTableSql = function (tableOrName, ifExist) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var query = ifExist ? \"DROP TABLE IF EXISTS \\\"\" + tableName + \"\\\"\" : \"DROP TABLE \\\"\" + tableName + \"\\\"\";\n return new Query(query);\n };\n AbstractSqliteQueryRunner.prototype.createViewSql = function (view) {\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression(this.connection).getQuery());\n }\n };\n AbstractSqliteQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n var expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n var _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", name: view.name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds drop view sql.\n */\n AbstractSqliteQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n return new Query(\"DROP VIEW \\\"\" + viewName + \"\\\"\");\n };\n /**\n * Builds remove view sql.\n */\n AbstractSqliteQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n var qb = this.connection.createQueryBuilder();\n var _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: viewName })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds create index sql.\n */\n AbstractSqliteQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \\\"\" + table.name + \"\\\" (\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n AbstractSqliteQueryRunner.prototype.dropIndexSql = function (indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n return new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds a query for create column.\n */\n AbstractSqliteQueryRunner.prototype.buildCreateColumnSql = function (column, skipPrimary) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column instanceof ColumnMetadata) {\n c += \" \" + this.driver.normalizeType(column);\n }\n else {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.enum)\n c += \" CHECK( \" + column.name + \" IN (\" + column.enum.map(function (val) { return \"'\" + val + \"'\"; }).join(\",\") + \") )\";\n if (column.isPrimary && !skipPrimary)\n c += \" PRIMARY KEY\";\n if (column.isGenerated === true && column.generationStrategy === \"increment\") // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTOINCREMENT\";\n if (column.collation)\n c += \" COLLATE \" + column.collation;\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT (\" + column.default + \")\";\n return c;\n };\n AbstractSqliteQueryRunner.prototype.recreateTable = function (newTable, oldTable, migrateData) {\n if (migrateData === void 0) { migrateData = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, newColumnNames, oldColumnNames;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n // drop old table indices\n oldTable.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(oldTable, index));\n });\n // change table name into 'temporary_table'\n newTable.name = \"temporary_\" + newTable.name;\n // create new table\n upQueries.push(this.createTableSql(newTable, true));\n downQueries.push(this.dropTableSql(newTable));\n // migrate all data from the old table into new table\n if (migrateData) {\n newColumnNames = newTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n oldColumnNames = oldTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n if (oldTable.columns.length < newTable.columns.length) {\n newColumnNames = newTable.columns.filter(function (column) {\n return oldTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n else if (oldTable.columns.length > newTable.columns.length) {\n oldColumnNames = oldTable.columns.filter(function (column) {\n return newTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n upQueries.push(new Query(\"INSERT INTO \\\"\" + newTable.name + \"\\\"(\" + newColumnNames + \") SELECT \" + oldColumnNames + \" FROM \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"INSERT INTO \\\"\" + oldTable.name + \"\\\"(\" + oldColumnNames + \") SELECT \" + newColumnNames + \" FROM \\\"\" + newTable.name + \"\\\"\"));\n }\n // drop old table\n upQueries.push(this.dropTableSql(oldTable));\n downQueries.push(this.createTableSql(oldTable, true));\n // rename old table\n upQueries.push(new Query(\"ALTER TABLE \\\"\" + newTable.name + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTable.name + \"\\\"\"));\n newTable.name = oldTable.name;\n // recreate table indices\n newTable.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(newTable.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(newTable, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n this.replaceCachedTable(oldTable, newTable);\n return [2 /*return*/];\n }\n });\n });\n };\n return AbstractSqliteQueryRunner;\n}(BaseQueryRunner));\nexport { AbstractSqliteQueryRunner };\n\n//# sourceMappingURL=AbstractSqliteQueryRunner.js.map\n","/**\n * Interface for entity metadata mappings stored inside \"schemas\" instead of models decorated by decorators.\n */\nvar EntitySchema = /** @class */ (function () {\n function EntitySchema(options) {\n this.options = options;\n }\n return EntitySchema;\n}());\nexport { EntitySchema };\n\n//# sourceMappingURL=EntitySchema.js.map\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncBaseModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass EasySyncBaseModel extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this._delegate = null;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.version = 1;\n this.deleted = false;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n obj[attribute] = this[attribute];\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"createdAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"updatedAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"version\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n };\n columns[\"deleted\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN\n };\n return columns;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (shared_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version && jsonObject.version !== 0) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns(entities[index]);\n this._handleRelations(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n static prepareSync(entities) {\n return entities;\n }\n}\nexports.EasySyncBaseModel = EasySyncBaseModel;\nEasySyncBaseModel.delegateClass = null;\nEasySyncBaseModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncBaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractFragment = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Ein Fragment ist ein TeilView einer Ansicht.\n */\nclass AbstractFragment extends Context_1.Context {\n /**\n * Erstellt ein neues Fragment\n *\n * @param site\n * @param view\n */\n constructor(site, view) {\n super(view);\n this._site = site;\n this._viewQuery = null;\n this._active = true;\n }\n /**\n * Gibt die zugehörige Seite zurück\n *\n * @returns\n */\n getSite() {\n if (this._site instanceof AbstractFragment) {\n return this._site.getSite();\n }\n return this._site;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.startSite(site, args);\n });\n }\n /**\n * Gibt zurück, ob das Fragment aktiv ist. Wenn nicht, wird es in der Seite nicht angezeigt\n *\n * @returns {boolean}\n */\n isActive() {\n return this._active;\n }\n setViewQuery(query) {\n this._viewQuery = query;\n }\n getViewQuery() {\n return this._viewQuery;\n }\n setActive(active) {\n this._active = active;\n if (Helper_1.Helper.isNotNull(this._view)) {\n if (active) {\n this._view.classList.remove(\"hidden\");\n }\n else {\n this._view.classList.add(\"hidden\");\n }\n }\n }\n}\nexports.AbstractFragment = AbstractFragment;\n//# sourceMappingURL=AbstractFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuAction = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Container für verschiedene Eigenschaften\n */\nclass MenuAction {\n /**\n * Erstellt eine MenuAction.\n * Außer name und action ist alles mit Default-werten vorbelegt\n *\n * @param name\n * @param action\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(name, action, showFor, order, icon) {\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._copies = [];\n this._menu = null;\n this._name = name;\n this._action = action;\n this._showFor = Helper_1.Helper.nonNull(showFor, MenuAction.SHOW_FOR_MEDIUM);\n this._order = Helper_1.Helper.nonNull(order, 1000);\n this._icon = icon;\n this._id = MenuAction.lastId++;\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._menu = null;\n this._copies = [];\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new MenuAction());\n copiedAction._name = this._name;\n copiedAction._action = this._action;\n copiedAction._showFor = this._showFor;\n copiedAction._order = this._order;\n copiedAction._liClass = this._liClass;\n copiedAction._shouldTranslate = this._shouldTranslate;\n copiedAction._visible = this._visible;\n copiedAction._activated = this._activated;\n copiedAction._icon = this._icon;\n copiedAction._id = MenuAction.lastId++;\n this._copies.push(copiedAction);\n return copiedAction;\n // return new MenuActionSlave(this);\n }\n // _triggerCopies(fn, args){\n // this._copies.forEach(copy => {\n // copy[fn].apply(copy, args);\n // })\n // }\n /**\n * Sorgt dafür, dass die Action neu gezeichnet wird\n */\n redraw() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.redrawAction(this);\n }\n this._copies.forEach(copy => copy.redraw());\n }\n /**\n * Sorgt dafür, dass die ActionElemente geupdatet wird\n */\n update() {\n this._menu.updateAction(this);\n this._copies.forEach(copy => copy.update());\n }\n /**\n * Gibt die Order der MenuAction zurück. Die Order bestimmt die Reihenfolge in der die Elemente angezeigt werden.\n * Je kleiner die Order, desto weiter rechts/oben werden diese angezeigt\n *\n * @returns {*}\n */\n getOrder() {\n return this._order;\n }\n /**\n * Gibt zurück, ob die MenuAction aktiv ist\n *\n * @returns {boolean}\n */\n isActivated() {\n return this._activated;\n }\n /**\n * Gibt an, ob der Name übersetzt werden soll\n *\n * @returns {boolean}\n */\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n setShouldTranslate(shouldTranslate) {\n this._shouldTranslate = (shouldTranslate === true);\n this.redraw();\n }\n setVisibility(visibility) {\n this._visible = visibility;\n this.redraw();\n this._copies.forEach(copy => copy.setVisibility(visibility));\n }\n /**\n * Gibt an, ob die MenuAction sichtbar ist\n *\n * @returns {boolean}\n */\n isVisible() {\n return this._visible;\n }\n /**\n * Gibt den Namen zurück\n *\n * @returns {*}\n */\n getName() {\n return this._name;\n }\n setName(name) {\n this._name = name;\n this.redraw();\n }\n /**\n * Gibt die Action, welche beim Click ausgeführt werden soll zurück\n * @returns {string|function}\n */\n getAction() {\n return this._action;\n }\n /**\n * Gibt die ID der MenuAction zurück\n * @returns {number}\n */\n getId() {\n return this._id;\n }\n /**\n * Gibt das Icon der MenuAction zurück\n * @returns {string|null}\n */\n getIcon() {\n return this._icon;\n }\n setIcon(icon) {\n this._icon = icon;\n this.redraw();\n }\n /**\n * Gibt die View-Klasse der Action zurück\n * @returns {string}\n */\n getShowFor() {\n return this._showFor;\n }\n /**\n * Gibt eine odder mehrere extra Klasse zurück, die dem li-Element der Action hinzugefügt werden kann\n * @returns {string}\n */\n getLiClass() {\n return this._liClass;\n }\n setLiClass(cssClass) {\n this._liClass = cssClass;\n this._copies.forEach(c => c.setLiClass(cssClass));\n this.redraw();\n }\n /**\n * Gibt das zugehörige Menu zurück\n *\n * @returns {null}\n */\n getMenu() {\n return this._menu;\n }\n /**\n * Setzt das zugehörige Menu\n *\n * @param menu\n */\n setMenu(menu) {\n this._menu = menu;\n }\n}\nexports.MenuAction = MenuAction;\n/**\n * Letzte ID, die vergeben wurde. Wird beim Erstellen einer Acton um eins erhöht\n * @type {number}\n */\nMenuAction.lastId = 0;\n/**\n * Die SHOW_ALWAYS-Visibility-Klasse\n * Das Element wird bei jeder Größe in der NavBar angezeigt\n *\n * @type {string}\n */\nMenuAction.SHOW_ALWAYS = \"always\";\n/**\n * Die SHOW_FOR_SMEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"SMedium\" (zwischen Small und Medium) hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_SMEDIUM = \"smedium\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Medium\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_MEDIUM = \"medium\";\n/**\n * Die SHOW_FOR_LARGE-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Large\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_LARGE = \"large\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird nie in der NavBar angezeigt, sondern immer nur im aufklapbaren Menu\n *\n * @type {string}\n */\nMenuAction.SHOW_NEVER = \"never\";\n//# sourceMappingURL=MenuAction.js.map","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dialog = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nclass Dialog {\n constructor(content, title) {\n this._resolver = null;\n this._content = null;\n this._backgroundElement = null;\n this._cancelable = true;\n this._title = Helper_1.Helper.nonNull(title, \"\");\n this._translatable = true;\n this._additionalClasses = \"\";\n this._buttons = [];\n this._result = null;\n this._contentPromise = null;\n this._addedToDomePromise = new Promise(r => {\n this._addedToDomePromiseResolver = r;\n });\n if (Helper_1.Helper.isNotNull(content)) {\n this.setContent(content);\n }\n }\n setTitle(title) {\n this._title = title;\n return this;\n }\n setTranslatable(translatable) {\n this._translatable = translatable;\n }\n setAdditionalClasses(classes) {\n this._additionalClasses = classes;\n }\n getTitle() {\n return this._title;\n }\n setCancelable(cancelable) {\n this._cancelable = (cancelable === true);\n return this;\n }\n setContent(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof content === \"string\" && content.endsWith(\".html\")) {\n content = ViewInflater_1.ViewInflater.getInstance().load(content);\n }\n this._contentPromise = Promise.resolve(content);\n this._content = yield this._contentPromise;\n return this;\n });\n }\n addButton(elementOrText, listenerOrResult, shouldClose) {\n shouldClose = Helper_1.Helper.nonNull(shouldClose, true);\n let button = null;\n if (typeof elementOrText === \"string\") {\n button = document.createElement(\"button\");\n button.classList.add(\"button\");\n button.classList.add(\"right\");\n button.appendChild(Translator_1.Translator.makePersistentTranslation(elementOrText));\n }\n else {\n button = elementOrText;\n }\n let self = this;\n if (typeof listenerOrResult !== \"function\") {\n let result = listenerOrResult;\n listenerOrResult = function () {\n self._result = result;\n };\n }\n let callback = null;\n if (shouldClose) {\n callback = function (e) {\n if (Helper_1.Helper.isNotNull(listenerOrResult)) {\n listenerOrResult(e);\n }\n self.close();\n };\n }\n else {\n callback = listenerOrResult;\n }\n if (Helper_1.Helper.isNotNull(callback)) {\n button.addEventListener(\"click\", callback);\n }\n this._buttons.push(button);\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._contentPromise;\n this._backgroundElement = this.createModalDialogElement();\n this._backgroundElement.addEventListener(\"keyup\", e => {\n if (e.key === \"Escape\" && this._cancelable) {\n this.close();\n }\n });\n document.body.appendChild(this._backgroundElement);\n yield Translator_1.Translator.getInstance().updateTranslations();\n this._addedToDomePromiseResolver();\n return new Promise((resolve) => {\n this._resolver = resolve;\n });\n });\n }\n createModalDialogElement() {\n let titleElement = document.createElement(\"span\");\n titleElement.classList.add(\"title\");\n if (this._translatable && this._title !== \"\") {\n titleElement.appendChild(Translator_1.Translator.makePersistentTranslation(this._title));\n }\n else {\n titleElement.innerHTML = this._title;\n }\n let titleBar = document.createElement(\"div\");\n titleBar.appendChild(titleElement);\n let contentContainer = document.createElement(\"div\");\n contentContainer.classList.add(\"content-container\");\n let modalDialog = document.createElement(\"div\");\n modalDialog.className = this._additionalClasses;\n modalDialog.classList.add(\"modal\");\n modalDialog.appendChild(titleBar);\n modalDialog.appendChild(contentContainer);\n let buttonBar = document.createElement(\"div\");\n buttonBar.classList.add(\"modal-button-container\");\n for (let i = 0, n = this._buttons.length; i < n; i++) {\n buttonBar.appendChild(this._buttons[i]);\n }\n if (!(this._content instanceof Node)) {\n this._content = (this._translatable) ? Translator_1.Translator.makePersistentTranslation(this._content) : document.createTextNode(this._content);\n }\n contentContainer.appendChild(this._content);\n this._backgroundElement = document.createElement(\"div\");\n this._backgroundElement.classList.add(\"background\");\n this._backgroundElement.style.display = \"block\";\n this._backgroundElement.appendChild(modalDialog);\n this._backgroundElement.querySelector(\".modal\").appendChild(buttonBar);\n if (this._cancelable) {\n let closeButton = document.createElement(\"span\");\n closeButton.classList.add(\"close\");\n closeButton.innerHTML = \"×\";\n titleBar.appendChild(closeButton);\n closeButton.addEventListener(\"click\", () => {\n this.close();\n });\n window.addEventListener(\"click\", (e) => {\n if (e.target === this._backgroundElement) {\n this.close();\n }\n });\n }\n return this._backgroundElement;\n }\n waitForAddedToDom() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._addedToDomePromise;\n });\n }\n close() {\n this.waitForAddedToDom().then(() => {\n if (Helper_1.Helper.isNotNull(this._backgroundElement)) {\n this._backgroundElement.style.display = \"none\";\n this._backgroundElement.remove();\n this._backgroundElement = null;\n }\n });\n if (Helper_1.Helper.isNotNull(this._resolver)) {\n this._resolver(this._result);\n }\n }\n}\nexports.Dialog = Dialog;\n//# sourceMappingURL=Dialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Toast = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ToastManager_1 = require(\"./ToastManager\");\nclass Toast {\n constructor(message, duration, shouldTranslateOrTranslationArgs) {\n this._message = message;\n this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION);\n this._shouldTranslate = shouldTranslateOrTranslationArgs !== false;\n this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []);\n this._id = Toast.LAST_ID++;\n this._toastElement = null;\n }\n getId() {\n return this._id;\n }\n getMessage() {\n return this._message;\n }\n getDuration() {\n return this._duration;\n }\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n getTranslationArgs() {\n return this._translationArgs;\n }\n setToastElement(element) {\n this._toastElement = element;\n }\n getToastElement() {\n return this._toastElement;\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().showToast(this);\n });\n }\n hide() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().hideToast(this);\n });\n }\n}\nexports.Toast = Toast;\nToast.LAST_ID = 0;\nToast.DEFAULT_DURATION = 2500;\n//# sourceMappingURL=Toast.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when selected sql driver does not supports locking.\n */\nvar LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) {\n __extends(LockNotSupportedOnGivenDriverError, _super);\n function LockNotSupportedOnGivenDriverError() {\n var _this = _super.call(this) || this;\n _this.name = \"LockNotSupportedOnGivenDriverError\";\n Object.setPrototypeOf(_this, LockNotSupportedOnGivenDriverError.prototype);\n _this.message = \"Locking not supported on given driver.\";\n return _this;\n }\n return LockNotSupportedOnGivenDriverError;\n}(Error));\nexport { LockNotSupportedOnGivenDriverError };\n\n//# sourceMappingURL=LockNotSupportedOnGivenDriverError.js.map\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenSubmenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Action, welche ein Untermenü öffnet\n */\nclass OpenSubmenuAction extends MenuAction_1.MenuAction {\n /**\n * Bekommt ein submenu anstelle einer Action übergeben.\n * Erstellt automatisch die action zum öffnen/schließen des Menüs\n *\n * @param title\n * @param menu\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(title, menu, showFor, order, icon) {\n //Erstellt die action zum schließen/öffnen des Submenüs\n super(title, action => {\n action.getSubmenu().toggle();\n action.update();\n }, showFor, order, icon);\n this._submenu = menu;\n menu.setParentAction(this);\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n * und das Submenu, welches ebenfalls kopiert wird\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n action = Helper_1.Helper.nonNull(action, new OpenSubmenuAction(null, this._submenu.copy()));\n action = super.copy(action);\n action._submenu.setParentAction(action);\n return action;\n }\n /**\n * Gibt das Submenu zurück\n *\n * @returns {*}\n */\n getSubmenu() {\n return this._submenu;\n }\n}\nexports.OpenSubmenuAction = OpenSubmenuAction;\n//# sourceMappingURL=OpenSubmenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nclass UserManager {\n constructor() {\n this._defaultUserData = {\n id: null,\n loggedIn: false,\n online: false,\n username: null,\n email: null,\n accesses: UserManager.OFFLINE_ACCESSES,\n };\n this._userData = this._defaultUserData;\n this._lastLoginChangeCallbackId = -1;\n this._loginChangeCallbacks = {};\n this._getMePromise = null;\n }\n addLoginChangeCallback(callback, callImmediately) {\n this._lastLoginChangeCallbackId++;\n this._loginChangeCallbacks[this._lastLoginChangeCallbackId] = callback;\n if (client_1.Helper.nonNull(callImmediately, false)) {\n callback(this._userData.loggedIn, this);\n }\n return this._lastLoginChangeCallbackId;\n }\n hasAccess(access) {\n return (this._userData.accesses.indexOf(access) !== -1);\n }\n _checkChangedLogin(before) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._userData.loggedIn !== before.loggedIn || (this._userData.loggedIn === true && this._userData.id !== before.id)) {\n yield this._callLoginChangeCallbacks();\n }\n });\n }\n _callLoginChangeCallbacks() {\n return __awaiter(this, void 0, void 0, function* () {\n yield client_1.Helper.asyncForEach(Object.keys(this._loginChangeCallbacks), callbackId => {\n this._loginChangeCallbacks[callbackId](this._userData.loggedIn, this);\n }, true);\n });\n }\n getUserData() {\n return this._userData;\n }\n getMe() {\n return __awaiter(this, void 0, void 0, function* () {\n this._getMePromise = new Promise((r) => __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doGetMe();\n yield this._checkChangedLogin(before);\n r(res);\n }));\n return this._getMePromise;\n });\n }\n waitForGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._getMePromise === null) {\n this.getMe();\n }\n yield this._getMePromise;\n });\n }\n login(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogin(email, password, saveLogin);\n //do it after the result is returned\n setTimeout(() => {\n this._checkChangedLogin(before);\n }, 1);\n return res;\n });\n }\n logout() {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogout();\n yield this._checkChangedLogin(before);\n if (!this._userData.loggedIn) {\n yield new client_1.Toast(\"goodbye\").show();\n }\n return res;\n });\n }\n register(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doRegister(email, username, password);\n yield this._checkChangedLogin(before);\n return res;\n });\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager.updateHeaders();\n let data = yield client_1.DataManager.load(\"user\");\n if (client_1.Helper.isSet(data, \"userData\")) {\n yield client_1.NativeStoragePromise.setItem(\"user-data\", data.userData);\n this._userData = data.userData;\n }\n else {\n this._userData = this._defaultUserData;\n }\n this._updateAccessClasses();\n if (client_1.Helper.isSet(data, \"token\")) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n if (client_1.Helper.isNotNull(yield client_1.NativeStoragePromise.getItem(\"auth-token\"))) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n }\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/login\", {\n \"email\": email,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n if (saveLogin) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield this._doGetMe();\n return true;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/register\", {\n \"email\": email,\n \"username\": username,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n /**\n * @returns {UserManager}\n */\n static getInstance() {\n if (!UserManager._instance) {\n UserManager._instance = new UserManager();\n }\n return UserManager._instance;\n }\n static updateHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = client_1.Helper.nonNull(sessionStorage.getItem(\"auth-token\"), yield client_1.NativeStoragePromise.getItem(\"auth-token\"));\n if (token) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + token);\n }\n });\n }\n _updateAccessClasses() {\n document.body.classList.forEach(cl => {\n if (cl.startsWith(UserManager.ACCESS_CLASS_PREFIX)) {\n document.body.classList.remove(cl);\n }\n });\n this._userData.accesses.forEach(access => {\n document.body.classList.add(UserManager.ACCESS_CLASS_PREFIX + access);\n });\n }\n hasOfflineAccess(access) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isOnline()) {\n return false;\n }\n let offlineData = client_1.Helper.nonNull(yield client_1.NativeStoragePromise.getItem(\"user-data\"), { accesses: UserManager.OFFLINE_ACCESSES });\n return (offlineData.accesses.indexOf(access) !== -1);\n });\n }\n sendForgotPasswordEmail(email) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW\", { email: email });\n return data.success;\n });\n }\n resetPassword(token, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW/2\", { token: token, password: password });\n return data.success;\n });\n }\n isOnline() {\n return this._userData.online;\n }\n isLoggedIn() {\n return this._userData.loggedIn;\n }\n static syncParamFor(model) {\n return {\n model: model,\n where: {\n user: { id: this.getInstance().getUserData().id }\n }\n };\n }\n static userSyncParam() {\n return {\n model: User_1.User,\n where: {\n id: this.getInstance().getUserData().id\n }\n };\n }\n}\nexports.UserManager = UserManager;\nUserManager.ACCESS_CLASS_PREFIX = \"access-\";\nUserManager.OFFLINE_ACCESSES = [\n \"offline\"\n];\n//# sourceMappingURL=UserManager.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to update using QueryBuilder but do not specify what to update.\n */\nvar UpdateValuesMissingError = /** @class */ (function (_super) {\n __extends(UpdateValuesMissingError, _super);\n function UpdateValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"UpdateValuesMissingError\";\n Object.setPrototypeOf(_this, UpdateValuesMissingError.prototype);\n _this.message = \"Cannot perform update query because update values are not defined. Call \\\"qb.set(...)\\\" method to specify updated values.\";\n return _this;\n }\n return UpdateValuesMissingError;\n}(Error));\nexport { UpdateValuesMissingError };\n\n//# sourceMappingURL=UpdateValuesMissingError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an optimistic lock cannot be used in query builder.\n */\nvar OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) {\n __extends(OptimisticLockCanNotBeUsedError, _super);\n function OptimisticLockCanNotBeUsedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockCanNotBeUsedError\";\n Object.setPrototypeOf(_this, OptimisticLockCanNotBeUsedError.prototype);\n _this.message = \"The optimistic lock can be used only with getOne() method.\";\n return _this;\n }\n return OptimisticLockCanNotBeUsedError;\n}(Error));\nexport { OptimisticLockCanNotBeUsedError };\n\n//# sourceMappingURL=OptimisticLockCanNotBeUsedError.js.map\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\n/**\n * Basis-Klasse für Seiten und Fragmente\n */\nclass Context {\n /**\n * Erstellt einen neuen Context. Erwartet den Link zu einem HTML-File, welches vom ViewInflater geladen werden kann.\n * Im Constructor sollten fragmente hinzugefügt werden (nachdem super.constructor(<>) aufgerufen wurde)\n *\n * @param view\n */\n constructor(view) {\n this.onViewLoadedCalled = false;\n this._pauseParameters = [];\n this._view = null;\n this._fragments = [];\n this._state = Context.STATE_CREATED;\n this._viewLoadedPromise = Helper_1.Helper.newPromiseWithResolve();\n this._viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then((siteContent) => {\n this._view = siteContent;\n return siteContent;\n }).catch(e => {\n // @ts-ignore\n this._viewLoadedPromise.reject(e);\n });\n }\n getState() {\n return this._state;\n }\n /**\n * Wird von SiteManager aufgerufen, wenn Klasse erstellt wird. Das ViewPromise ist noch nicht zwangsweise geladen!\n * Gibt ein Promise zurück. onViewLoaded wird erst aufgerufen, wenn onConstruct-Promise und view-Promise fullfilled sind.\n *\n * @param constructParameters, Object|Null\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_CONSTRUCTED;\n this.constructParameters = constructParameters;\n let onConstructPromises = [];\n for (let k in this._fragments) {\n onConstructPromises.push(this._fragments[k].onConstruct.apply(this._fragments[k], [constructParameters]));\n onConstructPromises.push(this._fragments[k]._viewPromise);\n }\n return Promise.all(onConstructPromises);\n });\n }\n callOnViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.onViewLoadedCalled) {\n this.onViewLoadedCalled = true;\n const res = yield this.onViewLoaded();\n // @ts-ignore\n this._viewLoadedPromise.resolve(res);\n }\n return this._viewLoadedPromise;\n });\n }\n /**\n * Methode wird aufgerufen, sobald onConstruct-Promise und view-Promise fullfilled sind.\n * View ist hier noch nicht im Dokument hinzugefügt.\n *\n * Benutze diese Methode, um die View beim starten zu manipulieren.\n */\n onViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_VIEW_LOADED;\n let onViewLoadedPromises = [];\n for (let k in this._fragments) {\n onViewLoadedPromises.push(this._fragments[k]._viewPromise.then(() => this._fragments[k].callOnViewLoaded()).then(() => this._fragments[k]._viewLoadedPromise.resolve()));\n }\n return Promise.all(onViewLoadedPromises);\n });\n }\n /**\n * onViewLoaded-Promise ist erfüllt => View wird dem Document hinzugefügt => onStart wird aufgerufen\n *\n * Seite wird pausiert => onPause wird aufgerufen => View wird aus dem Document entfernt => - etwas passiert -\n * => Seite wird fortgesetzt => View wird dem Document hinzugefügt => onStart wird mit dem Rückgabewert von onPause ausgeführt\n *\n * Zurückgegebenes Promise wird ignoriert!\n * @param pauseArguments, Object|NULL\n */\n onStart(pauseArguments) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_RUNNING;\n for (let k in this._fragments) {\n let fragment = this._fragments[k];\n fragment.onStart.apply(this._fragments[k], [yield this._fragments[k]._pauseParameters]);\n this._fragments[k]._viewPromise.then(function (fragmentView) {\n if (fragment.isActive()) {\n fragmentView.classList.remove(\"hidden\");\n }\n else {\n fragmentView.classList.add(\"hidden\");\n }\n });\n }\n });\n }\n /**\n * Seite wird pausiet => onPause wird ausgeführt => View wird aus dem Document entfernt\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird als Pause-Parameter gespeichert und wird beim Fortsetzen der Seite ausgeführt\n * @returns {Promise}\n */\n onPause(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_PAUSED;\n for (let k in this._fragments) {\n let pauseParameters = this._fragments[k].onPause.apply(this._fragments[k], args);\n this._fragments[k].setPauseParameters(pauseParameters);\n }\n });\n }\n /**\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird ignoriert\n */\n onDestroy(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_DESTROYED;\n for (let k in this._fragments) {\n this._fragments[k].onDestroy.apply(this._fragments[k], args);\n }\n });\n }\n isShowing() {\n return this._state === Context.STATE_RUNNING;\n }\n /**\n * Fügt ein neues Fragment hinzu.\n *\n * @param viewQuery\n * @param fragment\n */\n addFragment(viewQuery, fragment) {\n this._fragments.push(fragment);\n fragment.setViewQuery(viewQuery);\n this._viewPromise = Promise.all([this._viewPromise, fragment._viewPromise]).then(res => {\n res[0].querySelector(viewQuery).appendChild(res[1]);\n return res[0];\n }).catch(e => console.error(e));\n if (this._state >= Context.STATE_CONSTRUCTED) {\n fragment.onConstruct(this.constructParameters);\n }\n if (this._state >= Context.STATE_VIEW_LOADED) {\n Promise.all([this._viewLoadedPromise, fragment.getViewPromise()]).then(() => fragment.callOnViewLoaded());\n }\n if (this._state >= Context.STATE_RUNNING) {\n fragment._viewLoadedPromise.then(() => {\n if (this._state >= Context.STATE_RUNNING) {\n fragment.onStart();\n }\n });\n }\n }\n /**\n * Entfernt ein Fragment.\n *\n * @param fragment\n */\n removeFragment(fragment) {\n const index = this._fragments.indexOf(fragment);\n if (index !== -1) {\n this._fragments.splice(index, 1);\n }\n fragment._viewPromise.then(res => res.remove());\n this._fragments.push(fragment);\n if (this._state < Context.STATE_PAUSED) {\n fragment.onPause();\n }\n if (this._state < Context.STATE_DESTROYING) {\n fragment.onDestroy();\n }\n }\n /**\n * Findet ein Element anhand eines Selectors\n *\n * Wenn all = true, werden alle gefundenen Elemente zurückgegeben\n *\n * Wenn asPromise = true, wird das Ergebnis als Promise zurückgegeben. Hier wird gewartet, bis das _viewPromise fullfilled ist\n * Nutze das, um die View in onConstruct zu manipulieren. Evtl entfernen\n *\n * @param query\n * @param all\n * @param asPromise\n * @returns {*}\n */\n findBy(query, all, asPromise) {\n all = Helper_1.Helper.nonNull(all, false);\n asPromise = Helper_1.Helper.nonNull(asPromise, false);\n let getVal = function (root) {\n let res = null;\n if (all) {\n res = root.querySelectorAll(query);\n if (root.matches(query)) {\n res.push(root);\n }\n }\n else {\n if (root.matches(query)) {\n res = root;\n }\n else {\n res = root.querySelector(query);\n }\n }\n return res;\n };\n if (asPromise) {\n return this._viewPromise.then(function (rootView) {\n return getVal(rootView);\n });\n }\n return getVal(this._view);\n }\n find(selector) {\n if (this._view.matches(selector)) {\n return this._view;\n }\n else {\n return this._view.querySelector(selector);\n }\n }\n findAll(selector) {\n const res = this._view.querySelectorAll(selector);\n if (this._view.matches(selector)) {\n res.push(this._view);\n }\n return res;\n }\n /**\n * Setzt die PauseParameters\n * @param pauseParameters\n */\n setPauseParameters(pauseParameters) {\n this._pauseParameters = pauseParameters;\n }\n /**\n * Gibt das ViewPromise zurück\n * @returns {*}\n */\n getViewPromise() {\n return this._viewPromise;\n }\n}\nexports.Context = Context;\nContext.STATE_CREATED = 0;\nContext.STATE_CONSTRUCTED = 1;\nContext.STATE_VIEW_LOADED = 2;\nContext.STATE_RUNNING = 3;\nContext.STATE_PAUSED = 4;\nContext.STATE_DESTROYING = 5;\nContext.STATE_DESTROYED = 6;\n//# sourceMappingURL=Context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Role_1 = require(\"./Role\");\nclass User extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.username = null;\n this.email = null;\n this.password = null;\n this.roles = null;\n this.activated = false;\n this.blocked = false;\n this.salt = null;\n }\n toJSON() {\n return {\n id: this.id,\n username: this.username,\n };\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"username\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"email\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"password\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"activated\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"blocked\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"salt\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"roles\"] = {\n target: Role_1.Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"userRole\"\n },\n cascade: false\n };\n return relations;\n }\n static prepareSync(entities) {\n let jsonEntities = [];\n entities.forEach(entity => {\n let jsonEntity = {};\n jsonEntity.id = entity.id;\n jsonEntity.createdAt = new Date();\n jsonEntity.updatedAt = new Date();\n jsonEntity.username = \"\";\n jsonEntity.email = \"\";\n jsonEntity.password = \"\";\n jsonEntity.salt = \"\";\n jsonEntity.activated = 1;\n jsonEntity.blocked = 1;\n jsonEntity.version = 1;\n jsonEntity.deleted = 0;\n jsonEntities.push(jsonEntity);\n });\n return jsonEntities;\n }\n}\nexports.User = User;\ncordova_sites_database_1.BaseDatabase.addModel(User);\n//# sourceMappingURL=User.js.map","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when no result could be found in methods which are not allowed to return undefined or an empty set.\n */\nvar EntityNotFoundError = /** @class */ (function (_super) {\n __extends(EntityNotFoundError, _super);\n function EntityNotFoundError(entityClass, criteria) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityNotFound\";\n Object.setPrototypeOf(_this, EntityNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n var criteriaString = _this.stringifyCriteria(criteria);\n _this.message = \"Could not find any entity of type \\\"\" + targetName + \"\\\" matching: \" + criteriaString;\n return _this;\n }\n EntityNotFoundError.prototype.stringifyCriteria = function (criteria) {\n try {\n return JSON.stringify(criteria, null, 4);\n }\n catch (e) { }\n return \"\" + criteria;\n };\n return EntityNotFoundError;\n}(Error));\nexport { EntityNotFoundError };\n\n//# sourceMappingURL=EntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n *\n */\nvar EntityColumnNotFound = /** @class */ (function (_super) {\n __extends(EntityColumnNotFound, _super);\n function EntityColumnNotFound(propertyPath) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityColumnNotFound\";\n Object.setPrototypeOf(_this, EntityColumnNotFound.prototype);\n _this.message = \"No entity column \\\"\" + propertyPath + \"\\\" was found.\";\n return _this;\n }\n return EntityColumnNotFound;\n}(Error));\nexport { EntityColumnNotFound };\n\n//# sourceMappingURL=EntityColumnNotFound.js.map\n","/**\n * Result object returned by UpdateQueryBuilder execution.\n */\nvar UpdateResult = /** @class */ (function () {\n function UpdateResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n // identifier: ObjectLiteral[] = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return UpdateResult;\n}());\nexport { UpdateResult };\n\n//# sourceMappingURL=UpdateResult.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build an UPDATE query with LIMIT but the database does not support it.\n*/\nvar LimitOnUpdateNotSupportedError = /** @class */ (function (_super) {\n __extends(LimitOnUpdateNotSupportedError, _super);\n function LimitOnUpdateNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"LimitOnUpdateNotSupportedError\";\n Object.setPrototypeOf(_this, LimitOnUpdateNotSupportedError.prototype);\n _this.message = \"Your database does not support LIMIT on UPDATE statements.\";\n return _this;\n }\n return LimitOnUpdateNotSupportedError;\n}(Error));\nexport { LimitOnUpdateNotSupportedError };\n\n//# sourceMappingURL=LimitOnUpdateNotSupportedError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection, queryRunner, relationIdAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationIdAttributes = relationIdAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n promises = this.relationIdAttributes.map(function (relationIdAttr) { return __awaiter(_this, void 0, void 0, function () {\n var duplicates_1, results, relation_1, joinColumns_1, table, tableName, tableAlias_1, duplicates_2, parameters_1, condition, qb_1, results, relation, joinColumns_2, inverseJoinColumns_1, junctionAlias_1, inverseSideTableName, inverseSideTableAlias_1, junctionTableName, mappedColumns, parameters_2, duplicates_3, joinColumnConditions, inverseJoinColumnCondition_1, condition, qb_2, results;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner)) return [3 /*break*/, 1];\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n if (relationIdAttr.queryBuilderFactory)\n throw new Error(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n duplicates_1 = [];\n results = rawEntities.map(function (rawEntity) {\n var result = {};\n var duplicateParts = [];\n relationIdAttr.relation.joinColumns.forEach(function (joinColumn) {\n result[joinColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn);\n var duplicatePart = joinColumn.databaseName + \":\" + result[joinColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n result[primaryColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n var duplicatePart = primaryColumn.databaseName + \":\" + result[primaryColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_1.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates_1.push(duplicate);\n return result;\n }).filter(function (v) { return v; });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 1:\n if (!(relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner)) return [3 /*break*/, 3];\n relation_1 = relationIdAttr.relation;\n joinColumns_1 = relation_1.isOwning ? relation_1.joinColumns : relation_1.inverseRelation.joinColumns;\n table = relation_1.inverseEntityMetadata.target;\n tableName = relation_1.inverseEntityMetadata.tableName;\n tableAlias_1 = relationIdAttr.alias || tableName;\n duplicates_2 = [];\n parameters_1 = {};\n condition = rawEntities.map(function (rawEntity, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = joinColumns_1.map(function (joinColumn) {\n var parameterName = joinColumn.databaseName + index;\n var parameterValue = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n var duplicatePart = tableAlias_1 + \":\" + joinColumn.propertyPath + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias_1 + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(function (v) { return v; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_2.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_2.push(duplicate);\n Object.assign(parameters_1, parameterParts);\n return queryPart;\n }).filter(function (v) { return v; }).map(function (condition) { return \"(\" + condition + \")\"; })\n .join(\" OR \");\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n qb_1 = this.connection.createQueryBuilder(this.queryRunner);\n joinColumns_1.forEach(function (joinColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n qb_1.from(table, tableAlias_1)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters_1);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_1);\n return [4 /*yield*/, qb_1.getRawMany()];\n case 2:\n results = _a.sent();\n results.forEach(function (result) {\n joinColumns_1.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 3:\n relation = relationIdAttr.relation;\n joinColumns_2 = relation.isOwning ? relation.joinColumns : relation.inverseRelation.inverseJoinColumns;\n inverseJoinColumns_1 = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation.joinColumns;\n junctionAlias_1 = relationIdAttr.junctionAlias;\n inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias_1 = relationIdAttr.alias || inverseSideTableName;\n junctionTableName = relation.isOwning ? relation.junctionEntityMetadata.tableName : relation.inverseRelation.junctionEntityMetadata.tableName;\n mappedColumns = rawEntities.map(function (rawEntity) {\n return joinColumns_2.reduce(function (map, joinColumn) {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n return map;\n }, {});\n });\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n parameters_2 = {};\n duplicates_3 = [];\n joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = Object.keys(mappedColumn).map(function (key) {\n var parameterName = key + index;\n var parameterValue = mappedColumn[key];\n var duplicatePart = junctionAlias_1 + \":\" + key + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias_1 + \".\" + key + \" = :\" + parameterName;\n }).filter(function (s) { return s; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_3.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_3.push(duplicate);\n Object.assign(parameters_2, parameterParts);\n return queryPart;\n }).filter(function (s) { return s; });\n inverseJoinColumnCondition_1 = inverseJoinColumns_1.map(function (joinColumn) {\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias_1 + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n condition = joinColumnConditions.map(function (condition) {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition_1 + \")\";\n }).join(\" OR \");\n qb_2 = this.connection.createQueryBuilder(this.queryRunner);\n inverseJoinColumns_1.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n joinColumns_2.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n qb_2.from(inverseSideTableName, inverseSideTableAlias_1)\n .innerJoin(junctionTableName, junctionAlias_1, condition)\n .setParameters(parameters_2);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_2);\n return [4 /*yield*/, qb_2.getRawMany()];\n case 4:\n results = _a.sent();\n results.forEach(function (result) {\n __spreadArray(__spreadArray([], __read(joinColumns_2)), __read(inverseJoinColumns_1)).forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { RelationIdAttribute } from \"./RelationIdAttribute\";\nvar RelationIdMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation id:\n // @RelationId(post => post.categories) categoryIds\n // category has relation id\n // @RelationId(category => category.images) imageIds\n // we load post and join category\n // we expect post.categoryIds and post.category.imageIds to have relation ids\n var _this = this;\n // first create relation id attributes for all relation id metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n }\n // second create relation id attributes for all relation id metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation id can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationId) {\n return new RelationIdAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationId.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationId.propertyName,\n alias: relationId.alias,\n queryBuilderFactory: relationId.queryBuilderFactory\n });\n };\n return RelationIdMetadataToAttributeTransformer;\n}());\nexport { RelationIdMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationIdMetadataToAttributeTransformer.js.map\n","import { __awaiter, __generator } from \"tslib\";\nvar RelationCountLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountLoader(connection, queryRunner, relationCountAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationCountAttributes = relationCountAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var onlyUnique, promises;\n var _this = this;\n return __generator(this, function (_a) {\n onlyUnique = function (value, index, self) {\n return self.indexOf(value) === index;\n };\n promises = this.relationCountAttributes.map(function (relationCountAttr) { return __awaiter(_this, void 0, void 0, function () {\n var relation, inverseRelation, referenceColumnName_1, inverseSideTable, inverseSideTableName, inverseSideTableAlias, inverseSidePropertyName, referenceColumnValues, qb, joinTableColumnName_1, inverseJoinColumnName, firstJunctionColumn, secondJunctionColumn, referenceColumnValues, junctionAlias, inverseSideTableName, inverseSideTableAlias, junctionTableName, condition, qb;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!relationCountAttr.relation.isOneToMany) return [3 /*break*/, 2];\n relation = relationCountAttr.relation;\n inverseRelation = relation.inverseRelation;\n referenceColumnName_1 = inverseRelation.joinColumns[0].referencedColumn.propertyName;\n inverseSideTable = relation.inverseEntityMetadata.target;\n inverseSideTableName = relation.inverseEntityMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n inverseSidePropertyName = inverseRelation.propertyName;\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + referenceColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(inverseSideTableAlias + \".\" + inverseSidePropertyName, \"parentId\")\n .addSelect(\"COUNT(*)\", \"cnt\")\n .from(inverseSideTable, inverseSideTableAlias)\n .where(inverseSideTableAlias + \".\" + inverseSidePropertyName + \" IN (:...ids)\")\n .addGroupBy(inverseSideTableAlias + \".\" + inverseSidePropertyName)\n .setParameter(\"ids\", referenceColumnValues);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _a = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 1: return [2 /*return*/, (_a.results = _c.sent(),\n _a)];\n case 2:\n inverseJoinColumnName = void 0;\n firstJunctionColumn = void 0;\n secondJunctionColumn = void 0;\n if (relationCountAttr.relation.isOwning) { // todo fix joinColumns[0] and inverseJoinColumns[0].\n joinTableColumnName_1 = relationCountAttr.relation.joinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n }\n else {\n joinTableColumnName_1 = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n }\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + joinTableColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n junctionAlias = relationCountAttr.junctionAlias;\n inverseSideTableName = relationCountAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n junctionTableName = relationCountAttr.relation.junctionEntityMetadata.tableName;\n condition = junctionAlias + \".\" + firstJunctionColumn.propertyName + \" IN (\" + referenceColumnValues.map(function (vals) { return isNaN(vals) ? \"'\" + vals + \"'\" : vals; }) + \")\" +\n \" AND \" + junctionAlias + \".\" + secondJunctionColumn.propertyName + \" = \" + inverseSideTableAlias + \".\" + inverseJoinColumnName;\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(junctionAlias + \".\" + firstJunctionColumn.propertyName, \"parentId\")\n .addSelect(\"COUNT(\" + qb.escape(inverseSideTableAlias) + \".\" + qb.escape(inverseJoinColumnName) + \")\", \"cnt\")\n .from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .addGroupBy(junctionAlias + \".\" + firstJunctionColumn.propertyName);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _b = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 3: return [2 /*return*/, (_b.results = _c.sent(),\n _b)];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationCountLoader;\n}());\nexport { RelationCountLoader };\n\n//# sourceMappingURL=RelationCountLoader.js.map\n","import { RelationCountAttribute } from \"./RelationCountAttribute\";\nvar RelationCountMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation count:\n // @RelationCount(post => post.categories) categoryCount\n // category has relation count\n // @RelationCount(category => category.images) imageCount\n // we load post and join category\n // we expect post.categoryCount and post.category.imageCount to have relation counts\n var _this = this;\n // first create relation count attributes for all relation count metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n }\n // second create relation count attributes for all relation count metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation count can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationCount) {\n return new RelationCountAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationCount.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationCount.propertyName,\n alias: relationCount.alias,\n queryBuilderFactory: relationCount.queryBuilderFactory\n });\n };\n return RelationCountMetadataToAttributeTransformer;\n}());\nexport { RelationCountMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationCountMetadataToAttributeTransformer.js.map\n","import { __awaiter, __extends, __generator, __read, __spreadArray } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { RawSqlResultsToEntityTransformer } from \"./transformer/RawSqlResultsToEntityTransformer\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PessimisticLockTransactionRequiredError } from \"../error/PessimisticLockTransactionRequiredError\";\nimport { NoVersionOrUpdateDateColumnError } from \"../error/NoVersionOrUpdateDateColumnError\";\nimport { OptimisticLockVersionMismatchError } from \"../error/OptimisticLockVersionMismatchError\";\nimport { OptimisticLockCanNotBeUsedError } from \"../error/OptimisticLockCanNotBeUsedError\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\nimport { RelationIdLoader } from \"./relation-id/RelationIdLoader\";\nimport { RelationIdMetadataToAttributeTransformer } from \"./relation-id/RelationIdMetadataToAttributeTransformer\";\nimport { RelationCountLoader } from \"./relation-count/RelationCountLoader\";\nimport { RelationCountMetadataToAttributeTransformer } from \"./relation-count/RelationCountMetadataToAttributeTransformer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { LockNotSupportedOnGivenDriverError } from \"../error/LockNotSupportedOnGivenDriverError\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { OffsetWithoutLimitNotSupportedError } from \"../error/OffsetWithoutLimitNotSupportedError\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SelectQueryBuilder = /** @class */ (function (_super) {\n __extends(SelectQueryBuilder, _super);\n function SelectQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SelectQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createSelectExpression();\n sql += this.createJoinExpression();\n sql += this.createWhereExpression();\n sql += this.createGroupByExpression();\n sql += this.createHavingExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitOffsetExpression();\n sql += this.createLockExpression();\n sql = sql.trim();\n if (this.expressionMap.subQuery)\n sql = \"(\" + sql + \")\";\n return sql;\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a subquery - query that can be used inside other queries.\n */\n SelectQueryBuilder.prototype.subQuery = function () {\n var qb = this.createQueryBuilder();\n qb.expressionMap.subQuery = true;\n qb.expressionMap.parentQueryBuilder = this;\n return qb;\n };\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n SelectQueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n return this;\n };\n /**\n * Adds new selection to the SELECT query.\n */\n SelectQueryBuilder.prototype.addSelect = function (selection, selectionAliasName) {\n if (!selection)\n return this;\n if (Array.isArray(selection)) {\n this.expressionMap.selects = this.expressionMap.selects.concat(selection.map(function (selection) { return ({ selection: selection }); }));\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects.push({ selection: selection, aliasName: selectionAliasName });\n }\n return this;\n };\n /**\n * Sets whether the selection is DISTINCT.\n */\n SelectQueryBuilder.prototype.distinct = function (distinct) {\n if (distinct === void 0) { distinct = true; }\n this.expressionMap.selectDistinct = distinct;\n return this;\n };\n /**\n * Sets the distinct on clause for Postgres.\n */\n SelectQueryBuilder.prototype.distinctOn = function (distinctOn) {\n this.expressionMap.selectDistinctOn = distinctOn;\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n * Removes all previously set from-s.\n */\n SelectQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SelectQueryBuilder.prototype.addFrom = function (entityTarget, aliasName) {\n var alias = this.createFromAlias(entityTarget, aliasName);\n if (!this.expressionMap.mainAlias)\n this.expressionMap.setMainAlias(alias);\n return this;\n };\n /**\n * INNER JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.innerJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.leftJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs relation id and maps it into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationIdAndMap = function (mapToProperty, relationName, aliasNameOrOptions, queryBuilderFactory) {\n var relationIdAttribute = new RelationIdAttribute(this.expressionMap);\n relationIdAttribute.mapToProperty = mapToProperty;\n relationIdAttribute.relationName = relationName;\n if (typeof aliasNameOrOptions === \"string\")\n relationIdAttribute.alias = aliasNameOrOptions;\n if (aliasNameOrOptions instanceof Object && aliasNameOrOptions.disableMixedMap)\n relationIdAttribute.disableMixedMap = true;\n relationIdAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationIdAttributes.push(relationIdAttribute);\n if (relationIdAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationIdAttribute.junctionAlias,\n metadata: relationIdAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Counts number of entities of entity's relation and maps the value into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationCountAndMap = function (mapToProperty, relationName, aliasName, queryBuilderFactory) {\n var relationCountAttribute = new RelationCountAttribute(this.expressionMap);\n relationCountAttribute.mapToProperty = mapToProperty;\n relationCountAttribute.relationName = relationName;\n relationCountAttribute.alias = aliasName;\n relationCountAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationCountAttributes.push(relationCountAttribute);\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias\n });\n if (relationCountAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias,\n metadata: relationCountAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Loads all relation ids for all relations of the selected entity.\n * All relation ids will be mapped to relation property themself.\n * If array of strings is given then loads only relation ids of the given properties.\n */\n SelectQueryBuilder.prototype.loadAllRelationIds = function (options) {\n var _this = this;\n this.expressionMap.mainAlias.metadata.relations.forEach(function (relation) {\n if (options !== undefined && options.relations !== undefined && options.relations.indexOf(relation.propertyPath) === -1)\n return;\n _this.loadRelationIdAndMap(_this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, _this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, options);\n });\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Sets HAVING condition in the query builder.\n * If you had previously HAVING expression defined,\n * calling this function will override previously set HAVING conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.having = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"simple\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"and\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"or\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Sets GROUP BY condition in the query builder.\n * If you had previously GROUP BY expression defined,\n * calling this function will override previously set GROUP BY conditions.\n */\n SelectQueryBuilder.prototype.groupBy = function (groupBy) {\n if (groupBy) {\n this.expressionMap.groupBys = [groupBy];\n }\n else {\n this.expressionMap.groupBys = [];\n }\n return this;\n };\n /**\n * Adds GROUP BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addGroupBy = function (groupBy) {\n this.expressionMap.groupBys.push(groupBy);\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SelectQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Set's LIMIT - maximum number of rows to be selected.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead take method instead.\n */\n SelectQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = this.normalizeNumber(limit);\n if (this.expressionMap.limit !== undefined && isNaN(this.expressionMap.limit))\n throw new Error(\"Provided \\\"limit\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Set's OFFSET - selection offset.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead skip method instead.\n */\n SelectQueryBuilder.prototype.offset = function (offset) {\n this.expressionMap.offset = this.normalizeNumber(offset);\n if (this.expressionMap.offset !== undefined && isNaN(this.expressionMap.offset))\n throw new Error(\"Provided \\\"offset\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets maximal number of entities to take.\n */\n SelectQueryBuilder.prototype.take = function (take) {\n this.expressionMap.take = this.normalizeNumber(take);\n if (this.expressionMap.take !== undefined && isNaN(this.expressionMap.take))\n throw new Error(\"Provided \\\"take\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets number of entities to skip.\n */\n SelectQueryBuilder.prototype.skip = function (skip) {\n this.expressionMap.skip = this.normalizeNumber(skip);\n if (this.expressionMap.skip !== undefined && isNaN(this.expressionMap.skip))\n throw new Error(\"Provided \\\"skip\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets locking mode.\n */\n SelectQueryBuilder.prototype.setLock = function (lockMode, lockVersion, lockTables) {\n this.expressionMap.lockMode = lockMode;\n this.expressionMap.lockVersion = lockVersion;\n this.expressionMap.lockTables = lockTables;\n return this;\n };\n /**\n * Disables the global condition of \"non-deleted\" for the entity with delete date columns.\n */\n SelectQueryBuilder.prototype.withDeleted = function () {\n this.expressionMap.withDeleted = true;\n return this;\n };\n /**\n * Gets first raw result returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawMany()];\n case 1: return [2 /*return*/, (_a.sent())[0]];\n }\n });\n });\n };\n /**\n * Gets all raw results returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n this.expressionMap.queryEntity = false;\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_1 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_1;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.getRawAndEntities = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_2;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets single entity returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results, result, metadata, actualVersion, actualVersion;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n result = results.entities[0];\n if (result && this.expressionMap.lockMode === \"optimistic\" && this.expressionMap.lockVersion) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (this.expressionMap.lockVersion instanceof Date) {\n actualVersion = metadata.updateDateColumn.getEntityValue(result);\n if (actualVersion.getTime() !== this.expressionMap.lockVersion.getTime())\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n else {\n actualVersion = metadata.versionColumn.getEntityValue(result);\n if (actualVersion !== this.expressionMap.lockVersion)\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Gets the first entity returned by execution of generated query builder sql or rejects the returned promise on error.\n */\n SelectQueryBuilder.prototype.getOneOrFail = function () {\n return __awaiter(this, void 0, void 0, function () {\n var entity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getOne()];\n case 1:\n entity = _a.sent();\n if (!entity) {\n throw new EntityNotFoundError(this.expressionMap.mainAlias.target, this);\n }\n return [2 /*return*/, entity];\n }\n });\n });\n };\n /**\n * Gets entities returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n return [2 /*return*/, results.entities];\n }\n });\n });\n };\n /**\n * Gets count - number of entities selected by sql generated by this query builder.\n * Count excludes all limitations set by setFirstResult and setMaxResults methods call.\n */\n SelectQueryBuilder.prototype.getCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_3, rollbackError_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_3 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_3 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_3;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns entities and overall entities count (without limitation).\n * This method is useful to build pagination.\n */\n SelectQueryBuilder.prototype.getManyAndCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, entitiesAndRaw, count, results, error_4, rollbackError_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n entitiesAndRaw = _a.sent();\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 5:\n count = _a.sent();\n results = [entitiesAndRaw.entities, count];\n if (!transactionStartedByUs) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/, results];\n case 8:\n error_4 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_4 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw error_4;\n case 13:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns raw data stream.\n */\n SelectQueryBuilder.prototype.stream = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, releaseFn, results, error_5, rollbackError_5;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.expressionMap.queryEntity = false;\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, , 11]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n releaseFn = function () {\n if (queryRunner !== _this.queryRunner) // means we created our own query runner\n return queryRunner.release();\n return;\n };\n results = queryRunner.stream(sql, parameters, releaseFn, releaseFn);\n if (!transactionStartedByUs) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n case 6:\n error_5 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n _b.label = 7;\n case 7:\n _b.trys.push([7, 9, , 10]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 8:\n _b.sent();\n return [3 /*break*/, 10];\n case 9:\n rollbackError_5 = _b.sent();\n return [3 /*break*/, 10];\n case 10: throw error_5;\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Enables or disables query result caching.\n */\n SelectQueryBuilder.prototype.cache = function (enabledOrMillisecondsOrId, maybeMilliseconds) {\n if (typeof enabledOrMillisecondsOrId === \"boolean\") {\n this.expressionMap.cache = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheDuration = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"string\" || typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheId = enabledOrMillisecondsOrId;\n }\n if (maybeMilliseconds) {\n this.expressionMap.cacheDuration = maybeMilliseconds;\n }\n return this;\n };\n /**\n * Sets extra options that can be used to configure how query builder works.\n */\n SelectQueryBuilder.prototype.setOption = function (option) {\n this.expressionMap.options.push(option);\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n SelectQueryBuilder.prototype.join = function (direction, entityOrProperty, aliasName, condition, parameters, mapToProperty, isMappingMany) {\n this.setParameters(parameters || {});\n var joinAttribute = new JoinAttribute(this.connection, this.expressionMap);\n joinAttribute.direction = direction;\n joinAttribute.mapToProperty = mapToProperty;\n joinAttribute.isMappingMany = isMappingMany;\n joinAttribute.entityOrProperty = entityOrProperty; // relationName\n joinAttribute.condition = condition; // joinInverseSideCondition\n // joinAttribute.junctionAlias = joinAttribute.relation.isOwning ? parentAlias + \"_\" + destinationTableAlias : destinationTableAlias + \"_\" + parentAlias;\n this.expressionMap.joinAttributes.push(joinAttribute);\n if (joinAttribute.metadata) {\n if (joinAttribute.metadata.deleteDateColumn && !this.expressionMap.withDeleted) {\n var conditionDeleteColumn = aliasName + \".\" + joinAttribute.metadata.deleteDateColumn.propertyName + \" IS NULL\";\n joinAttribute.condition += joinAttribute.condition ? \" AND \" + conditionDeleteColumn : \"\" + conditionDeleteColumn;\n }\n // todo: find and set metadata right there?\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n metadata: joinAttribute.metadata\n });\n if (joinAttribute.relation && joinAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"join\",\n name: joinAttribute.junctionAlias,\n metadata: joinAttribute.relation.junctionEntityMetadata\n });\n }\n }\n else {\n var subQuery = \"\";\n if (entityOrProperty instanceof Function) {\n var subQueryBuilder = entityOrProperty(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n subQuery = subQueryBuilder.getQuery();\n }\n else {\n subQuery = entityOrProperty;\n }\n var isSubQuery = entityOrProperty instanceof Function || entityOrProperty.substr(0, 1) === \"(\" && entityOrProperty.substr(-1) === \")\";\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n tablePath: isSubQuery === false ? entityOrProperty : undefined,\n subQuery: isSubQuery === true ? subQuery : undefined,\n });\n }\n };\n /**\n * Creates \"SELECT FROM\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectExpression = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Cannot build query because main alias is not set (call qb#from method)\");\n // todo throw exception if selects or from is missing\n var allSelects = [];\n var excludedSelects = [];\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n allSelects.push.apply(allSelects, __spreadArray([], __read(this.buildEscapedEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(this.findEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n }\n // add selects from joins\n this.expressionMap.joinAttributes\n .forEach(function (join) {\n if (join.metadata) {\n allSelects.push.apply(allSelects, __spreadArray([], __read(_this.buildEscapedEntityColumnSelects(join.alias.name, join.metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(_this.findEntityColumnSelects(join.alias.name, join.metadata))));\n }\n else {\n var hasMainAlias = _this.expressionMap.selects.some(function (select) { return select.selection === join.alias.name; });\n if (hasMainAlias) {\n allSelects.push({ selection: _this.escape(join.alias.name) + \".*\" });\n var excludedSelect = _this.expressionMap.selects.find(function (select) { return select.selection === join.alias.name; });\n excludedSelects.push(excludedSelect);\n }\n }\n });\n // add all other selects\n this.expressionMap.selects\n .filter(function (select) { return excludedSelects.indexOf(select) === -1; })\n .forEach(function (select) { return allSelects.push({ selection: _this.replacePropertyNames(select.selection), aliasName: select.aliasName }); });\n // if still selection is empty, then simply set it to all (*)\n if (allSelects.length === 0)\n allSelects.push({ selection: \"*\" });\n var lock = \"\";\n if (this.connection.driver instanceof SqlServerDriver) {\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n lock = \" WITH (HOLDLOCK, ROWLOCK)\";\n break;\n case \"pessimistic_write\":\n lock = \" WITH (UPDLOCK, ROWLOCK)\";\n break;\n case \"dirty_read\":\n lock = \" WITH (NOLOCK)\";\n break;\n }\n }\n // create a selection query\n var froms = this.expressionMap.aliases\n .filter(function (alias) { return alias.type === \"from\" && (alias.tablePath || alias.subQuery); })\n .map(function (alias) {\n if (alias.subQuery)\n return alias.subQuery + \" \" + _this.escape(alias.name);\n return _this.getTableName(alias.tablePath) + \" \" + _this.escape(alias.name);\n });\n var select = this.createSelectDistinctExpression();\n var selection = allSelects.map(function (select) { return select.selection + (select.aliasName ? \" AS \" + _this.escape(select.aliasName) : \"\"); }).join(\", \");\n return select + selection + \" FROM \" + froms.join(\", \") + lock;\n };\n /**\n * Creates select | select distinct part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectDistinctExpression = function () {\n var _this = this;\n var _a = this.expressionMap, selectDistinct = _a.selectDistinct, selectDistinctOn = _a.selectDistinctOn;\n var driver = this.connection.driver;\n var select = \"SELECT \";\n if (driver instanceof PostgresDriver && selectDistinctOn.length > 0) {\n var selectDistinctOnMap = selectDistinctOn.map(function (on) { return _this.replacePropertyNames(on); }).join(\", \");\n select = \"SELECT DISTINCT ON (\" + selectDistinctOnMap + \") \";\n }\n else if (selectDistinct) {\n select = \"SELECT DISTINCT \";\n }\n return select;\n };\n /**\n * Creates \"JOIN\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createJoinExpression = function () {\n // examples:\n // select from owning side\n // qb.select(\"post\")\n // .leftJoinAndSelect(\"post.category\", \"category\");\n // select from non-owning side\n // qb.select(\"category\")\n // .leftJoinAndSelect(\"category.post\", \"post\");\n var _this = this;\n var joins = this.expressionMap.joinAttributes.map(function (joinAttr) {\n var relation = joinAttr.relation;\n var destinationTableName = joinAttr.tablePath;\n var destinationTableAlias = joinAttr.alias.name;\n var appendedCondition = joinAttr.condition ? \" AND (\" + joinAttr.condition + \")\" : \"\";\n var parentAlias = joinAttr.parentAlias;\n // if join was build without relation (e.g. without \"post.category\") then it means that we have direct\n // table to join, without junction table involved. This means we simply join direct table.\n if (!parentAlias || !relation) {\n var destinationJoin = joinAttr.alias.subQuery ? joinAttr.alias.subQuery : _this.getTableName(destinationTableName);\n return \" \" + joinAttr.direction + \" JOIN \" + destinationJoin + \" \" + _this.escape(destinationTableAlias) +\n (joinAttr.condition ? \" ON \" + _this.replacePropertyNames(joinAttr.condition) : \"\");\n }\n // if real entity relation is involved\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n // JOIN `category` `category` ON `category`.`id` = `post`.`categoryId`\n var condition = relation.joinColumns.map(function (joinColumn) {\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n // JOIN `post` `post` ON `post`.`categoryId` = `category`.`id`\n var condition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n if (relation.inverseEntityMetadata.tableType === \"entity-child\" && relation.inverseEntityMetadata.discriminatorColumn) {\n appendedCondition += \" AND \" + destinationTableAlias + \".\" + relation.inverseEntityMetadata.discriminatorColumn.databaseName + \"='\" + relation.inverseEntityMetadata.discriminatorValue + \"'\";\n }\n return destinationTableAlias + \".\" + relation.inverseRelation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else { // means many-to-many\n var junctionTableName = relation.junctionEntityMetadata.tablePath;\n var junctionAlias_1 = joinAttr.junctionAlias;\n var junctionCondition = \"\", destinationCondition = \"\";\n if (relation.isOwning) {\n junctionCondition = relation.joinColumns.map(function (joinColumn) {\n // `post_category`.`postId` = `post`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseJoinColumns.map(function (joinColumn) {\n // `category`.`id` = `post_category`.`categoryId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n else {\n junctionCondition = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) {\n // `post_category`.`categoryId` = `category`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n // `post`.`id` = `post_category`.`postId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(junctionTableName) + \" \" + _this.escape(junctionAlias_1) + \" ON \" + _this.replacePropertyNames(junctionCondition) +\n \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(destinationCondition + appendedCondition);\n }\n });\n return joins.join(\" \");\n };\n /**\n * Creates \"GROUP BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createGroupByExpression = function () {\n if (!this.expressionMap.groupBys || !this.expressionMap.groupBys.length)\n return \"\";\n return \" GROUP BY \" + this.replacePropertyNames(this.expressionMap.groupBys.join(\", \"));\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.allOrderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" and \"OFFSET\" parts of SQL query.\n */\n SelectQueryBuilder.prototype.createLimitOffsetExpression = function () {\n // in the case if nothing is joined in the query builder we don't need to make two requests to get paginated results\n // we can use regular limit / offset, that's why we add offset and limit construction here based on skip and take values\n var offset = this.expressionMap.offset, limit = this.expressionMap.limit;\n if (!offset && !limit && this.expressionMap.joinAttributes.length === 0) {\n offset = this.expressionMap.skip;\n limit = this.expressionMap.take;\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // Due to a limitation in SQL Server's parser implementation it does not support using\n // OFFSET or FETCH NEXT without an ORDER BY clause being provided. In cases where the\n // user does not request one we insert a dummy ORDER BY that does nothing and should\n // have no effect on the query planner or on the order of the results returned.\n // https://dba.stackexchange.com/a/193799\n var prefix = \"\";\n if ((limit || offset) && Object.keys(this.expressionMap.allOrderBys).length <= 0) {\n prefix = \" ORDER BY (SELECT NULL)\";\n }\n if (limit && offset)\n return prefix + \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return prefix + \" OFFSET 0 ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return prefix + \" OFFSET \" + offset + \" ROWS\";\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n throw new OffsetWithoutLimitNotSupportedError();\n }\n else if (this.connection.driver instanceof AbstractSqliteDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" LIMIT -1 OFFSET \" + offset;\n }\n else if (this.connection.driver instanceof OracleDriver) {\n if (limit && offset)\n return \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return \" FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return \" OFFSET \" + offset + \" ROWS\";\n }\n else {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" OFFSET \" + offset;\n }\n return \"\";\n };\n /**\n * Creates \"LOCK\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createLockExpression = function () {\n var driver = this.connection.driver;\n var lockTablesClause = \"\";\n if (this.expressionMap.lockTables) {\n if (!(driver instanceof PostgresDriver)) {\n throw new Error(\"Lock tables not supported in selected driver\");\n }\n if (this.expressionMap.lockTables.length < 1) {\n throw new Error(\"lockTables cannot be an empty array\");\n }\n lockTablesClause = \" OF \" + this.expressionMap.lockTables.join(\", \");\n }\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n return \" LOCK IN SHARE MODE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR SHARE\" + lockTablesClause;\n }\n else if (driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver || driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause;\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_partial_write\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" SKIP LOCKED\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE SKIP LOCKED\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write_or_fail\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" NOWAIT\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE NOWAIT\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"for_no_key_update\":\n if (driver instanceof PostgresDriver) {\n return \" FOR NO KEY UPDATE\" + lockTablesClause;\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n default:\n return \"\";\n }\n };\n /**\n * Creates \"HAVING\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createHavingExpression = function () {\n var _this = this;\n if (!this.expressionMap.havings || !this.expressionMap.havings.length)\n return \"\";\n var conditions = this.expressionMap.havings.map(function (having, index) {\n switch (having.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(having.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(having.condition);\n default:\n return _this.replacePropertyNames(having.condition);\n }\n }).join(\" \");\n if (!conditions.length)\n return \"\";\n return \" HAVING \" + conditions;\n };\n SelectQueryBuilder.prototype.buildEscapedEntityColumnSelects = function (aliasName, metadata) {\n var _this = this;\n var hasMainAlias = this.expressionMap.selects.some(function (select) { return select.selection === aliasName; });\n var columns = [];\n if (hasMainAlias) {\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) { return column.isSelect === true; }))));\n }\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) {\n return _this.expressionMap.selects.some(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n }))));\n // if user used partial selection and did not select some primary columns which are required to be selected\n // we select those primary columns and mark them as \"virtual\". Later virtual column values will be removed from final entity\n // to make entity contain exactly what user selected\n if (columns.length === 0) // however not in the case when nothing (even partial) was selected from this target (for example joins without selection)\n return [];\n var nonSelectedPrimaryColumns = this.expressionMap.queryEntity ? metadata.primaryColumns.filter(function (primaryColumn) { return columns.indexOf(primaryColumn) === -1; }) : [];\n var allColumns = __spreadArray(__spreadArray([], __read(columns)), __read(nonSelectedPrimaryColumns));\n return allColumns.map(function (column) {\n var selection = _this.expressionMap.selects.find(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n var selectionPath = _this.escape(aliasName) + \".\" + _this.escape(column.databaseName);\n if (_this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var asText = useLegacy ? \"AsText\" : \"ST_AsText\";\n selectionPath = asText + \"(\" + selectionPath + \")\";\n }\n if (_this.connection.driver instanceof PostgresDriver)\n // cast to JSON to trigger parsing in the driver\n if (column.precision) {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \", \" + column.precision + \")::json\";\n }\n else {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \")::json\";\n }\n if (_this.connection.driver instanceof SqlServerDriver)\n selectionPath = selectionPath + \".ToString()\";\n }\n return {\n selection: selectionPath,\n aliasName: selection && selection.aliasName ? selection.aliasName : DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName),\n // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!\n virtual: selection ? selection.virtual === true : (hasMainAlias ? false : true),\n };\n });\n };\n SelectQueryBuilder.prototype.findEntityColumnSelects = function (aliasName, metadata) {\n var mainSelect = this.expressionMap.selects.find(function (select) { return select.selection === aliasName; });\n if (mainSelect)\n return [mainSelect];\n return this.expressionMap.selects.filter(function (select) {\n return metadata.columns.some(function (column) { return select.selection === aliasName + \".\" + column.propertyPath; });\n });\n };\n SelectQueryBuilder.prototype.computeCountExpression = function () {\n var _this = this;\n var mainAlias = this.expressionMap.mainAlias.name; // todo: will this work with \"fromTableName\"?\n var metadata = this.expressionMap.mainAlias.metadata;\n var primaryColumns = metadata.primaryColumns;\n var distinctAlias = this.escape(mainAlias);\n // If we aren't doing anything that will create a join, we can use a simpler `COUNT` instead\n // so we prevent poor query patterns in the most likely cases\n if (this.expressionMap.joinAttributes.length === 0 &&\n this.expressionMap.relationIdAttributes.length === 0 &&\n this.expressionMap.relationCountAttributes.length === 0) {\n return \"COUNT(1)\";\n }\n // For everything else, we'll need to do some hackery to get the correct count values.\n if (this.connection.driver instanceof CockroachDriver || this.connection.driver instanceof PostgresDriver) {\n // Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function\n // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \"))\";\n }\n if (this.connection.driver instanceof MysqlDriver) {\n // MySQL & MariaDB can pass multiple parameters to the `DISTINCT` language construct\n // https://mariadb.com/kb/en/count-distinct/\n return \"COUNT(DISTINCT \" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \")\";\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // SQL Server has gotta be different from everyone else. They don't support\n // distinct counting multiple columns & they don't have the same operator\n // characteristic for concatenating, so we gotta use the `CONCAT` function.\n // However, If it's exactly 1 column we can omit the `CONCAT` for better performance.\n var columnsExpression = primaryColumns.map(function (primaryColumn) { return distinctAlias + \".\" + _this.escape(primaryColumn.databaseName); }).join(\", '|;|', \");\n if (primaryColumns.length === 1) {\n return \"COUNT(DISTINCT(\" + columnsExpression + \"))\";\n }\n return \"COUNT(DISTINCT(CONCAT(\" + columnsExpression + \")))\";\n }\n // If all else fails, fall back to a `COUNT` and `DISTINCT` across all the primary columns concatenated.\n // Per the SQL spec, this is the canonical string concatenation mechanism which is most\n // likely to work across servers implementing the SQL standard.\n // Please note, if there is only one primary column that the concatenation does not occur in this\n // query and the query is a standard `COUNT DISTINCT` in that case.\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\" || '|;|' || \") +\n \"))\";\n };\n SelectQueryBuilder.prototype.executeCountQuery = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var countSql, results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n countSql = this.computeCountExpression();\n return [4 /*yield*/, this.clone()\n .orderBy()\n .groupBy()\n .offset(undefined)\n .limit(undefined)\n .skip(undefined)\n .take(undefined)\n .select(countSql, \"cnt\")\n .setOption(\"disable-global-order\")\n .loadRawResults(queryRunner)];\n case 1:\n results = _a.sent();\n if (!results || !results[0] || !results[0][\"cnt\"])\n return [2 /*return*/, 0];\n return [2 /*return*/, parseInt(results[0][\"cnt\"])];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.executeEntitiesAndRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, relationIdLoader, relationCountLoader, relationIdMetadataTransformer, relationCountMetadataTransformer, rawResults, entities, _a, selects, orderBys_1, metadata_1, mainAliasName_1, querySelects, condition, parameters_1, alias_1, ids, areAllNumbers, rawRelationIdResults, rawRelationCountResults, transformer, broadcastResult;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Alias is not set. Use \\\"from\\\" method to set an alias.\");\n if ((this.expressionMap.lockMode === \"pessimistic_read\" || this.expressionMap.lockMode === \"pessimistic_write\" || this.expressionMap.lockMode === \"pessimistic_partial_write\" || this.expressionMap.lockMode === \"pessimistic_write_or_fail\" || this.expressionMap.lockMode === \"for_no_key_update\") && !queryRunner.isTransactionActive)\n throw new PessimisticLockTransactionRequiredError();\n if (this.expressionMap.lockMode === \"optimistic\") {\n metadata = this.expressionMap.mainAlias.metadata;\n if (!metadata.versionColumn && !metadata.updateDateColumn)\n throw new NoVersionOrUpdateDateColumnError(metadata.name);\n }\n relationIdLoader = new RelationIdLoader(this.connection, queryRunner, this.expressionMap.relationIdAttributes);\n relationCountLoader = new RelationCountLoader(this.connection, queryRunner, this.expressionMap.relationCountAttributes);\n relationIdMetadataTransformer = new RelationIdMetadataToAttributeTransformer(this.expressionMap);\n relationIdMetadataTransformer.transform();\n relationCountMetadataTransformer = new RelationCountMetadataToAttributeTransformer(this.expressionMap);\n relationCountMetadataTransformer.transform();\n rawResults = [], entities = [];\n if (!((this.expressionMap.skip || this.expressionMap.take) && this.expressionMap.joinAttributes.length > 0)) return [3 /*break*/, 4];\n _a = __read(this.createOrderByCombinedWithSelectExpression(\"distinctAlias\"), 2), selects = _a[0], orderBys_1 = _a[1];\n metadata_1 = this.expressionMap.mainAlias.metadata;\n mainAliasName_1 = this.expressionMap.mainAlias.name;\n querySelects = metadata_1.primaryColumns.map(function (primaryColumn) {\n var distinctAlias = _this.escape(\"distinctAlias\");\n var columnAlias = _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, mainAliasName_1, primaryColumn.databaseName));\n if (!orderBys_1[columnAlias]) // make sure we aren't overriding user-defined order in inverse direction\n orderBys_1[columnAlias] = \"ASC\";\n var alias = DriverUtils.buildColumnAlias(_this.connection.driver, \"ids_\" + mainAliasName_1, primaryColumn.databaseName);\n return distinctAlias + \".\" + columnAlias + \" as \\\"\" + alias + \"\\\"\";\n });\n return [4 /*yield*/, new SelectQueryBuilder(this.connection, queryRunner)\n .select(\"DISTINCT \" + querySelects.join(\", \"))\n .addSelect(selects)\n .from(\"(\" + this.clone().orderBy().getQuery() + \")\", \"distinctAlias\")\n .offset(this.expressionMap.skip)\n .limit(this.expressionMap.take)\n .orderBy(orderBys_1)\n .cache(this.expressionMap.cache ? this.expressionMap.cache : this.expressionMap.cacheId, this.expressionMap.cacheDuration)\n .setParameters(this.getParameters())\n .setNativeParameters(this.expressionMap.nativeParameters)\n .getRawMany()];\n case 1:\n rawResults = _b.sent();\n if (!(rawResults.length > 0)) return [3 /*break*/, 3];\n condition = \"\";\n parameters_1 = {};\n if (metadata_1.hasMultiplePrimaryKeys) {\n condition = rawResults.map(function (result, index) {\n return metadata_1.primaryColumns.map(function (primaryColumn) {\n var paramKey = \"orm_distinct_ids_\" + index + \"_\" + primaryColumn.databaseName;\n parameters_1[paramKey] = result[\"ids_\" + mainAliasName_1 + \"_\" + primaryColumn.databaseName];\n return mainAliasName_1 + \".\" + primaryColumn.propertyPath + \"=:\" + paramKey;\n }).join(\" AND \");\n }).join(\" OR \");\n }\n else {\n alias_1 = DriverUtils.buildColumnAlias(this.connection.driver, \"ids_\" + mainAliasName_1, metadata_1.primaryColumns[0].databaseName);\n ids = rawResults.map(function (result) { return result[alias_1]; });\n areAllNumbers = ids.every(function (id) { return typeof id === \"number\"; });\n if (areAllNumbers) {\n // fixes #190. if all numbers then its safe to perform query without parameter\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (\" + ids.join(\", \") + \")\";\n }\n else {\n parameters_1[\"orm_distinct_ids\"] = ids;\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (:...orm_distinct_ids)\";\n }\n }\n return [4 /*yield*/, this.clone()\n .mergeExpressionMap({ extraAppendedAndWhereCondition: condition })\n .setParameters(parameters_1)\n .loadRawResults(queryRunner)];\n case 2:\n rawResults = _b.sent();\n _b.label = 3;\n case 3: return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 5:\n rawResults = _b.sent();\n _b.label = 6;\n case 6:\n if (!(rawResults.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, relationIdLoader.load(rawResults)];\n case 7:\n rawRelationIdResults = _b.sent();\n return [4 /*yield*/, relationCountLoader.load(rawResults)];\n case 8:\n rawRelationCountResults = _b.sent();\n transformer = new RawSqlResultsToEntityTransformer(this.expressionMap, this.connection.driver, rawRelationIdResults, rawRelationCountResults, this.queryRunner);\n entities = transformer.transform(rawResults, this.expressionMap.mainAlias);\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastLoadEventsForAll(broadcastResult, this.expressionMap.mainAlias.metadata, entities);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, {\n raw: rawResults,\n entities: entities,\n }];\n }\n });\n });\n };\n SelectQueryBuilder.prototype.createOrderByCombinedWithSelectExpression = function (parentAlias) {\n var _this = this;\n // if table has a default order then apply it\n var orderBys = this.expressionMap.allOrderBys;\n var selectString = Object.keys(orderBys)\n .map(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n return _this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName));\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; }))\n return _this.escape(parentAlias) + \".\" + orderCriteria;\n return \"\";\n }\n })\n .join(\", \");\n var orderByObject = {};\n Object.keys(orderBys).forEach(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n orderByObject[_this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName))] = orderBys[orderCriteria];\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; })) {\n orderByObject[_this.escape(parentAlias) + \".\" + orderCriteria] = orderBys[orderCriteria];\n }\n else {\n orderByObject[orderCriteria] = orderBys[orderCriteria];\n }\n }\n });\n return [selectString, orderByObject];\n };\n /**\n * Loads raw results from the database.\n */\n SelectQueryBuilder.prototype.loadRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryId, cacheOptions, savedQueryResultCacheOptions, results;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryId = sql + \" -- PARAMETERS: \" + JSON.stringify(parameters);\n cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n savedQueryResultCacheOptions = undefined;\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.queryResultCache.getFromCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000\n }, queryRunner)];\n case 1:\n savedQueryResultCacheOptions = _b.sent();\n if (savedQueryResultCacheOptions && !this.connection.queryResultCache.isExpired(savedQueryResultCacheOptions))\n return [2 /*return*/, JSON.parse(savedQueryResultCacheOptions.result)];\n _b.label = 2;\n case 2: return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 3:\n results = _b.sent();\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 5];\n return [4 /*yield*/, this.connection.queryResultCache.storeInCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n time: new Date().getTime(),\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000,\n result: JSON.stringify(results)\n }, savedQueryResultCacheOptions, queryRunner)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n }\n });\n });\n };\n /**\n * Merges into expression map given expression map properties.\n */\n SelectQueryBuilder.prototype.mergeExpressionMap = function (expressionMap) {\n ObjectUtils.assign(this.expressionMap, expressionMap);\n return this;\n };\n /**\n * Normalizes a give number - converts to int if possible.\n */\n SelectQueryBuilder.prototype.normalizeNumber = function (num) {\n if (typeof num === \"number\" || num === undefined || num === null)\n return num;\n return Number(num);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n SelectQueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner(\"slave\");\n };\n return SelectQueryBuilder;\n}(QueryBuilder));\nexport { SelectQueryBuilder };\n\n//# sourceMappingURL=SelectQueryBuilder.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\n/**\n * Stores all join relation id attributes which will be used to build a JOIN query.\n */\nvar RelationIdAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdAttribute(queryExpressionMap, relationIdAttribute) {\n this.queryExpressionMap = queryExpressionMap;\n /**\n * Indicates if relation id should NOT be loaded as id map.\n */\n this.disableMixedMap = false;\n ObjectUtils.assign(this, relationIdAttribute || {});\n }\n Object.defineProperty(RelationIdAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(0, this.relationName.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(this.relationName.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n var relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + this.relationPropertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rid\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionMetadata\", {\n /**\n * Metadata of the joined entity.\n * If extra condition without entity was joined, then it will return undefined.\n */\n get: function () {\n return this.relation.junctionEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n return this.mapToProperty.substr(0, this.mapToProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyPropertyPath\", {\n get: function () {\n return this.mapToProperty.substr(this.mapToProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n return RelationIdAttribute;\n}());\nexport { RelationIdAttribute };\n\n//# sourceMappingURL=RelationIdAttribute.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\nvar RelationCountAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountAttribute(expressionMap, relationCountAttribute) {\n this.expressionMap = expressionMap;\n ObjectUtils.assign(this, relationCountAttribute || {});\n }\n Object.defineProperty(RelationCountAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relationProperty\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n return this.relationName.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"junctionAlias\", {\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rc\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], propertyPath = _a[1];\n var relationOwnerSelection = this.expressionMap.findAliasByName(parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + propertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var parentAlias = this.relationName.split(\".\")[0];\n var selection = this.expressionMap.findAliasByName(parentAlias);\n return selection.metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return RelationCountAttribute;\n}());\nexport { RelationCountAttribute };\n\n//# sourceMappingURL=RelationCountAttribute.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Updates entity with returning results in the entity insert and update operations.\n */\nvar ReturningResultsEntityUpdator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReturningResultsEntityUpdator(queryRunner, expressionMap) {\n this.queryRunner = queryRunner;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates entities with a special columns after updation query execution.\n */\n ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return __awaiter(_this, void 0, void 0, function () {\n var result, returningColumns, updationColumns, entityId, loadedReturningColumns;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 /*break*/, 1];\n if (this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(updateResult.raw) && this.expressionMap.extraReturningColumns.length > 0) {\n updateResult.raw = updateResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n result = Array.isArray(updateResult.raw) ? updateResult.raw[entityIndex] : updateResult.raw;\n returningColumns = this.queryRunner.connection.driver.createGeneratedMap(metadata, result);\n if (returningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, returningColumns);\n updateResult.generatedMaps.push(returningColumns);\n }\n return [3 /*break*/, 3];\n case 1:\n updationColumns = this.getUpdationReturningColumns();\n if (!(updationColumns.length > 0)) return [3 /*break*/, 3];\n entityId = this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(this.getUpdationReturningColumns().map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityId)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getOne()];\n case 2:\n loadedReturningColumns = _a.sent();\n if (loadedReturningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, loadedReturningColumns);\n updateResult.generatedMaps.push(loadedReturningColumns);\n }\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates entities with a special columns after insertion query execution.\n */\n ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, insertionColumns, generatedMaps, entityIds, returningResult_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n insertionColumns = this.getInsertionReturningColumns();\n generatedMaps = entities.map(function (entity, entityIndex) {\n if (_this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(insertResult.raw) && _this.expressionMap.extraReturningColumns.length > 0) {\n insertResult.raw = insertResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n // get all values generated by a database for us\n var result = Array.isArray(insertResult.raw) ? insertResult.raw[entityIndex] : insertResult.raw;\n var generatedMap = _this.queryRunner.connection.driver.createGeneratedMap(metadata, result, entityIndex, entities.length) || {};\n // if database does not support uuid generation we need to get uuid values\n // generated by orm and set them to the generatedMap\n if (_this.queryRunner.connection.driver.isUUIDGenerationSupported() === false) {\n metadata.generatedColumns.forEach(function (generatedColumn) {\n if (generatedColumn.generationStrategy === \"uuid\") {\n // uuid can be defined by user in a model, that's why first we get it\n var uuid = generatedColumn.getEntityValue(entity);\n if (!uuid) // if it was not defined by a user then InsertQueryBuilder generates it by its own, get this generated uuid value\n uuid = _this.expressionMap.nativeParameters[\"uuid_\" + generatedColumn.databaseName + entityIndex];\n OrmUtils.mergeDeep(generatedMap, generatedColumn.createValueMap(uuid));\n }\n });\n }\n _this.queryRunner.manager.merge(metadata.target, entity, generatedMap); // todo: this should not be here, but problem with below line\n return generatedMap;\n });\n if (!(this.queryRunner.connection.driver.isReturningSqlSupported() === false && insertionColumns.length > 0)) return [3 /*break*/, 2];\n entityIds = entities.map(function (entity) {\n var entityId = metadata.getEntityIdMap(entity);\n // We have to check for an empty `entityId` - if we don't, the query against the database\n // effectively drops the `where` clause entirely and the first record will be returned -\n // not what we want at all.\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return entityId;\n });\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(insertionColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityIds)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getMany()];\n case 1:\n returningResult_1 = _a.sent();\n entities.forEach(function (entity, entityIndex) {\n _this.queryRunner.manager.merge(metadata.target, generatedMaps[entityIndex], returningResult_1[entityIndex]);\n });\n _a.label = 2;\n case 2:\n entities.forEach(function (entity, entityIndex) {\n var entityId = metadata.getEntityIdMap(entity);\n insertResult.identifiers.push(entityId);\n insertResult.generatedMaps.push(generatedMaps[entityIndex]);\n _this.queryRunner.manager.merge(_this.expressionMap.mainAlias.metadata.target, entity, generatedMaps[entityIndex], generatedMaps[entityIndex]); // todo: why twice?!\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Columns we need to be returned from the database when we insert entity.\n */\n ReturningResultsEntityUpdator.prototype.getInsertionReturningColumns = function () {\n // for databases which support returning statement we need to return extra columns like id\n // for other databases we don't need to return id column since its returned by a driver already\n var needToCheckGenerated = this.queryRunner.connection.driver.isReturningSqlSupported();\n // filter out the columns of which we need database inserted values to update our entity\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.default !== undefined ||\n (needToCheckGenerated && column.isGenerated) ||\n column.isCreateDate ||\n column.isUpdateDate ||\n column.isDeleteDate ||\n column.isVersion;\n });\n };\n /**\n * Columns we need to be returned from the database when we update entity.\n */\n ReturningResultsEntityUpdator.prototype.getUpdationReturningColumns = function () {\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.isUpdateDate || column.isVersion;\n });\n };\n return ReturningResultsEntityUpdator;\n}());\nexport { ReturningResultsEntityUpdator };\n\n//# sourceMappingURL=ReturningResultsEntityUpdator.js.map\n","var TableUtils = /** @class */ (function () {\n function TableUtils() {\n }\n TableUtils.createTableColumnOptions = function (columnMetadata, driver) {\n return {\n name: columnMetadata.databaseName,\n length: columnMetadata.length,\n width: columnMetadata.width,\n charset: columnMetadata.charset,\n collation: columnMetadata.collation,\n precision: columnMetadata.precision,\n scale: columnMetadata.scale,\n zerofill: columnMetadata.zerofill,\n unsigned: columnMetadata.unsigned,\n asExpression: columnMetadata.asExpression,\n generatedType: columnMetadata.generatedType,\n default: driver.normalizeDefault(columnMetadata),\n onUpdate: columnMetadata.onUpdate,\n comment: columnMetadata.comment,\n isGenerated: columnMetadata.isGenerated,\n generationStrategy: columnMetadata.generationStrategy,\n isNullable: columnMetadata.isNullable,\n type: driver.normalizeType(columnMetadata),\n isPrimary: columnMetadata.isPrimary,\n isUnique: driver.normalizeIsUnique(columnMetadata),\n isArray: columnMetadata.isArray || false,\n enum: columnMetadata.enum ? columnMetadata.enum.map(function (val) { return val + \"\"; }) : columnMetadata.enum,\n enumName: columnMetadata.enumName,\n spatialFeatureType: columnMetadata.spatialFeatureType,\n srid: columnMetadata.srid\n };\n };\n return TableUtils;\n}());\nexport { TableUtils };\n\n//# sourceMappingURL=TableUtils.js.map\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSite = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"../Site/LoginSite\");\nconst NotAllowedSite_1 = require(\"../Site/NotAllowedSite\");\nclass UserSite extends client_1.DelegateSite {\n constructor(site, access, allowOfflineAccess) {\n super(site);\n this._access = access;\n this._allowOfflineAccess = shared_1.Helper.nonNull(allowOfflineAccess, false);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().waitForGetMe();\n if (yield this._checkRights()) {\n let res = yield _super.onConstruct.call(this, constructParameters);\n UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => __awaiter(this, void 0, void 0, function* () {\n yield this._checkRights();\n }), false);\n return res;\n }\n });\n }\n _checkRights() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(UserManager_1.UserManager.getInstance().hasAccess(this._access) || (this._allowOfflineAccess && (yield UserManager_1.UserManager.getInstance().hasOfflineAccess(this._access))))) {\n // if (this.isShowing() && !this.isDestroying()) {\n // await this.startSite(NotAllowedSite);\n // }\n if (UserManager_1.UserManager.getInstance().isOnline() && !UserManager_1.UserManager.getInstance().isLoggedIn() && !(this._site instanceof LoginSite_1.LoginSite)) {\n this.startSite(LoginSite_1.LoginSite, {\n deepLink: this._site._siteManager.getDeepLinkFor(this._site),\n args: this._site.getParameters()\n });\n }\n else if (this._site._siteManager.getCurrentSite() === this._site && !this.isDestroying()) {\n new client_1.Toast(\"wrong rights\").show();\n yield this.startSite(NotAllowedSite_1.NotAllowedSite);\n }\n if (!this.isDestroying()) {\n yield this.finish();\n }\n return false;\n }\n return true;\n });\n }\n onStart(args) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield this._checkRights()) {\n yield _super.onStart.call(this, args);\n }\n });\n }\n}\nexports.UserSite = UserSite;\n//# sourceMappingURL=UserSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Translator\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncClientDb = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst ClientModel_1 = require(\"./ClientModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst ClientPartialModel_1 = require(\"./ClientPartialModel\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass EasySyncClientDb extends cordova_sites_database_1.BaseDatabase {\n constructor(dbName) {\n super(dbName || \"EasySync\");\n }\n _createConnectionOptions(database) {\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel, ClientModel_1.ClientModel);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel, ClientPartialModel_1.ClientPartialModel);\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel.prototype, ClientModel_1.ClientModel.prototype);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel.prototype, ClientPartialModel_1.ClientPartialModel.prototype);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium, ClientFileMedium_1.ClientFileMedium);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium.prototype, ClientFileMedium_1.ClientFileMedium.prototype);\n let options = super._createConnectionOptions(database);\n options[\"migrationsTableName\"] = \"migrations\";\n return options;\n }\n}\nexports.EasySyncClientDb = EasySyncClientDb;\nEasySyncClientDb.BASE_MODEL = null;\nclient_1.App.addInitialization(() => __awaiter(void 0, void 0, void 0, function* () {\n yield EasySyncClientDb.getInstance()._connectionPromise.catch(function (e) {\n if (typeof EasySyncClientDb.errorListener === \"function\") {\n return EasySyncClientDb.errorListener(...arguments);\n }\n else {\n throw (e);\n }\n });\n}));\n//# sourceMappingURL=EasySyncClientDb.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LastSyncDates = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass LastSyncDates extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this.model = \"\";\n this.lastSynced = 0;\n this.where = {};\n }\n getModel() {\n return this.model;\n }\n setModel(model) {\n this.model = model;\n }\n getLastSynced() {\n return this.lastSynced;\n }\n setLastSynced(lastSynced) {\n this.lastSynced = lastSynced;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"model\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, nullable: true };\n columns[\"lastSynced\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER, nullable: true };\n columns[\"where\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON };\n return columns;\n }\n}\nexports.LastSyncDates = LastSyncDates;\nLastSyncDates.SCHEMA_NAME = \"easy-sync-last-sync-dates\";\ncordova_sites_database_1.BaseDatabase.addModel(LastSyncDates);\n//# sourceMappingURL=LastSyncDates.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when a version check on an object that uses optimistic locking through a version field fails.\n */\nvar OptimisticLockVersionMismatchError = /** @class */ (function (_super) {\n __extends(OptimisticLockVersionMismatchError, _super);\n function OptimisticLockVersionMismatchError(entity, expectedVersion, actualVersion) {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockVersionMismatchError\";\n Object.setPrototypeOf(_this, OptimisticLockVersionMismatchError.prototype);\n _this.message = \"The optimistic lock on entity \" + entity + \" failed, version \" + expectedVersion + \" was expected, but is actually \" + actualVersion + \".\";\n return _this;\n }\n return OptimisticLockVersionMismatchError;\n}(Error));\nexport { OptimisticLockVersionMismatchError };\n\n//# sourceMappingURL=OptimisticLockVersionMismatchError.js.map\n","/**\n * Result object returned by InsertQueryBuilder execution.\n */\nvar InsertResult = /** @class */ (function () {\n function InsertResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n this.identifiers = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return InsertResult;\n}());\nexport { InsertResult };\n\n//# sourceMappingURL=InsertResult.js.map\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$
') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractSite = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Basisklasse für eine Seite\n */\nclass AbstractSite extends Context_1.Context {\n /**\n * Construktor für eine Seite, sollte überladen werden und view sollte definiert werden. Seitenkonstruktoren bekommen NUR den siteManager übergebn\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(view);\n this._isDestroying = false;\n this._isDestroying = false;\n //Promise und Resolver, welches erfüllt wird, wenn Seite beendet wird\n this._finishPromiseResolver = {\n resolve: null,\n reject: null\n };\n this._finishPromise = new Promise((resolve, reject) => {\n this._finishPromiseResolver = { resolve: resolve, reject: reject };\n });\n //Promise, welches erfüllt wird, wenn onConstruct-Promsise erfüllt wurde. Wird für onDestroy gebraucht\n this._onConstructPromise = null;\n this._parameters = {};\n this._result = null;\n this._siteManager = siteManager;\n this._title = {\n element: null,\n text: null\n };\n this._loadingSymbol = null;\n //Wird zum speichern der zugehörigen HistoryID genutzt\n this._historyId = null;\n }\n getTitle() {\n return this._title;\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n this.setParameters(Helper_1.Helper.nonNull(constructParameters, {}));\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_CONSTRUCT, {\n site: this, params: constructParameters\n });\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n this._updateTitle();\n this.updateUrl(this._parameters);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_START, {\n site: this, params: pauseArguments\n });\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_VIEW_LOADED, {\n site: this\n });\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_PAUSE, {\n site: this\n });\n return res;\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onDestroy.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_DESTROY, {\n site: this\n });\n return res;\n });\n }\n /**\n * Setzt den Titel der Website\n *\n * @param titleElement\n * @param title\n */\n setTitle(titleElement, title) {\n if (typeof titleElement === \"string\") {\n let args = title;\n title = titleElement;\n titleElement = Translator_1.Translator.makePersistentTranslation(title, args);\n }\n title = Helper_1.Helper.nonNull(title, titleElement.textContent);\n this._title = {\n element: titleElement,\n text: title\n };\n this._updateTitle();\n }\n setParameter(name, value) {\n this._parameters[name] = value;\n this.updateUrl(this._parameters);\n }\n setParameters(parameters) {\n this._parameters = parameters;\n this.updateUrl(this._parameters);\n }\n getParameters() {\n return this._parameters;\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._loadingSymbol)) {\n this._loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n let view = yield this.getViewPromise();\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n view.appendChild(this._loadingSymbol);\n }\n }\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n this._loadingSymbol.remove();\n this._loadingSymbol = null;\n }\n });\n }\n onBeforeUnload(e) {\n return null;\n }\n /**\n * Updatet den Title der Webseite\n * @protected\n */\n _updateTitle() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateTitle(this._title.text);\n }\n }\n updateUrl(args) {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateUrl(this, args);\n }\n }\n /**\n * Startet eine andere Seite mit den angegebenen Parametern\n *\n * @param site\n * @param args\n * @returns {*|Promise<*>}\n */\n startSite(site, args) {\n return this._siteManager.startSite(site, args);\n }\n /**\n * Alias für\n * this.startSite(...);\n * this.finish(...);\n *\n * @param site\n * @param args\n * @param result\n * @returns {*|Promise<*>}\n */\n finishAndStartSite(site, args, result) {\n let res = this.startSite(site, args);\n this.finish(result);\n return res;\n }\n /**\n * Beendet die aktuelle Seite. Kann ein Ergebnis setzen\n *\n * @param result\n */\n finish(result) {\n if (!(this._isDestroying || this._state === Context_1.Context.STATE_DESTROYED)) {\n this._isDestroying = true;\n if (Helper_1.Helper.isNotNull(result)) {\n this.setResult(result);\n }\n return this._siteManager.endSite(this);\n }\n }\n goBack() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.goBack();\n }\n }\n /**\n * Wird aufgerufen, falls zurück gedrückt wird. Gib false zurück, um das beenden der Seite zu verhindern\n */\n onBackPressed() {\n }\n /**\n * TODO Einbauen\n */\n onMenuPressed() {\n }\n /**\n * TODO Einbauen\n */\n onSearchPressed() {\n }\n /**\n * Gibt das FinishPromise zurück\n * @returns {Promise}\n */\n getFinishPromise() {\n return this._finishPromise;\n }\n /**\n * Setzt das Resultat. Letztes Setzen gilt\n * @param result\n */\n setResult(result) {\n this._result = result;\n }\n /**\n * Gibt den FinishResolver zurück. Genutzt, um FinishPromise zu resolven order rejecten\n * @returns {*}\n */\n getFinishResolver() {\n return this._finishPromiseResolver;\n }\n addEventListener(siteEvent, listener) {\n return EventManager_1.EventManager.getInstance().addListener(siteEvent, data => {\n if (data.site && data.site instanceof this.constructor) {\n listener(data);\n }\n });\n }\n isDestroying() {\n return this._isDestroying;\n }\n}\nexports.AbstractSite = AbstractSite;\nAbstractSite.EVENT = {\n ON_CONSTRUCT: \"abstract-site-on-construct\",\n ON_VIEW_LOADED: \"abstract-site-on-view-loaded\",\n ON_START: \"abstract-site-on-start\",\n ON_PAUSE: \"abstract-site-on-pause\",\n ON_DESTROY: \"abstract-site-on-destroy\"\n};\n//# sourceMappingURL=AbstractSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/Dragger/DragHelper\"), exports);\n__exportStar(require(\"./client/Dragger/DraggedElement\"), exports);\n__exportStar(require(\"./client/HotkeyManager\"), exports);\n__exportStar(require(\"./client/InputSelect\"), exports);\n__exportStar(require(\"./client/ViewHelper\"), exports);\n//# sourceMappingURL=client.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _typeorm = require(\"typeorm\");\nlet typeorm = _typeorm;\nclass BaseDatabase {\n constructor(database) {\n let options = this._createConnectionOptions(database);\n this._connectionPromise = this._createConnection(options);\n }\n _createConnection(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options.type === \"sqljs\") {\n //wait for SQL to be initialized\n window[\"SQL\"] = yield window[\"initSqlJs\"]();\n }\n return typeorm.createConnection(options).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n });\n }\n _createConnectionOptions(database) {\n let options = BaseDatabase.CONNECTION_OPTIONS;\n if (typeof device === \"undefined\" || device.platform !== \"browser\") {\n options.type = \"cordova\";\n options.database = database;\n }\n else {\n let saveTimeout = null;\n options.type = \"sqljs\";\n options.location = database;\n options.autoSave = true;\n options.useLocalForage = true;\n //Deactivated delay of saving since PRAGMA foreign_keys = ON is not saved with delay (why ever!)\n // options.autoSaveCallback = function () {\n // clearTimeout(saveTimeout);\n // saveTimeout = setTimeout(() => {\n // typeorm.getSqljsManager().saveDatabase();\n // }, 150);\n // }\n }\n options.entities = this.getEntityDefinitions();\n // options.migrations = this.constructor._migrations;\n return options;\n }\n getEntityDefinitions() {\n let entities = [];\n Object.keys(BaseDatabase._models).forEach(modelName => {\n BaseDatabase._models[modelName]._database = this;\n entities.push(new typeorm.EntitySchema(BaseDatabase._models[modelName].getSchemaDefinition()));\n });\n // console.log(\"entities\", entities);\n return entities;\n }\n saveEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = null;\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n repository = yield this._getRepository(entity[0].constructor);\n }\n else {\n repository = yield this._getRepository(entity.constructor);\n }\n return repository.save(entity);\n });\n }\n static _buildQuery(where, order, limit, offset, relations) {\n let query = {};\n if (where) {\n query[\"where\"] = where;\n }\n if (order) {\n query[\"order\"] = order;\n }\n if (limit) {\n query[\"take\"] = limit;\n }\n if (offset) {\n query[\"skip\"] = offset;\n }\n if (relations) {\n query[\"relations\"] = relations;\n }\n return query;\n }\n static _setLoaded(models) {\n return __awaiter(this, void 0, void 0, function* () {\n models = yield models;\n if (models === null || models === undefined) {\n return null;\n }\n let isArray = Array.isArray(models);\n if (!isArray) {\n models = [models];\n }\n models.forEach(models => models.setLoaded(true));\n return (isArray) ? models : models[0];\n });\n }\n findEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.find(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findAndCountEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findAndCount(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findOneEntity(model, where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(BaseDatabase._buildQuery(where, order, undefined, offset, relations)));\n });\n }\n findById(model, id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(id, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n findByIds(model, ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findByIds(ids, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n clearModel(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return repository.clear();\n });\n }\n _getRepository(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.getRepository(model);\n });\n }\n createQueryBuilder(model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (model) {\n let repo = yield this._getRepository(model);\n return repo.createQueryBuilder(model.getSchemaName());\n }\n else {\n let connection = yield this._connectionPromise;\n return connection.createQueryBuilder();\n }\n });\n }\n createQueryRunner() {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.createQueryRunner();\n });\n }\n deleteEntity(entity, model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n if (!model) {\n model = entity[0].constructor;\n }\n if (typeof entity[0] !== \"number\") {\n let ids = [];\n entity.forEach(ent => ids.push(ent.id));\n entity = ids;\n }\n }\n else {\n if (!model) {\n model = entity.constructor;\n }\n if (typeof entity !== \"number\") {\n entity = entity.id;\n }\n }\n let repository = yield this._getRepository(model);\n return repository.delete(entity);\n });\n }\n rawQuery(sql, params) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this._connectionPromise).query(sql, params);\n });\n }\n waitForConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._connectionPromise;\n });\n }\n /**\n * @return {BaseDatabase}\n */\n static getInstance() {\n if (!this.instance) {\n this.instance = new this();\n }\n return this.instance;\n }\n static addModel(model) {\n BaseDatabase._models[model.getSchemaName()] = model;\n }\n static getModel(modelName) {\n if (modelName) {\n return this._models[modelName];\n }\n else {\n return this._models;\n }\n }\n}\nexports.BaseDatabase = BaseDatabase;\nBaseDatabase._models = {};\nBaseDatabase.CONNECTION_OPTIONS = {\n location: \"default\",\n // autoSave: true,\n logging: [\"error\", \"warn\"],\n synchronize: true,\n};\nBaseDatabase.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\",\n};\n//# sourceMappingURL=BaseDatabase.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LoginSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/loginSite.html\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst ForgotPasswordSite_1 = require(\"./ForgotPasswordSite\");\nclass LoginSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#login-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n // await this.showLoadingSymbol();\n if (yield UserManager_1.UserManager.getInstance().login(data[\"email\"], data[\"password\"], client_1.Helper.isNotNull(data[\"saveLogin\"]))) {\n new client_1.Toast(\"welcome back\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email or password is wrong\"\n });\n // await this.removeLoadingSymbol();\n }\n }));\n let listener = () => form.clearErrors();\n this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#forgot-pw\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.startSite(ForgotPasswordSite_1.ForgotPasswordSite);\n }));\n return res;\n });\n }\n}\nexports.LoginSite = LoginSite;\nLoginSite.ACCESS = \"loggedOut\";\nLoginSite.LOGOUT_ACCESS = \"loggedIn\";\nLoginSite.ADD_LOGIN_ACTION = true;\nLoginSite.ADD_LOGOUT_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (LoginSite.ADD_LOGIN_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"login\", LoginSite.ACCESS, LoginSite));\n }\n if (LoginSite.ADD_LOGOUT_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"logout\", LoginSite.LOGOUT_ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().logout();\n })));\n }\n app.addDeepLink(\"login\", LoginSite);\n});\n//# sourceMappingURL=LoginSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserMenuAction = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass UserMenuAction extends client_1.MenuAction {\n constructor(name, access, action, showFor, order, icon) {\n super(name, action, showFor, order, icon);\n this._access = access;\n this._loginChangedCallbackId = UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => {\n this.redraw();\n });\n }\n isVisible() {\n return (super.isVisible() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n isActivated() {\n return (super.isActivated() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new UserMenuAction());\n copiedAction._access = this._access;\n return super.copy(copiedAction);\n }\n}\nexports.UserMenuAction = UserMenuAction;\n//# sourceMappingURL=UserMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientFileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst FileTransferPromise_1 = require(\"./FileWriter/FileTransferPromise\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FileWriter/FilePromise\");\nclass ClientFileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n setLoaded(isLoaded) {\n // @ts-ignore\n super.setLoaded(isLoaded);\n this._isDownloaded = true;\n FilePromise_1.FilePromise.open(this.src, { create: false }).then(() => this._isDownloaded = true).catch(e => {\n console.log(\"not downloaded, yet!\");\n this._isDownloaded = false;\n ClientFileMedium._handleImages(this);\n });\n }\n save() {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(this);\n return _super.save.call(this);\n });\n }\n static saveMany(entities) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(entities);\n return _super.saveMany.call(this, entities);\n });\n }\n static _handleImages(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n let isArray = Array.isArray(entities);\n if (!isArray) {\n entities = [entities];\n }\n yield Helper_1.Helper.asyncForEach(entities, (entity) => __awaiter(this, void 0, void 0, function* () {\n if (entity.saveOffline && device.platform !== \"browser\" && !entity.src.startsWith(\"data\") && !entity.src.startsWith(\"http\") && !entity.src.startsWith(\"//\")) {\n yield new FileTransferPromise_1.FileTransferPromise(entity.getServerUrl(false), entity.src).download().catch(e => console.log(e));\n entity._isDownloaded = true;\n }\n }), true);\n });\n }\n}\nexports.ClientFileMedium = ClientFileMedium;\n//# sourceMappingURL=ClientFileMedium.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to create entity id map from the mixed id value,\n * but id value is a single value when entity requires multiple values.\n */\nvar CannotCreateEntityIdMapError = /** @class */ (function (_super) {\n __extends(CannotCreateEntityIdMapError, _super);\n function CannotCreateEntityIdMapError(metadata, id) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotCreateEntityIdMapError\";\n Object.setPrototypeOf(_this, CannotCreateEntityIdMapError.prototype);\n var objectExample = metadata.primaryColumns.reduce(function (object, column, index) {\n column.setEntityValue(object, index + 1);\n return object;\n }, {});\n _this.message = \"Cannot use given entity id \\\"\" + id + \"\\\" because \\\"\" + metadata.targetName + \"\\\" contains multiple primary columns, you must provide object in following form: \" + JSON.stringify(objectExample) + \" as an id.\";\n return _this;\n }\n return CannotCreateEntityIdMapError;\n}(Error));\nexport { CannotCreateEntityIdMapError };\n\n//# sourceMappingURL=CannotCreateEntityIdMapError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when a transaction is required for the current operation, but there is none open.\n */\nvar PessimisticLockTransactionRequiredError = /** @class */ (function (_super) {\n __extends(PessimisticLockTransactionRequiredError, _super);\n function PessimisticLockTransactionRequiredError() {\n var _this = _super.call(this) || this;\n _this.name = \"PessimisticLockTransactionRequiredError\";\n Object.setPrototypeOf(_this, PessimisticLockTransactionRequiredError.prototype);\n _this.message = \"An open transaction is required for pessimistic lock.\";\n return _this;\n }\n return PessimisticLockTransactionRequiredError;\n}(Error));\nexport { PessimisticLockTransactionRequiredError };\n\n//# sourceMappingURL=PessimisticLockTransactionRequiredError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an entity does not have no version and no update date column.\n */\nvar NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) {\n __extends(NoVersionOrUpdateDateColumnError, _super);\n function NoVersionOrUpdateDateColumnError(entity) {\n var _this = _super.call(this) || this;\n _this.name = \"NoVersionOrUpdateDateColumnError\";\n Object.setPrototypeOf(_this, NoVersionOrUpdateDateColumnError.prototype);\n _this.message = \"Entity \" + entity + \" does not have version or update date columns.\";\n return _this;\n }\n return NoVersionOrUpdateDateColumnError;\n}(Error));\nexport { NoVersionOrUpdateDateColumnError };\n\n//# sourceMappingURL=NoVersionOrUpdateDateColumnError.js.map\n","/**\n * Syntax sugar.\n * Allows to use brackets in WHERE expressions for better syntax.\n */\nvar Brackets = /** @class */ (function () {\n /**\n * Given WHERE query builder that will build a WHERE expression that will be taken into brackets.\n */\n function Brackets(whereFactory) {\n this.whereFactory = whereFactory;\n }\n return Brackets;\n}());\nexport { Brackets };\n\n//# sourceMappingURL=Brackets.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: In([...]) }\n */\nexport function In(value) {\n return new FindOperator(\"in\", value, true, true);\n}\n\n//# sourceMappingURL=In.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to insert using QueryBuilder but do not specify what to insert.\n */\nvar InsertValuesMissingError = /** @class */ (function (_super) {\n __extends(InsertValuesMissingError, _super);\n function InsertValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"InsertValuesMissingError\";\n Object.setPrototypeOf(_this, InsertValuesMissingError.prototype);\n _this.message = \"Cannot perform insert query because values are not defined. Call \\\"qb.values(...)\\\" method to specify inserted values.\";\n return _this;\n }\n return InsertValuesMissingError;\n}(Error));\nexport { InsertValuesMissingError };\n\n//# sourceMappingURL=InsertValuesMissingError.js.map\n","/**\n * Result object returned by DeleteQueryBuilder execution.\n */\nvar DeleteResult = /** @class */ (function () {\n function DeleteResult() {\n }\n return DeleteResult;\n}());\nexport { DeleteResult };\n\n//# sourceMappingURL=DeleteResult.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingDeleteDateColumnError = /** @class */ (function (_super) {\n __extends(MissingDeleteDateColumnError, _super);\n function MissingDeleteDateColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDeleteDateColumnError\";\n Object.setPrototypeOf(_this, MissingDeleteDateColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have delete date columns.\";\n return _this;\n }\n return MissingDeleteDateColumnError;\n}(Error));\nexport { MissingDeleteDateColumnError };\n\n//# sourceMappingURL=MissingDeleteDateColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build SELECT query using OFFSET without LIMIT applied but database does not support it.\n*/\nvar OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) {\n __extends(OffsetWithoutLimitNotSupportedError, _super);\n function OffsetWithoutLimitNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OffsetWithoutLimitNotSupportedError\";\n Object.setPrototypeOf(_this, OffsetWithoutLimitNotSupportedError.prototype);\n _this.message = \"RDBMS does not support OFFSET without LIMIT in SELECT statements. You must use limit in conjunction with offset function (or take in conjunction with skip function if you are using pagination).\";\n return _this;\n }\n return OffsetWithoutLimitNotSupportedError;\n}(Error));\nexport { OffsetWithoutLimitNotSupportedError };\n\n//# sourceMappingURL=OffsetWithoutLimitNotSupportedError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NavbarFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultViewNavbar = require(\"../../../html/siteTemplates/navbar.html\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Context_1 = require(\"../Context\");\nconst Menu_1 = require(\"./Menu\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\nconst DropdownRenderer_1 = require(\"./Renderer/DropdownRenderer\");\nconst AccordionRenderer_1 = require(\"./Renderer/AccordionRenderer\");\nconst ColorIndicator_1 = require(\"../../ColorIndicator/ColorIndicator\");\nconst App_1 = require(\"../../App\");\n/**\n * Fragment, welches ein Menü in der Navbar anzeigt und hinzufügt.\n *\n * Technisch gesehen wird das gleiche Menü zwei mal gerendert und hinzugefügt. Einmal das Menü in der Navbar, welches\n * immer sichtbar ist und einmal das versteckte Menü, welches durch einen Toggle-Button angezeigt werden kann.\n * Dabei hat jede MenuAction eine Sichtbarkeitsklasse. Anhand der Sichtbarkeitsklasse und der Bildschirmgröße wird\n * entweder das eine oder das andere Element sichtbar, jedoch niemals beide.\n */\nclass NavbarFragment extends AbstractFragment_1.AbstractFragment {\n /**\n * Erstellt das Fragment\n * @param site\n * @param {string|Node|null} viewNavbar\n */\n constructor(site, viewNavbar) {\n super(site, Helper_1.Helper.nonNull(viewNavbar, defaultViewNavbar));\n this._menu = null;\n this._responsiveMenu = null;\n this._backgroundImage = \"\";\n this._menuActions = [];\n NavbarFragment.defaultActions.forEach(action => {\n this._menuActions.push(action.copy());\n });\n this._scrollWidget = null;\n this._canGoBack = true;\n this._logo = App_1.App.getLogo();\n }\n setLogo(logo) {\n this._logo = logo;\n if (this._view) {\n if (Helper_1.Helper.isNotNull(this._logo)) {\n this.findBy(\".logo\").classList.remove(\"hidden\");\n this.findBy(\".logo-img\").src = this._logo;\n }\n else {\n this.findBy(\".logo\").classList.add(\"hidden\");\n }\n }\n }\n setCanGoBack(canGoBack) {\n this._canGoBack = canGoBack;\n if (this._view) {\n if (this._canGoBack) {\n this.findBy(\".back-button\").classList.remove(\"hidden\");\n }\n else {\n this.findBy(\".back-button\").classList.add(\"hidden\");\n }\n }\n }\n setScrollWidget(scrollWidget) {\n this._scrollWidget = scrollWidget;\n if (this._view && this._scrollWidget) {\n let nav = this.findBy(\".top-bar > span\");\n let background = this.findBy(\".background-img\");\n let listener = () => {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (nav.getBoundingClientRect().bottom >= background.getBoundingClientRect().bottom) {\n navbarElem.classList.add(\"solid\");\n }\n else {\n navbarElem.classList.remove(\"solid\");\n }\n };\n background.addEventListener(\"load\", listener);\n scrollWidget.addEventListener(\"scroll\", listener);\n requestAnimationFrame(listener);\n }\n }\n setBackgroundImage(backgroundImage) {\n this._backgroundImage = backgroundImage;\n if (this._view) {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (Helper_1.Helper.isNotNull(this._backgroundImage)) {\n let imgElem = this.findBy(\".background-img\");\n let colorIndicator = ColorIndicator_1.ColorIndicator.getInstance();\n // navbarElem.classList.add(\"color-black\");\n imgElem.addEventListener(\"load\", () => {\n if (this._backgroundImage !== \"\") {\n let color = (colorIndicator.getAverageImgColor(imgElem, undefined, 150));\n let textColor = colorIndicator.invertColorBW(color);\n if (textColor.r === 0 && textColor.g === 0 && textColor.b === 0) {\n navbarElem.classList.remove(\"color-white\");\n navbarElem.classList.add(\"color-black\");\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.add(\"color-white\");\n }\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.remove(\"color-white\");\n }\n });\n requestAnimationFrame(() => {\n let heightElement = navbarElem.querySelector(\".grid-container\");\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.borderBoxSize) {\n navbarElem.style = \"min-height:\" + entry.borderBoxSize[0].blockSize + \"px\";\n }\n else if (entry.contentRect) {\n navbarElem.style = \"min-height:\" + entry.contentRect.height + \"px\";\n }\n else {\n console.log(\"entry\", entry);\n }\n });\n });\n resizeObserver.observe(heightElement);\n }\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 500);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1000);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1500);\n });\n imgElem.src = this._backgroundImage;\n navbarElem.classList.add(\"with-image\");\n }\n else {\n navbarElem.classList.remove(\"with-image\");\n }\n }\n }\n /**\n * Wird aufgerufen, sobald die View geladen ist\n * @returns {Promise<*>}\n */\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.setTitleElement(document.createTextNode(NavbarFragment.title));\n //Erstelle die Renderers und das Menü\n let renderers = [];\n renderers.push(new DropdownRenderer_1.DropdownRenderer(this.findBy(\"#navbar-menu-visible\")));\n renderers.push(new AccordionRenderer_1.AccordionRenderer(this.findBy(\"#navbar-menu-hidden\")));\n this._menu = new Menu_1.Menu(renderers, this._menuActions);\n this._closeListenerContainer = this.findBy(\"#navbar-close-listener-container\");\n //Falls im visible-submenu eine Submenu-Action zu sehen ist\n this._menu.setOpenSubmenuListener(() => {\n this._showCloseListener();\n });\n //Falls ein Element im Menü angeklickt wird, sollte das Menü geschlossen werden,\n //außer dadurch wird ein Untermenü geöffnet/geschlossen\n let oldListener = this._menu.getOnClickListener();\n this._menu.setOnClickListener(e => {\n if (!(oldListener(e) instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.closeMenu();\n }\n });\n //Fügt close/open-Listener für den Toggle-Button hinzu\n this._responsiveMenu = this.findBy(\"#responsive-menu\");\n this.findBy(\"#responsive-menu-toggle\").onclick = () => {\n if (this._responsiveMenu.classList.contains(\"visible\")) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n };\n //Wenn das \"versteckte\" Menü geöffnet ist, sollte jeder Click nicht auf das Menü dieses wieder schließen\n //Dazu gibt es den navbar-close-listener der sich vor allen (außer dem Menü) befindet. Er wird nur angezeigt,\n //wenn das Menü offen ist\n let navbarFragment = this;\n this.findBy(\"#navbar-close-listener\").addEventListener(\"click\", function (e) {\n if (e.target === this) {\n navbarFragment.closeMenu();\n }\n });\n //Wenn die größe des Fenster geändert wird, muss nachgeschaut werden, ob der Menü-Button für das hidden-Menü noch angezeigt werden muss\n window.addEventListener('resize', () => {\n //Reicht aus, wenn Seite im Vordergrund, da bei jedem Start (durch onStart) der toggleButton geupdatet wird\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this.updateToggleButton();\n }\n });\n //Rendere das Menü\n this.drawMenu();\n this.findBy(\".back-button\").addEventListener(\"click\", () => {\n this.goBack();\n });\n this.findBy(\".logo\").addEventListener(\"click\", () => {\n if (NavbarFragment.onLogoClickListener) {\n NavbarFragment.onLogoClickListener(this.getSite());\n }\n });\n this.setCanGoBack(this._canGoBack);\n this.setBackgroundImage(this._backgroundImage);\n this.setScrollWidget(this._scrollWidget);\n this.setLogo(this._logo);\n return res;\n });\n }\n goBack() {\n if (this._canGoBack) {\n this.getSite().goBack();\n }\n }\n /**\n * Jedes mal, wenn die Seite startet, update den toggleButton\n *\n * @param pauseArguments\n * @returns {Promise}\n */\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n _super.onStart.call(this, pauseArguments);\n this.updateToggleButton();\n });\n }\n _showCloseListener() {\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'block';\n }\n }\n /**\n * Schließe das Menü\n */\n closeMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n this._responsiveMenu.classList.remove(\"visible\");\n this._view.classList.remove(\"navbar-is-open\");\n }\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'none';\n }\n if (this._menu) {\n this._menu.close();\n }\n }\n /**\n * Öffne das Menü\n */\n openMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n // this._responsiveMenu.style.display = 'block';\n this._responsiveMenu.classList.add(\"visible\");\n this._view.classList.add(\"navbar-is-open\");\n }\n this._showCloseListener();\n }\n /**\n * rendere das Menü\n */\n drawMenu() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.draw();\n }\n }\n /**\n * Update die Sichtbarkeit des MenüButtons für das \"versteckte\" Menü\n */\n updateToggleButton() {\n //Bekomme die aktuelle Bildschirm-größe als Foundation-Klasse\n let size = NavbarFragment._getCurrentSize();\n //schaue hier nach den enthaltenen Elementen. Evtl sollte das direkt an den MenüActions gemacht werden\n let firstParentElement = this.findBy(\"#navbar-menu-visible\");\n if (\n //Es existieren Elemente für large und Bildschirmgröße ist kleiner large => ToggleButton muss angezeigt werden\n (size === \"medium\" || size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_LARGE + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für medium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_MEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für smedium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_SMEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente, welche nie angezeigt werden sollen => ToggleButton muss angezeigt werden\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_NEVER + \":not(.hidden)\").length > 0) {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'block';\n }\n else {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'none';\n //schließe Menü, falls es offen war\n this.closeMenu();\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param action\n */\n addAction(action) {\n this._menuActions.push(action);\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.addAction(action);\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param redraw\n */\n removeAllActions(redraw) {\n this._menuActions = [];\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.removeAllActions(redraw);\n }\n }\n /**\n * Updatet das Title-Element\n * @param titleElement\n */\n setTitleElement(titleElement) {\n Helper_1.Helper.removeAllChildren(this.findBy(\"#title-element-container\")).appendChild(titleElement);\n }\n /**\n * Gibt die aktuelle Size zurück\n *\n * @returns {*}\n * @private\n */\n static _getCurrentSize() {\n let matched;\n //Queries sind paare von css-selektoren auf die Mindest-Breite und Namen\n //Queries sind so geordnet, dass größter zum schluss kommt\n let queries = NavbarFragment._getViewQueries();\n for (let i = 0; i < queries.length; i++) {\n let query = queries[i];\n //Letzter sollte matchen, daher noch nicht breaken\n if (matchMedia(query._value).matches) {\n matched = query;\n }\n }\n if (typeof matched === 'object') {\n return matched._name;\n }\n else {\n return matched;\n }\n }\n /**\n * Gibt die ViewQueries zurück, triggert die Berechnung der ViewQueries, falls das noch nicht geschehen ist\n *\n * @returns {Array}\n * @private\n */\n static _getViewQueries() {\n if (NavbarFragment.queries.length === 0) {\n NavbarFragment.queries = NavbarFragment._calculateViewQueries();\n }\n return NavbarFragment.queries;\n }\n /**\n * Berechnet die ViewQueries, bzw liest diese aus Foundation/CSS ein\n * Eine Veränderung der Werte in SASS, verändert daher auch hier die Werte\n *\n * @returns {*}\n * @private\n */\n static _calculateViewQueries() {\n //Hilfs-Funktion zum Parsen der Bildschirmgröße\n function parseStyleToObject(str) {\n let styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n const parts = param.replace(/\\+/g, ' ').split('=');\n let key = parts[0];\n let val = parts[1];\n key = decodeURIComponent(key);\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = val === undefined ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n }\n else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n }\n else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n }\n //die Font-Family ist reiner Text. Daher übergibt Foundation die Bildchirmgröße mit den dazugehörigen Namen als\n // Font-Family in einem Element im Head\n let cssStyle = document.getElementsByClassName('foundation-mq');\n if (cssStyle.length === 0) {\n return;\n }\n let queries = [];\n //Lade Bildschirmgrößen und speichere diese als Query in einem Array\n let cssStyleElements = parseStyleToObject(window.getComputedStyle(cssStyle[0]).getPropertyValue('font-family'));\n for (let key in cssStyleElements) {\n if (cssStyleElements.hasOwnProperty(key)) {\n //Erstelle aus der Bildschirmgröße die Queries\n queries.push({\n _name: key,\n _value: 'only screen and (min-width: ' + cssStyleElements[key] + ')'\n });\n }\n }\n return queries;\n }\n /**\n * Setzt den Listener, welcher ausgeführt wird, wenn auf das Logo geklickt wird\n *\n * @param listener\n */\n static setOnLogoClickListener(listener) {\n this.onLogoClickListener = listener;\n }\n}\nexports.NavbarFragment = NavbarFragment;\nNavbarFragment.queries = [];\nNavbarFragment.onLogoClickListener = () => App_1.App.addInitialization(app => app.startStartingSite());\nNavbarFragment.title = \"MeinBerufBau\";\nNavbarFragment.defaultActions = [];\n//# sourceMappingURL=NavbarFragment.js.map","import { __values } from \"tslib\";\nimport { QueryBuilderUtils } from \"./QueryBuilderUtils\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nvar JoinAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JoinAttribute(connection, queryExpressionMap, joinAttribute) {\n this.connection = connection;\n this.queryExpressionMap = queryExpressionMap;\n this.isSelectedEvaluated = false;\n this.relationEvaluated = false;\n ObjectUtils.assign(this, joinAttribute || {});\n }\n Object.defineProperty(JoinAttribute.prototype, \"isMany\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"isSelected\", {\n /**\n * Indicates if this join is selected.\n */\n get: function () {\n var _this = this;\n if (!this.isSelectedEvaluated) {\n var getValue = function () {\n var e_1, _a;\n var _loop_1 = function (select) {\n if (select.selection === _this.alias.name)\n return { value: true };\n if (_this.metadata && !!_this.metadata.columns.find(function (column) { return select.selection === _this.alias.name + \".\" + column.propertyPath; }))\n return { value: true };\n };\n try {\n for (var _b = __values(_this.queryExpressionMap.selects), _c = _b.next(); !_c.done; _c = _b.next()) {\n var select = _c.value;\n var state_1 = _loop_1(select);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"tablePath\", {\n /**\n * Name of the table which we should join.\n */\n get: function () {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get: function () {\n var _this = this;\n if (!this.relationEvaluated) {\n var getValue = function () {\n if (!QueryBuilderUtils.isAliasProperty(_this.entityOrProperty))\n return undefined;\n var relationOwnerSelection = _this.queryExpressionMap.findAliasByName(_this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n }\n throw new Error(\"Relation with property path \" + _this.relationPropertyPath + \" in entity was not found.\");\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n return undefined;\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n \n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n \n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n if (!this.relation)\n throw new Error(\"Cannot get junction table for join without relation.\");\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return JoinAttribute;\n}());\nexport { JoinAttribute };\n\n//# sourceMappingURL=JoinAttribute.js.map\n","/**\n * This class stores up and down queries needed for migrations functionality.\n */\nvar SqlInMemory = /** @class */ (function () {\n function SqlInMemory() {\n this.upQueries = [];\n this.downQueries = [];\n }\n return SqlInMemory;\n}());\nexport { SqlInMemory };\n\n//# sourceMappingURL=SqlInMemory.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { Query } from \"../driver/Query\";\nimport { SqlInMemory } from \"../driver/SqlInMemory\";\nvar BaseQueryRunner = /** @class */ (function () {\n function BaseQueryRunner() {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n this.isReleased = false;\n /**\n * Indicates if transaction is in progress.\n */\n this.isTransactionActive = false;\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n this.data = {};\n /**\n * All synchronized tables in the database.\n */\n this.loadedTables = [];\n /**\n * All synchronized views in the database.\n */\n this.loadedViews = [];\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n this.sqlMemoryMode = false;\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n this.sqlInMemory = new SqlInMemory();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads given table's data from the database.\n */\n BaseQueryRunner.prototype.getTable = function (tablePath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables([tablePath])];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables.length > 0 ? this.loadedTables[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database.\n */\n BaseQueryRunner.prototype.getTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables(tableNames)];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getView = function (viewPath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews([viewPath])];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews.length > 0 ? this.loadedViews[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getViews = function (viewPaths) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews(viewPaths)];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews];\n }\n });\n });\n };\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n BaseQueryRunner.prototype.enableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n };\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n BaseQueryRunner.prototype.disableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n };\n /**\n * Flushes all memorized sqls.\n */\n BaseQueryRunner.prototype.clearSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n };\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n BaseQueryRunner.prototype.getMemorySql = function () {\n return this.sqlInMemory;\n };\n /**\n * Executes up sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryUpSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_1_1;\n var e_1, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.upQueries), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes down sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryDownSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.downQueries.reverse()), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedView = function (viewName) {\n return __awaiter(this, void 0, void 0, function () {\n var view, foundViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n view = this.loadedViews.find(function (view) { return view.name === viewName; });\n if (view)\n return [2 /*return*/, view];\n return [4 /*yield*/, this.loadViews([viewName])];\n case 1:\n foundViews = _a.sent();\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return [2 /*return*/, foundViews[0]];\n }\n else {\n throw new Error(\"View \\\"\" + viewName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, foundTables;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.loadedTables.find(function (table) { return table.name === tableName; });\n if (table)\n return [2 /*return*/, table];\n return [4 /*yield*/, this.loadTables([tableName])];\n case 1:\n foundTables = _a.sent();\n if (foundTables.length > 0) {\n this.loadedTables.push(foundTables[0]);\n return [2 /*return*/, foundTables[0]];\n }\n else {\n throw new Error(\"Table \\\"\" + tableName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Replaces loaded table with given changed table.\n */\n BaseQueryRunner.prototype.replaceCachedTable = function (table, changedTable) {\n var foundTable = this.loadedTables.find(function (loadedTable) { return loadedTable.name === table.name; });\n if (foundTable) {\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n };\n BaseQueryRunner.prototype.getTypeormMetadataTableName = function () {\n var options = this.connection.driver.options;\n return this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n };\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n BaseQueryRunner.prototype.isColumnChanged = function (oldColumn, newColumn, checkDefault, checkComment) {\n // this logs need to debug issues in column change detection. Do not delete it!\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(oldColumn.enum !== newColumn.enum);\n // console.log(oldColumn.enum, newColumn.enum);\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || oldColumn.enum !== newColumn.enum;\n };\n /**\n * Checks if column length is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnLength = function (table, column, length) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.length)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length.toString() === length.toString();\n }\n return false;\n };\n /**\n * Checks if column precision is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnPrecision = function (table, column, precision) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n return false;\n };\n /**\n * Checks if column scale is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnScale = function (table, column, scale) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n return false;\n };\n /**\n * Executes sql used special for schema build.\n */\n BaseQueryRunner.prototype.executeQueries = function (upQueries, downQueries) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries_1, upQueries_1_1, _a, query, parameters, e_3_1;\n var _b, _c, e_3, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n (_b = this.sqlInMemory.upQueries).push.apply(_b, __spreadArray([], __read(upQueries)));\n (_c = this.sqlInMemory.downQueries).push.apply(_c, __spreadArray([], __read(downQueries)));\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return [2 /*return*/, Promise.resolve()];\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n upQueries_1 = __values(upQueries), upQueries_1_1 = upQueries_1.next();\n _e.label = 2;\n case 2:\n if (!!upQueries_1_1.done) return [3 /*break*/, 5];\n _a = upQueries_1_1.value, query = _a.query, parameters = _a.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 3:\n _e.sent();\n _e.label = 4;\n case 4:\n upQueries_1_1 = upQueries_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _e.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (upQueries_1_1 && !upQueries_1_1.done && (_d = upQueries_1.return)) _d.call(upQueries_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n return BaseQueryRunner;\n}());\nexport { BaseQueryRunner };\n\n//# sourceMappingURL=BaseQueryRunner.js.map\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass JsonHelper {\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n // array deepEqual\n if (a instanceof Array && b instanceof Array && a.length === b.length) {\n return a[\"every\"]((obj, i) => {\n return JsonHelper.deepEqual(obj, b[i]);\n });\n }\n //date deepEqual\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n // object deep copy\n if (typeof a === \"object\" && typeof b === \"object\") {\n let aKeys = Object.keys(a);\n let bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys[\"every\"]((key) => {\n return Helper_1.Helper.isNotNull(b[key]) && JsonHelper.deepEqual(a[key], b[key]);\n });\n }\n //else is false (or not handled)\n return false;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static deepCopy(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper_1.Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneO;\n }\n static deepAssign(...objects) {\n if (objects.length > 0 && Array.isArray(objects)) {\n const result = [];\n objects.forEach(arr => result.push(...arr));\n return result;\n }\n const resultObj = {};\n objects.forEach(obj => {\n for (let i in obj) {\n if (resultObj[i] && typeof obj[i] === \"object\" && typeof resultObj[i] === \"object\") {\n resultObj[i] = JsonHelper.deepAssign(resultObj[i], obj[i]);\n }\n else {\n resultObj[i] = obj[i];\n }\n }\n });\n return resultObj;\n }\n static getDiff(a, b) {\n const result = {\n changed: {},\n added: {},\n removed: [],\n };\n // if (Array.isArray(a) && Array.isArray(b)){\n // const lengthA = a.length;\n // const lengthB = b.length;\n //\n // const minLength = Math.min(lengthA, lengthB);\n // for (let i = 0; i < minLength; i++){\n // const\n // }\n // }\n if ((typeof a !== \"object\" || typeof b !== \"object\")\n && (!Array.isArray(a) && !Array.isArray(b))) {\n if (a === b) {\n return null;\n }\n else {\n return { value: b };\n }\n }\n let hasChanged = false;\n let hasRemoved = false;\n let hasAdded = false;\n for (let i in a) {\n if (i in b) {\n const newVal = JsonHelper.getDiff(a[i], b[i]);\n if (newVal !== null) {\n result.changed[i] = newVal;\n hasChanged = true;\n }\n }\n else {\n result.removed.push(i);\n hasRemoved = true;\n }\n }\n for (let i in b) {\n if (!(i in a)) {\n result.added[i] = b[i];\n hasAdded = true;\n }\n }\n if (hasRemoved || hasAdded || hasChanged) {\n return result;\n }\n else {\n return null;\n }\n }\n static applyDiff(obj, diff) {\n if (!Array.isArray(diff.removed)) {\n debugger;\n }\n Object.keys(diff.changed).forEach(key => {\n if (\"value\" in diff.changed[key]) {\n obj[key] = diff.changed[key].value;\n }\n else {\n obj[key] = JsonHelper.applyDiff(obj[key], diff.changed[key]);\n }\n });\n Object.keys(diff.added).forEach(key => obj[key] = diff.added[key]);\n if (Array.isArray(obj)) {\n diff.removed.sort((a, b) => (parseInt(b) - parseInt(a))).forEach(index => {\n obj.splice(parseInt(index), 1);\n });\n }\n else {\n diff.removed.forEach(rem => delete obj[rem]);\n }\n return obj;\n }\n}\nexports.JsonHelper = JsonHelper;\n//# sourceMappingURL=JsonHelper.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { InsertResult } from \"./result/InsertResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { InsertValuesMissingError } from \"../error/InsertValuesMissingError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar InsertQueryBuilder = /** @class */ (function (_super) {\n __extends(InsertQueryBuilder, _super);\n function InsertQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n InsertQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n InsertQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var valueSets, queryRunner, transactionStartedByUs, broadcastResult_1, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, insertSql, parameters, insertResult, statements, _b, broadcastResult_2, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n valueSets = this.getValueSets();\n // console.timeEnd(\".value sets\");\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return [2 /*return*/, new InsertResult()];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult_1 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult_1, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_1.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult_1.promises)];\n case 4:\n _c.sent();\n _c.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), insertSql = _a[0], parameters = _a[1];\n insertResult = new InsertResult();\n statements = [declareSql, insertSql, selectOutputSql];\n _b = insertResult;\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n _b.raw = _c.sent();\n if (!(this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n // console.time(\".updating entity\");\n return [4 /*yield*/, returningResultsEntityUpdator.insert(insertResult, valueSets)];\n case 7:\n // console.time(\".updating entity\");\n _c.sent();\n _c.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult_2 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult_2, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_2.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult_2.promises)];\n case 9:\n _c.sent();\n _c.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _c.sent();\n _c.label = 12;\n case 12: \n // console.timeEnd(\".commit\");\n return [2 /*return*/, insertResult];\n case 13:\n error_1 = _c.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _c.label = 14;\n case 14:\n _c.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _c.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _c.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _c.sent();\n _c.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _c.sent();\n _c.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n InsertQueryBuilder.prototype.into = function (entityTarget, columns) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return this;\n };\n /**\n * Values needs to be inserted into table.\n */\n InsertQueryBuilder.prototype.values = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n InsertQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n */\n InsertQueryBuilder.prototype.onConflict = function (statement) {\n this.expressionMap.onConflict = statement;\n return this;\n };\n /**\n * Adds additional ignore statement supported in databases.\n */\n InsertQueryBuilder.prototype.orIgnore = function (statement) {\n if (statement === void 0) { statement = true; }\n this.expressionMap.onIgnore = statement;\n return this;\n };\n /**\n * Adds additional update statement supported in databases.\n */\n InsertQueryBuilder.prototype.orUpdate = function (statement) {\n var _this = this;\n this.expressionMap.onUpdate = {};\n if (statement && Array.isArray(statement.conflict_target))\n this.expressionMap.onUpdate.conflict = \" ( \" + statement.conflict_target.map(function (columnName) { return _this.escape(columnName); }).join(\", \") + \" ) \";\n if (statement && typeof statement.conflict_target === \"string\")\n this.expressionMap.onUpdate.conflict = \" ON CONSTRAINT \" + this.escape(statement.conflict_target) + \" \";\n if (statement && Array.isArray(statement.columns))\n this.expressionMap.onUpdate.columns = statement.columns.map(function (column) { return _this.escape(column) + \" = :\" + column; }).join(\", \");\n if (statement && Array.isArray(statement.overwrite)) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return column + \" = VALUES(\" + column + \")\"; }).join(\", \");\n }\n else if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return _this.escape(column) + \" = EXCLUDED.\" + _this.escape(column); }).join(\", \");\n }\n }\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates INSERT express used to perform insert query.\n */\n InsertQueryBuilder.prototype.createInsertExpression = function () {\n var _this = this;\n var tableName = this.getTableName(this.getMainTableName());\n var valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n var returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n var columnsExpression = this.createColumnNamesExpression();\n var query = \"INSERT \";\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" IGNORE \" : \"\");\n }\n query += \"INTO \" + tableName;\n // add columns expression\n if (columnsExpression) {\n query += \"(\" + columnsExpression + \")\";\n }\n else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += \" OUTPUT \" + returningExpression;\n }\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += \" \" + valuesExpression;\n }\n else {\n query += \" VALUES \" + valuesExpression;\n }\n }\n else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n }\n else {\n query += \" DEFAULT VALUES\";\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" ON CONFLICT DO NOTHING \" : \"\");\n query += \"\" + (this.expressionMap.onConflict ? \" ON CONFLICT \" + this.expressionMap.onConflict : \"\");\n if (this.expressionMap.onUpdate) {\n var _a = this.expressionMap.onUpdate, overwrite = _a.overwrite, columns = _a.columns, conflict = _a.conflict;\n query += \"\" + (columns ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + overwrite : \"\");\n }\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n var _b = this.expressionMap.onUpdate, overwrite = _b.overwrite, columns = _b.columns;\n query += \"\" + (columns ? \" ON DUPLICATE KEY UPDATE \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON DUPLICATE KEY UPDATE \" + overwrite : \"\");\n }\n }\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += \" RETURNING \" + returningExpression;\n }\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias.hasMetadata\n && this.expressionMap.mainAlias.metadata.columns\n .filter(function (column) { return _this.expressionMap.insertColumns.length > 0 ? _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert; })\n .some(function (column) { return _this.isOverridingAutoIncrementBehavior(column); })) {\n query = \"SET IDENTITY_INSERT \" + tableName + \" ON; \" + query + \"; SET IDENTITY_INSERT \" + tableName + \" OFF\";\n }\n return query;\n };\n /**\n * Gets list of columns where values must be inserted to.\n */\n InsertQueryBuilder.prototype.getInsertedColumns = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n return [];\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n // if user specified list of columns he wants to insert to, then we filter only them\n if (_this.expressionMap.insertColumns.length)\n return _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n // skip columns the user doesn't want included by default\n if (!column.isInsert) {\n return false;\n }\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(_this.connection.driver instanceof OracleDriver)\n && !(_this.connection.driver instanceof AbstractSqliteDriver)\n && !(_this.connection.driver instanceof MysqlDriver)\n && !(_this.connection.driver instanceof AuroraDataApiDriver)\n && !(_this.connection.driver instanceof SqlServerDriver && _this.isOverridingAutoIncrementBehavior(column)))\n return false;\n return true;\n });\n };\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n InsertQueryBuilder.prototype.createColumnNamesExpression = function () {\n var _this = this;\n var columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(function (column) { return _this.escape(column.databaseName); }).join(\", \");\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias.hasMetadata && !this.expressionMap.insertColumns.length) {\n var valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n }\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n };\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n InsertQueryBuilder.prototype.createValuesExpression = function () {\n var _this = this;\n var valueSets = this.getValueSets();\n var columns = this.getInsertedColumns();\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n var expression_1 = \"\";\n var parametersCount_1 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, valueSetIndex) {\n columns.forEach(function (column, columnIndex) {\n if (columnIndex === 0) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" SELECT \";\n }\n else {\n expression_1 += \"(\";\n }\n }\n var paramName = \"i\" + valueSetIndex + \"_\" + column.databaseName;\n // extract real value from the entity\n var value = column.getEntityValue(valueSet);\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression_1 += \"1\";\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n }\n else if (column.isDiscriminator) {\n _this.expressionMap.nativeParameters[\"discriminator_value_\" + parametersCount_1] = _this.expressionMap.mainAlias.metadata.discriminatorValue;\n expression_1 += _this.connection.driver.createParameter(\"discriminator_value_\" + parametersCount_1, parametersCount_1);\n parametersCount_1++;\n // return \"1\";\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n }\n else if (column.isGenerated && column.generationStrategy === \"uuid\" && !_this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n var paramName_1 = \"uuid_\" + column.databaseName + valueSetIndex;\n value = RandomGenerator.uuid4();\n _this.expressionMap.nativeParameters[paramName_1] = value;\n expression_1 += _this.connection.driver.createParameter(paramName_1, parametersCount_1);\n parametersCount_1++;\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if ((_this.connection.driver instanceof OracleDriver && valueSets.length > 1) || _this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression_1 += _this.connection.driver.normalizeDefault(column);\n }\n else {\n expression_1 += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n }\n else {\n expression_1 += \"DEFAULT\";\n }\n // support for SQL expressions in queries\n }\n else if (value instanceof Function) {\n expression_1 += value();\n // just any other regular value\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver)\n value = _this.connection.driver.parametrizeValue(column, value);\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n _this.expressionMap.nativeParameters[paramName] = value;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + column.srid + \")\";\n }\n else {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression_1 += \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression_1 += \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression_1 += column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression_1 += _this.connection.driver.createParameter(paramName, parametersCount_1);\n }\n parametersCount_1++;\n }\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL \";\n }\n else {\n expression_1 += \")\";\n }\n }\n else {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL UNION ALL \";\n }\n else {\n expression_1 += \"), \";\n }\n }\n }\n else {\n expression_1 += \", \";\n }\n });\n });\n if (expression_1 === \"()\")\n return \"\";\n return expression_1;\n }\n else { // for tables without metadata\n // get values needs to be inserted\n var expression_2 = \"\";\n var parametersCount_2 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, insertionIndex) {\n var columns = Object.keys(valueSet);\n columns.forEach(function (columnName, columnIndex) {\n if (columnIndex === 0) {\n expression_2 += \"(\";\n }\n var paramName = \"i\" + insertionIndex + \"_\" + columnName;\n var value = valueSet[columnName];\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression_2 += value();\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if (_this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) {\n expression_2 += \"NULL\";\n }\n else {\n expression_2 += \"DEFAULT\";\n }\n // just any other regular value\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n expression_2 += _this.connection.driver.createParameter(paramName, parametersCount_2);\n parametersCount_2++;\n }\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression_2 += \")\";\n }\n else {\n expression_2 += \"), \";\n }\n }\n else {\n expression_2 += \", \";\n }\n });\n });\n if (expression_2 === \"()\")\n return \"\";\n return expression_2;\n }\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n InsertQueryBuilder.prototype.getValueSets = function () {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n throw new InsertValuesMissingError();\n };\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n InsertQueryBuilder.prototype.isOverridingAutoIncrementBehavior = function (column) {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some(function (valueSet) {\n return column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null;\n });\n };\n return InsertQueryBuilder;\n}(QueryBuilder));\nexport { InsertQueryBuilder };\n\n//# sourceMappingURL=InsertQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar UpdateQueryBuilder = /** @class */ (function (_super) {\n __extends(UpdateQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function UpdateQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n UpdateQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n UpdateQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, updateSql, parameters, updateResult, statements, result, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata, this.expressionMap.valuesSet);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), updateSql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n statements = [declareSql, updateSql, selectOutputSql];\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n result = _b.sent();\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof AuroraDataApiDriver) {\n updateResult.raw = result;\n updateResult.affected = result.numberOfRecordsUpdated;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Values needs to be updated.\n */\n UpdateQueryBuilder.prototype.set = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n UpdateQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n UpdateQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n UpdateQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n UpdateQueryBuilder.prototype.createUpdateExpression = function () {\n var _this = this;\n var valuesSet = this.getValueSet();\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var updatedColumns = [];\n var newParameters = {};\n var parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(function (propertyPath) {\n // todo: make this and other query builder to work with properly with tables without metadata\n var columns = metadata.findColumnsWithPropertyPath(propertyPath);\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n columns.forEach(function (column) {\n if (!column.isUpdate) {\n return;\n }\n updatedColumns.push(column);\n var paramName = \"upd_\" + column.databaseName;\n //\n var value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = NULL\");\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver) {\n value = _this.connection.driver.parametrizeValue(column, value);\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n }\n var expression = null;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + column.srid + \")\";\n }\n else {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression = \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression = _this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n }\n else {\n Object.keys(valuesSet).map(function (key) {\n var value = valuesSet[key];\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(key) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(key) + \" = NULL\");\n }\n else {\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n }\n else {\n _this.expressionMap.nativeParameters[key] = value;\n }\n updateColumnAndValues.push(_this.escape(key) + \" = \" + _this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n UpdateQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n UpdateQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n UpdateQueryBuilder.prototype.getValueSet = function () {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n throw new UpdateValuesMissingError();\n };\n return UpdateQueryBuilder;\n}(QueryBuilder));\nexport { UpdateQueryBuilder };\n\n//# sourceMappingURL=UpdateQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { DeleteResult } from \"./result/DeleteResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../index\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar DeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(DeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n DeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n DeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, broadcastResult, deleteResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 11, 16, 21]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n deleteResult = new DeleteResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof MysqlDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.affectedRows;\n }\n else if (driver instanceof AuroraDataApiDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.numberOfRecordsUpdated;\n }\n else if (driver instanceof SqlServerDriver || driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n deleteResult.raw = result[0] ? result[0] : null;\n // don't return 0 because it could confuse. null means that we did not receive this value\n deleteResult.affected = typeof result[1] === \"number\" ? result[1] : null;\n }\n else if (driver instanceof OracleDriver) {\n deleteResult.affected = result;\n }\n else if (driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n deleteResult.raw = result;\n deleteResult.affected = result.changes;\n }\n else {\n deleteResult.raw = result;\n }\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, deleteResult];\n case 11:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 15];\n _b.label = 12;\n case 12:\n _b.trys.push([12, 14, , 15]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 13:\n _b.sent();\n return [3 /*break*/, 15];\n case 14:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 15];\n case 15: throw error_1;\n case 16:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 18];\n return [4 /*yield*/, queryRunner.release()];\n case 17:\n _b.sent();\n _b.label = 18;\n case 18:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 20];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20: return [7 /*endfinally*/];\n case 21: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n DeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates DELETE express used to perform query.\n */\n DeleteQueryBuilder.prototype.createDeleteExpression = function () {\n var tableName = this.getTableName(this.getMainTableName());\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"DELETE FROM \" + tableName + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return \"DELETE FROM \" + tableName + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"DELETE FROM \" + tableName + whereExpression;\n }\n };\n return DeleteQueryBuilder;\n}(QueryBuilder));\nexport { DeleteQueryBuilder };\n\n//# sourceMappingURL=DeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst cs_event_manager_1 = require(\"cs-event-manager\");\nclass EventManager extends cs_event_manager_1.EventManager {\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=EventManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TemplateSite = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst MasterSite_1 = require(\"./Delegate/MasterSite\");\n/**\n * Die Seite bekommt ein Template übergeben und ersetzt in diesem Template das mit dem Selector gefundene\n * Element mit der angebenen View\n */\nclass TemplateSite extends MasterSite_1.MasterSite {\n /**\n * Constructor für eine TemplateSite\n *\n * @param siteManager\n * @param view\n * @param template\n * @param selectorToReplace\n */\n constructor(siteManager, view, template, selectorToReplace) {\n super(siteManager, template);\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(selectorToReplace).replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n}\nexports.TemplateSite = TemplateSite;\n//# sourceMappingURL=TemplateSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = void 0;\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist\n * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind\n */\nclass Menu {\n /**\n * Setzt die Renderer und die initialen Actions\n *\n * @param renderer\n * @param actions\n */\n constructor(renderer, actions) {\n this._actions = [];\n this._renderers = [];\n this._submenus = [];\n if (Array.isArray(renderer)) {\n this._renderers = renderer;\n }\n else {\n this._renderers = [renderer];\n }\n //Initialisiert onClickListener\n this._onClickListener = this._generateOnClickListener();\n //Setze die Actions so, um einzelne Actions noch zu überprüfen\n Helper_1.Helper.nonNull(actions, []).forEach(action => {\n this.addAction(action, false);\n });\n this._openSubmenuListener = null;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n * @param menu\n * @return {Menu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Menu());\n menu._actions = [];\n this._actions.forEach(action => {\n menu.addAction(action.copy());\n });\n menu._renderers = this._renderers;\n menu._onClickListener = this._onClickListener;\n return menu;\n }\n /**\n * Schließt das Menü, hauptsächlich hier zum Schließen der Submenüs.\n * Zum öffnen wird nicht so eine Funktion gebraucht, da beim öffnen nicht die untermenüs geöffnet werden sollen\n */\n close() {\n this._submenus.forEach(submenu => {\n submenu.close();\n });\n }\n /**\n * Fügt eine Action dem Menü hinzu\n *\n * @param action\n * @param redraw\n */\n addAction(action, redraw) {\n //Überprüfung, ob es die richtige Klasse ist und ob die Action nicht schon hinzugefügt wurde\n if (action instanceof MenuAction_1.MenuAction && this._actions.indexOf(action) === -1) {\n //Falls es sich um ein Submenu handelt, füge dieses hinzu\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._submenus.push(action.getSubmenu());\n }\n this._actions.push(action);\n action.setMenu(this);\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n }\n removeAllActions(redraw) {\n this._actions.forEach(action => action.setMenu(null));\n this._actions = [];\n this._submenus = [];\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n /**\n * Sortiert die Actions und sagt danach den Renderern, dass diese das Menü zeuchnen sollen\n */\n draw() {\n try {\n this.sortActions();\n this._renderers.forEach(renderer => {\n renderer.render(this);\n });\n }\n catch (e) {\n console.error(e);\n }\n }\n /**\n * Sortiert die Actions der Order nach\n */\n sortActions() {\n this._actions = this._actions.sort(function (first, second) {\n return first.getOrder() - second.getOrder();\n });\n }\n openSubmenu(submenu) {\n if (this._openSubmenuListener) {\n this._openSubmenuListener(submenu);\n }\n }\n setOpenSubmenuListener(listener) {\n this._openSubmenuListener = listener;\n }\n /**\n * Generiert den defaultmäßigen onclick-listener.\n * @returns {Function}\n * @private\n */\n _generateOnClickListener() {\n return (event) => {\n let _element = event.target;\n //Falls es eine Action oder ein Unterlement einer Action war...\n if (_element.matches('li') || _element.matches('li *')) {\n //...finde das zugehörige Element und lese ID aus\n _element = _element.closest(\"li\");\n let actionId = parseInt(_element.dataset[\"id\"]);\n //Schaue nach, welche Action angeklickt wurde\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n //Falls action eine Funktion (und kein Link), sowie aktiv ist, führe action aus\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n //Gebe gefundene Action zurück\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n }\n return null;\n };\n }\n /**\n * Setzt den OnClickListener\n *\n * @param listener\n */\n setOnClickListener(listener) {\n this._onClickListener = listener;\n }\n /**\n * Gibt den OnClickListener zurück\n *\n * @returns {*}\n */\n getOnClickListener() {\n return this._onClickListener;\n }\n /**\n * Gibt die Actions zurück\n * @returns {Array}\n */\n getActions() {\n return this._actions;\n }\n /**\n * Triggert ein neues Rendern für eine Action. Das entsprechende ActionElement wird ausgetauscht\n * @param action\n */\n redrawAction(action) {\n this._renderers.forEach(renderer => {\n renderer._triggerRenderAction(action);\n });\n }\n /**\n * Updated das entsprechende ActionElement abhängig vom Renderer. Das Element wird nicht ausgetauscht\n * @param action\n */\n updateAction(action) {\n this._renderers.forEach(renderer => {\n renderer.updateAction(action);\n });\n }\n /**\n * alias für draw\n */\n redraw() {\n this.draw();\n }\n}\nexports.Menu = Menu;\n//# sourceMappingURL=Menu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccordionRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst MenuRenderer_1 = require(\"./MenuRenderer\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst Translator_1 = require(\"../../../Translator\");\n/**\n * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist\n */\nclass AccordionRenderer extends MenuRenderer_1.MenuRenderer {\n /**\n * Rendert eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderAction(action) {\n let linkElement = this.renderLinkElement(action);\n let liElement = this.renderLiElement(action);\n liElement.insertBefore(linkElement, liElement.firstChild);\n return liElement;\n }\n /**\n * Rendert das AnchorElement für eine Action\n * @param action\n * @returns {HTMLAnchorElement}\n */\n renderLinkElement(action) {\n let aElement = document.createElement(\"a\");\n if (typeof action.getAction() === 'string') {\n aElement.href = action.getAction();\n }\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n let iconElement = document.createElement(\"img\");\n iconElement.src = action.getIcon();\n iconElement.classList.add('action-image');\n if (action.isShouldTranslate()) {\n iconElement.dataset[\"translationTitle\"] = action.getName();\n iconElement.classList.add(Translator_1.Translator.getInstance().getTranslationClass());\n }\n else {\n iconElement.title = action.getName();\n }\n aElement.appendChild(iconElement);\n }\n let name = action.getName();\n // debugger;\n if (action.isShouldTranslate()) {\n name = Translator_1.Translator.makePersistentTranslation(name);\n }\n else {\n name = document.createTextNode(name);\n }\n aElement.appendChild(name);\n return aElement;\n }\n /**\n * Render das LI-Element für eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderLiElement(action) {\n let liElement = document.createElement(\"li\");\n if (action.getLiClass().trim() !== \"\") {\n liElement.classList.add(...action.getLiClass().split(\" \"));\n }\n // liElement.appendChild(aElement);\n liElement.dataset[\"id\"] = action.getId();\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n liElement.classList.add(\"img\");\n }\n if (!action.isVisible()) {\n liElement.classList.add(\"hidden\");\n }\n liElement.classList.add(action.getShowFor());\n return liElement;\n }\n /**\n * Da abgeleitet von DropdownRenderer, muss eine Klasse wieder entfernt werden\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.remove('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('is-accordion-submenu-parent');\n return submenuActionElement;\n }\n /**\n * erstellt ein SubmenuParent für Accordion\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-accordion-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet ein ActionElement\n * @param action\n */\n updateAction(action) {\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n this.getElementForAction(action).setAttribute(\"aria-expanded\", true);\n submenuElement.classList.add(\"js-active\");\n submenuElement.style = \"\";\n }\n else {\n this.getElementForAction(action).removeAttribute(\"aria-expanded\");\n submenuElement.classList.remove(\"js-activ\");\n submenuElement.style = \"display:none;\";\n }\n }\n }\n}\nexports.AccordionRenderer = AccordionRenderer;\n//# sourceMappingURL=AccordionRenderer.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst _typeorm = require(\"typeorm\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst XSSHelper_1 = require(\"js-helper/dist/shared/XSSHelper\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nlet typeorm = _typeorm;\n// if (typeorm.default) {\n// typeorm = typeorm.default;\n// }\nclass EasySyncPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.find({\n \"id\": typeorm.In(ids)\n }, null, null, null, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.findOne({\n \"id\": id\n }, null, null, relations);\n });\n }\n static findByClientId(id, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, id, relations);\n });\n }\n static findByClientIds(ids, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, ids, relations);\n });\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (Helper_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns_(entities[index]);\n this._handleRelations_(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations_(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns_(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n}\nexports.EasySyncPartialModel = EasySyncPartialModel;\nEasySyncPartialModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass FileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"src\"] = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[\"saveOffline\"] = { type: BaseDatabase_1.BaseDatabase.TYPES.BOOLEAN, default: 1 };\n return columns;\n }\n getServerUrl(appendDate) {\n appendDate = Helper_1.Helper.nonNull(appendDate, true);\n if (!this.src.startsWith(\"http\") && !this.src.startsWith(\"//\") && !this.src.startsWith(\"data\")) {\n let path = FileMedium.PUBLIC_PATH + this.src;\n if (appendDate) {\n path += \"?t=\" + new Date(this.updatedAt).getTime();\n }\n return path;\n }\n return this.src;\n }\n getUrl() {\n if (device.platform !== \"browser\" && this.saveOffline && this._isDownloaded && Helper_1.Helper.isNotNull(this.id) && !this.src.startsWith(\"data\") && !this.src.startsWith(\"http\")) {\n return \"cdvfile://localhost/persistent/\" + this.src;\n }\n else {\n return this.getServerUrl();\n }\n }\n toString() {\n console.warn(\"to string called on FileMedium. Only for dependency. Please look inside your sourcecode\");\n return this.getUrl();\n }\n}\nexports.FileMedium = FileMedium;\nFileMedium.PUBLIC_PATH = \"./\";\nFileMedium.SCHEMA_NAME = \"FileMedium\";\nBaseDatabase_1.BaseDatabase.addModel(FileMedium);\n//# sourceMappingURL=FileMedium.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Role = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Access_1 = require(\"./Access\");\nclass Role extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n this.accesses = null;\n this.parents = null;\n this.children = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"accesses\"] = {\n target: Access_1.Access.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleAccess\"\n },\n cascade: false\n };\n relations[\"parents\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n relations[\"children\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n return relations;\n }\n}\nexports.Role = Role;\nRole.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Role);\n//# sourceMappingURL=Role.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartUserSiteMenuAction = void 0;\nconst UserMenuAction_1 = require(\"./UserMenuAction\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nclass StartUserSiteMenuAction extends UserMenuAction_1.UserMenuAction {\n constructor(name, access, site, showFor, order, icon) {\n super(name, access, () => {\n if (client_1.StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n client_1.StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n client_1.StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartUserSiteMenuAction = StartUserSiteMenuAction;\n//# sourceMappingURL=StartUserSiteMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FilePromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FileWriterPromise_1 = require(\"./FileWriterPromise\");\nclass FilePromise {\n constructor(fileEntry) {\n this.fileEntry = fileEntry;\n }\n createWriter() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res) => {\n this.fileEntry.createWriter(writer => {\n res(new FileWriterPromise_1.FileWriterPromise(writer));\n });\n });\n });\n }\n static open(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n options = Helper_1.Helper.nonNull(options, { create: true, exclusive: false });\n return new Promise((r, rej) => {\n window[\"resolveLocalFileSystemURL\"](\"cdvfile://localhost/persistent/\", dirEntry => {\n dirEntry.getFile(file, options, fileEntry => {\n r(new FilePromise(fileEntry));\n }, rej);\n }, rej);\n });\n });\n }\n}\nexports.FilePromise = FilePromise;\n//# sourceMappingURL=FilePromise.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationUpdater = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationUpdater(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs set or add operation on a relation.\n */\n RelationUpdater.prototype.update = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updateSet, updateSet_1, ofs, parameters_1, conditions_1, condition, of_1, updateSet, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, bulkInserted_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!(relation.isManyToOne || relation.isOneToOneOwner)) return [3 /*break*/, 2];\n updateSet = relation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = value instanceof Object ? joinColumn.referencedColumn.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 10];\n case 2:\n if (!((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null)) return [3 /*break*/, 4];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n conditions_1.push(column.propertyPath + \" = :\" + parameterName);\n });\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 10];\n case 4:\n if (!(relation.isOneToOneNotOwner || relation.isOneToMany)) return [3 /*break*/, 6];\n if (Array.isArray(this.expressionMap.of))\n throw new Error(\"You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.\");\n of_1 = this.expressionMap.of;\n updateSet = relation.inverseRelation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = of_1 instanceof Object ? joinColumn.referencedColumn.getEntityValue(of_1) : of_1;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!value || (Array.isArray(value) && !value.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute()];\n case 5:\n _a.sent();\n return [3 /*break*/, 10];\n case 6:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n bulkInserted_1 = [];\n firstColumnValues.forEach(function (firstColumnVal) {\n secondColumnValues_1.forEach(function (secondColumnVal) {\n var inserted = {};\n junctionMetadata_1.ownerColumns.forEach(function (column) {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata_1.inverseColumns.forEach(function (column) {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted_1.push(inserted);\n });\n });\n if (!bulkInserted_1.length)\n return [2 /*return*/];\n if (!(this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(bulkInserted_1.map(function (value) {\n return _this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(value)\n .execute();\n }))];\n case 7:\n _a.sent();\n return [3 /*break*/, 10];\n case 8: return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(bulkInserted_1)\n .execute()];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n return RelationUpdater;\n}());\nexport { RelationUpdater };\n\n//# sourceMappingURL=RelationUpdater.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationRemover = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationRemover(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs remove operation on a relation.\n */\n RelationRemover.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, ofs, values_1, updateSet_1, parameters_1, conditions_1, condition, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, parameters_2, conditions_2, condition;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!relation.isOneToMany) return [3 /*break*/, 2];\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values_1 = Array.isArray(value) ? value : [value];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n conditions_1.push.apply(conditions_1, __spreadArray([], __read(values_1.map(function (value, valueIndex) {\n return __spreadArray(__spreadArray([], __read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n return column.propertyPath + \" = :\" + parameterName;\n }))), __read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return column.propertyPath + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n parameters_2 = {};\n conditions_2 = [];\n firstColumnValues.forEach(function (firstColumnVal, firstColumnValIndex) {\n conditions_2.push.apply(conditions_2, __spreadArray([], __read(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {\n return __spreadArray(__spreadArray([], __read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {\n var parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))), __read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {\n var parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_2.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata_1.tableName)\n .where(condition)\n .setParameters(parameters_2)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return RelationRemover;\n}());\nexport { RelationRemover };\n\n//# sourceMappingURL=RelationRemover.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { RelationUpdater } from \"./RelationUpdater\";\nimport { RelationRemover } from \"./RelationRemover\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationQueryBuilder = /** @class */ (function (_super) {\n __extends(RelationQueryBuilder, _super);\n function RelationQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n RelationQueryBuilder.prototype.getQuery = function () {\n return \"\";\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sets entity (target) which relations will be updated.\n */\n RelationQueryBuilder.prototype.of = function (entity) {\n this.expressionMap.of = entity;\n return this;\n };\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n RelationQueryBuilder.prototype.set = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToMany || relation.isOneToMany)\n throw new Error(\"Set operation is only supported for many-to-one and one-to-one relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .add() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.add = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, remover;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set(null) method instead.\");\n remover = new RelationRemover(this, this.expressionMap);\n return [2 /*return*/, remover.remove(value)];\n });\n });\n };\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.addAndRemove = function (added, removed) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.remove(removed)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.add(added)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets entity's relation id.\n async getId(): Promise {\n\n }*/\n /**\n * Gets entity's relation ids.\n async getIds(): Promise {\n return [];\n }*/\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n RelationQueryBuilder.prototype.loadOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.loadMany().then(function (results) { return results[0]; })];\n });\n });\n };\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n RelationQueryBuilder.prototype.loadMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var of, metadata;\n return __generator(this, function (_a) {\n of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new Error(\"Cannot load entity because only one primary key was specified, however entity contains multiple primary keys\");\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n return [2 /*return*/, this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner)];\n });\n });\n };\n return RelationQueryBuilder;\n}(QueryBuilder));\nexport { RelationQueryBuilder };\n\n//# sourceMappingURL=RelationQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareManager = void 0;\nconst ShareDialog_1 = require(\"./ShareDialog\");\nclass ShareManager {\n share(text) {\n if (device.platform === \"browser\") {\n this._shareBrowser(text);\n }\n else {\n this._shareMobile(text);\n }\n }\n _shareMobile(text) {\n navigator[\"share\"](text);\n }\n _shareBrowser(text) {\n new ShareDialog_1.ShareDialog(text).show();\n }\n}\nexports.ShareManager = ShareManager;\n//# sourceMappingURL=ShareManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseDatabase_1 = require(\"./BaseDatabase\");\nclass BaseModel {\n constructor() {\n this.id = null;\n this._isLoaded = false;\n }\n getId() {\n return this.id;\n }\n setId(id) {\n this.id = id;\n }\n static getColumnDefinitions() {\n return {\n id: {\n primary: true,\n type: BaseDatabase_1.BaseDatabase.TYPES.INTEGER,\n generated: true\n },\n };\n }\n static getRelationDefinitions() {\n return {};\n }\n static getRelations() {\n return Object.keys(this.getRelationDefinitions());\n }\n static getSchemaDefinition() {\n let columns = this.getColumnDefinitions();\n Object.keys(columns).forEach(column => {\n if (typeof columns[column] === \"string\") {\n columns[column] = { type: columns[column] };\n }\n if (columns[column].type === BaseDatabase_1.BaseDatabase.TYPES.MY_JSON && !columns[column].transformer) {\n columns[column].type = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[column].transformer = {\n from: text => {\n return (text ? JSON.parse(text) : null);\n },\n to: json => {\n return (json ? JSON.stringify(json) : \"\");\n }\n };\n }\n });\n return {\n name: this.getSchemaName(),\n target: this,\n columns: columns,\n relations: this.getRelationDefinitions()\n };\n }\n static getSchemaName() {\n if (!this.SCHEMA_NAME) {\n this.SCHEMA_NAME = this.name;\n }\n return this.SCHEMA_NAME;\n }\n setLoaded(isLoaded) {\n this._isLoaded = isLoaded;\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.saveEntity(this);\n });\n }\n delete() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.deleteEntity(this);\n });\n }\n static deleteMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.deleteEntity(entities);\n });\n }\n static saveMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.saveEntity(entities);\n });\n }\n static find(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findEntities(this, where, order, limit, offset, relations);\n });\n }\n static findAndCount(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findAndCountEntities(this, where, order, limit, offset, relations);\n });\n }\n static findOne(where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findOneEntity(this, where, order, offset, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findById(this, id, relations);\n });\n }\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findByIds(this, ids, relations);\n });\n }\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.clearModel(this);\n });\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.every((subA, index) => {\n this.equals(subA, b[index]);\n });\n }\n else if (a instanceof this && b instanceof this) {\n return a.constructor === b.constructor && a.getId() === b.getId();\n }\n }\n}\nexports.BaseModel = BaseModel;\n/**\n * @type {null | BaseDatabase}\n * @private\n */\nBaseModel._database = null;\nBaseModel.RELATION = {\n MANY_TO_MANY: \"many-to-many\",\n MANY_TO_ONE: \"many-to-one\",\n ONE_TO_MANY: \"one-to-many\",\n ONE_TO_ONE: \"one-to-one\"\n};\n//# sourceMappingURL=BaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nclass SyncJob {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromise = Promise.resolve();\n this._queryRunner = null;\n this._finalRes = {};\n this._manyToManyRelations = {};\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (Object.keys(this._lastSyncDates).length === 0) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n yield this._doRuns(requestQueries);\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //disabled in doRuns. Cannot be reenabled sooner, but since lastSyncDates should not have any relations, it should be okay\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().rawQuery(\"PRAGMA foreign_keys = ON;\");\n if (this._finalRes[\"FileMedium\"] && this._finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(yield FileMedium_1.FileMedium.findByIds(this._finalRes[\"FileMedium\"][\"changed\"]));\n }\n return this._finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n //startTransaction maybe allow read, but not write?\n this._queryRunner = yield EasySyncClientDb_1.EasySyncClientDb.getInstance().createQueryRunner();\n this._savePromise = this._queryRunner.query(\"PRAGMA foreign_keys = OFF;\").then(() => {\n return this._queryRunner.startTransaction();\n });\n //Ask for next run until no more runs needed\n let shouldAskAgain;\n do {\n shouldAskAgain = false;\n response = yield SyncJob._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query and save changes\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (res && res.shouldAskAgain) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n //Extract entities\n this._extractEntities(res);\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n yield this._handleManyToManyRelations();\n //wait for savePromises, stop transaction\n return this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.commitTransaction();\n })).catch((e) => __awaiter(this, void 0, void 0, function* () {\n console.error(e);\n yield this._queryRunner.rollbackTransaction();\n })).finally(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.release();\n }));\n });\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return;\n }\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedEntities = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedEntities.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n let schemaDefinition = modelClass.getSchemaDefinition();\n let relations = schemaDefinition[\"relations\"];\n let columns = schemaDefinition[\"columns\"];\n let changedEntityIds = [];\n changedEntities.forEach(entity => {\n Object.keys(relations).forEach(relation => {\n if (relations[relation].type === \"many-to-many\" && Array.isArray(entity[relation])) {\n let table = relations[relation].joinTable;\n let ownName;\n if (table.joinColumn && table.joinColumn.name) {\n ownName = table.joinColumn.name;\n }\n else {\n ownName = modelClass.getSchemaName();\n ownName = ownName.substr(0, 1).toLowerCase() + ownName.substr(1) + \"Id\";\n }\n let otherName;\n if (table.inverseJoinColumn && table.inverseJoinColumn.name) {\n otherName = table.inverseJoinColumn.name;\n }\n else {\n otherName = relations[relation].target;\n otherName = otherName.substr(0, 1).toLowerCase() + otherName.substr(1) + \"Id\";\n }\n this._manyToManyRelations[table.name] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name], {});\n this._manyToManyRelations[table.name][\"values\"] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"values\"], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"delete_\" + ownName], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName].push(entity.id);\n let otherIdsAlreadyInserted = [];\n let insertedRelations = this._manyToManyRelations[table.name][\"values\"].filter(relValue => relValue[ownName] === entity.id);\n insertedRelations.forEach(relValue => otherIdsAlreadyInserted.push(relValue[otherName]));\n entity[relation].forEach(otherId => {\n let index = otherIdsAlreadyInserted.indexOf(otherId);\n if (index === -1) {\n let value = {};\n value[ownName] = entity.id;\n value[otherName] = otherId;\n this._manyToManyRelations[table.name][\"values\"].push(value);\n }\n });\n }\n else if ((relations[relation].type === \"many-to-one\"\n || (relations[relation].type === \"one-to-one\" && relations[relation].joinColumn))\n //DO not check for a value of the relation here. Else If the first entity has no value set, the field\n // will not be set and therefore ignored for all other entites too\n ) {\n let fieldName;\n if (relations[relation].joinColumn && relations[relation].joinColumn.name) {\n fieldName = relations[relation].joinColumn.name;\n }\n else {\n fieldName = relation + \"Id\";\n }\n entity[fieldName] = entity[relation];\n }\n delete entity[relation];\n });\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n changedEntityIds.push(entity.id);\n });\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._insertOrReplace(modelClass, changedEntities); }));\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._deleteModels(modelClass, deletedModelsIds); }));\n this._finalRes[modelName] = shared_1.Helper.nonNull(this._finalRes[modelName], { \"deleted\": [], \"changed\": [] });\n this._finalRes[modelName][\"deleted\"].push(...deletedModelsIds);\n this._finalRes[modelName][\"changed\"].push(...changedEntityIds);\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n _insertOrReplace(modelClass, changedEntities) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_INSERT_IN_ONE_GO = 300;\n if (changedEntities.length === 0) {\n return;\n }\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = schemaDefinition.name;\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let columns = schemaDefinition.columns;\n //Get fields from entity for including relation fields\n const fields = Object.keys(changedEntities[0]);\n let values = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(changedEntities, (entity) => __awaiter(this, void 0, void 0, function* () {\n let valueString = [];\n //Stellt die reihenfolge sicher\n fields.forEach(field => {\n let val = entity[field];\n if (columns[field] && columns[field].transformer) {\n val = columns[field].transformer.to(val);\n }\n if (columns[field] && columns[field].type === BaseDatabase_1.BaseDatabase.TYPES.SIMPLE_JSON) {\n val = JSON.stringify(val);\n }\n values.push(val);\n valueString.push(\"?\");\n });\n valueStrings.push(\"(\" + valueString.join(\",\") + \")\");\n if (valueStrings.length >= MAX_INSERT_IN_ONE_GO) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n valueStrings = [];\n values = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n }\n });\n }\n _deleteModels(modelClass, deletedModelsIds) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_DELETES_IN_ONE_GO = 300;\n if (deletedModelsIds.length === 0) {\n return;\n }\n let tableName = modelClass.getSchemaName();\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let ids = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(deletedModelsIds, (entityId) => __awaiter(this, void 0, void 0, function* () {\n ids.push(entityId);\n valueStrings.push(\"?\");\n if (valueStrings.length >= MAX_DELETES_IN_ONE_GO) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n valueStrings = [];\n ids = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n }\n });\n }\n _handleManyToManyRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._savePromise;\n let promises = [];\n Object.keys(this._manyToManyRelations).forEach(table => {\n let sql = \"DELETE FROM \" + table + \" WHERE \";\n let deleteSqls = [];\n Object.keys(this._manyToManyRelations[table]).forEach(field => {\n if (field.startsWith(\"delete_\")) {\n deleteSqls.push(field.substr(7) + \" IN (\" + this._manyToManyRelations[table][field].join(\",\") + \")\");\n }\n });\n sql += deleteSqls.join(\" OR \") + \";\";\n promises.push(this._queryRunner.query(sql).then(() => {\n if (this._manyToManyRelations[table].values.length > 0) {\n let fields = Object.keys(this._manyToManyRelations[table].values[0]);\n let valueStrings = [];\n this._manyToManyRelations[table].values.forEach(valuePair => {\n let values = [];\n fields.forEach(field => {\n values.push(valuePair[field]);\n });\n valueStrings.push(\"(\" + values.join(\",\") + \")\");\n });\n let sql = \"INSERT OR REPLACE INTO \" + table + \"(\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\") + \";\";\n return this._queryRunner.query(sql);\n }\n }));\n });\n yield Promise.all(promises);\n });\n }\n}\nexports.SyncJob = SyncJob;\nSyncJob.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"./DataManager\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"./Translator\");\nconst Toast_1 = require(\"./Toast/Toast\");\nclass Form {\n constructor(formElem, urlOrCallback, method) {\n this._formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this._formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this._formElem.elements[k].type && (this._formElem.elements[k].type === \"checkbox\" || this._formElem.elements[k].type === \"radio\")) {\n this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k];\n }\n else if (this._formElem.elements[k].type && this._formElem.elements[k].type === \"file\") {\n if (this._formElem.elements[k + \"-hidden\"]) {\n this._formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this._formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this._formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this._formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this._formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this._formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this._formElem.elements).forEach(elemKey => {\n this._formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) {\n this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this._formElem && this._formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this._formElem.classList.add(\"sending\");\n }\n else {\n this._formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this._formElem && !this._formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this._formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeleteUserManagement1000000000000 = void 0;\nclass DeleteUserManagement1000000000000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"roleAccess\", true);\n yield queryRunner.dropTable(\"roleChildren\", true);\n yield queryRunner.dropTable(\"userRole\", true);\n if (this._isServer()) {\n yield queryRunner.dropTable(\"user_access\", true);\n }\n yield queryRunner.dropTable(\"access\", true);\n yield queryRunner.dropTable(\"role\", true);\n yield queryRunner.dropTable(\"user\", true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.DeleteUserManagement1000000000000 = DeleteUserManagement1000000000000;\n//# sourceMappingURL=DeleteUserManagement.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupUserManagement1000000001000 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupUserManagement1000000001000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._addAccess(queryRunner);\n yield this._addRole(queryRunner);\n yield this._addUser(queryRunner);\n yield this._addRoleAccess(queryRunner);\n yield this._addRoleChildren(queryRunner);\n yield this._addUserRole(queryRunner);\n if (this._isServer()) {\n yield this._addUserAccess(queryRunner);\n }\n });\n }\n _addAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let accessTable = new typeorm_1.Table({\n name: \"access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(accessTable, true);\n });\n }\n _addRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleTable = new typeorm_1.Table({\n name: \"role\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(roleTable, true);\n });\n }\n _addUser(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userTable = new typeorm_1.Table({\n name: \"user\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"username\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"email\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"password\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"activated\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"blocked\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"salt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n ]\n });\n return yield queryRunner.createTable(userTable, true);\n });\n }\n _addRoleAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleAccessTable = new typeorm_1.Table({\n name: \"roleAccess\",\n columns: [\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"accessId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_38300dd4683a436f8db90b42bd\",\n columnNames: [\"roleId\"]\n },\n {\n name: \"IDX_bd55fc382ad2480f75a17e33cb\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_38300dd4683a436f8db90b42bd9\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_bd55fc382ad2480f75a17e33cb5\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleAccessTable, true);\n });\n }\n _addRoleChildren(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleChildrenTable = new typeorm_1.Table({\n name: \"roleChildren\",\n columns: [\n {\n name: \"childId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"parentId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_030234c342756c67cefa480687\",\n columnNames: [\"childId\"]\n },\n {\n name: \"IDX_35741f2d68a65c2765047705f8\",\n columnNames: [\"parentId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_roleChildren_childId\",\n columnNames: [\"childId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_roleChildren_parentId\",\n columnNames: [\"parentId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleChildrenTable, true);\n });\n }\n _addUserRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"userRole\",\n columns: [\n {\n name: \"userId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_userRole_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userRole_roleId\",\n columnNames: [\"roleId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userRole_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userRole_roleId\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n _addUserAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"user_access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"userId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n },\n {\n name: \"accessId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n }\n ],\n indices: [\n {\n name: \"IDX_userAccess_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userAccess_accessId\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userAccess_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userAccess_accessId\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupUserManagement1000000001000 = SetupUserManagement1000000001000;\n//# sourceMappingURL=SetupUserManagement.js.map","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config = {\n translations: {},\n fallbackLanguage: \"en\",\n markUntranslatedTranslations: true,\n markTranslations: false,\n logMissingTranslations: true\n }) {\n this._dynamicKey = 0;\n this._translations = {};\n this.addDynamicTranslations(Translator._translations);\n this.addDynamicTranslations(config.translations);\n this._fallbackLanguage = config.fallbackLanguage;\n this._markUntranslatedTranslations = config.markUntranslatedTranslations;\n this._markTranslations = config.markTranslations;\n if (config.logMissingTranslations === true) {\n this._logMissingTranslationsFunction = (missingTranslation, language) => {\n if (language === this._fallbackLanguage) {\n console.error(\"missing base translation for key \" + missingTranslation);\n }\n else {\n console.warn(\"missing translation for language >\" + language + \"< and key >\" + missingTranslation + \"<\");\n }\n };\n }\n else if (typeof config.logMissingTranslations === \"function\") {\n this._logMissingTranslationsFunction = config.logMissingTranslations;\n }\n else {\n this._logMissingTranslationsFunction = null;\n }\n this._translationCallbacks = new Map();\n this._lastTranslationCallbackId = 0;\n }\n createDynamicKey() {\n this._dynamicKey++;\n return \"translator-dynamic-\" + new Date().getTime() + \"-\" + this._dynamicKey;\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @param language\n * @returns {*}\n */\n translate(key, args, language) {\n if (shared_1.Helper.isNull(key)) {\n return \"\";\n }\n language = shared_1.Helper.nonNull(language, args, this._fallbackLanguage);\n let translation = null;\n key = key.toLowerCase();\n if (shared_1.Helper.isNotNull(this._translations[language]) && shared_1.Helper.isNotNull(this._translations[language][key])) {\n translation = this._translations[language][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n if (this._translations[this._fallbackLanguage]) {\n translation = this._translations[this._fallbackLanguage][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n translation = key;\n }\n if (this._markUntranslatedTranslations) {\n translation = \">>\" + translation + \"<<\";\n }\n }\n if (this._markTranslations) {\n translation = \"$\" + translation + \"$\";\n }\n if (args !== undefined) {\n translation = Translator._format(translation, args);\n }\n return translation;\n }\n /**\n * Fügt neue Übersetzungen hinzu\n * @param trans\n */\n addDynamicTranslations(trans) {\n for (let lang in trans) {\n if (!this._translations[lang]) {\n this._translations[lang] = {};\n }\n for (let key in trans[lang]) {\n this._translations[lang][key.toLowerCase()] = trans[lang][key];\n }\n }\n }\n getLanguages() {\n return Object.keys(this._translations);\n }\n getFallbackLanguage() {\n return this._fallbackLanguage;\n }\n static translate(key, args, language) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.translate(key, args, language);\n }\n return \"\";\n }\n static addDynamicTranslations(trans) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addDynamicTranslations(trans);\n }\n else {\n Object.keys(trans).forEach(lang => {\n if (shared_1.Helper.isNull(Translator._translations[lang])) {\n Translator._translations[lang] = {};\n }\n Object.assign(Translator._translations[lang], trans[lang]);\n });\n }\n }\n static init(config) {\n Translator.instance = new Translator(config);\n }\n /**\n * @returns {Translator|null}\n */\n static getInstance() {\n return Translator.instance;\n }\n static _isValid(translation) {\n return (typeof translation === \"string\");\n }\n static _format(translation, args) {\n return translation.replace(/{(\\d+)}/g, function (match, number) {\n return args[number] !== undefined ? args[number] : match;\n });\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { MissingDeleteDateColumnError } from \"../error/MissingDeleteDateColumnError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SoftDeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(SoftDeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SoftDeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SoftDeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n SoftDeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, returningResultsEntityUpdator, _a, sql, parameters, updateResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n }\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SoftDeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SoftDeleteQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SoftDeleteQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n SoftDeleteQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n SoftDeleteQueryBuilder.prototype.createUpdateExpression = function () {\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n if (!metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.expressionMap.mainAlias + \"\\\"\");\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var newParameters = {};\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new Error(\"The queryType must be \\\"soft-delete\\\" or \\\"restore\\\"\");\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n return SoftDeleteQueryBuilder;\n}(QueryBuilder));\nexport { SoftDeleteQueryBuilder };\n\n//# sourceMappingURL=SoftDeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XSSHelper = void 0;\nclass XSSHelper {\n static escapeHTML(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n const MAP = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function (m) {\n return MAP[m];\n });\n }\n static escapeJS(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n return text.replace(/[<]([\\\\s]*\\\\\\/?[\\\\s]*)script([^<]*)[>]/g, function (match, p1, p2) {\n return \"<\" + p1 + \"sc‌ript\" + p2 + \">\";\n });\n }\n}\nexports.XSSHelper = XSSHelper;\n//# sourceMappingURL=XSSHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SiteManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst AbstractSite_1 = require(\"./AbstractSite\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst Context_1 = require(\"./Context\");\nconst Translator_1 = require(\"../Translator\");\nconst DataManager_1 = require(\"../DataManager\");\nconst HistoryManager_1 = require(\"../HistoryManager\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Manager-Klasse für die Seiten\n */\nclass SiteManager {\n /**\n * Constructor für Manager. Fügt Listener für zurück (onpopstate) hinzu\n */\n constructor() {\n this._isInit = false;\n }\n /**\n *\n * @return {SiteManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new SiteManager();\n }\n return this._instance;\n }\n /**\n * @param siteDivId\n * @param deepLinks\n */\n init(siteDivId, deepLinks) {\n this._siteDiv = null;\n this._siteStack = [];\n this._siteDiv = document.getElementById(siteDivId);\n this._titleTranslationCallbackId = null;\n this._appEndedListener = null;\n this._inversedDeepLinks = Helper_1.Helper.invertKeyValues(deepLinks);\n //Listener, welcher beim klicken auf Zurück oder Forward ausgeführt wird\n HistoryManager_1.HistoryManager.getInstance().setOnPopStateListener((state, direction) => {\n //Falls zurück\n if (direction === HistoryManager_1.HistoryManager.BACK) {\n this.goBack();\n }\n //Falls vorwärts\n else if (HistoryManager_1.HistoryManager.FORWARD === direction) {\n if (this._siteStack.indexOf(state.state.site) !== -1) {\n this.toForeground(state.state.site);\n }\n else {\n this.startSite(state.state.site.constructor, state.state.parameters);\n }\n }\n });\n //Cordova-Callbacks\n document.addEventListener(\"pause\", () => this._pauseSite(), false);\n document.addEventListener(\"resume\", () => __awaiter(this, void 0, void 0, function* () { return yield this._resumeSite(); }), false);\n document.addEventListener(\"menubutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onMenuPressed();\n }\n }, false);\n document.addEventListener(\"searchbutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onSearchPressed();\n }\n }, false);\n window.addEventListener(\"beforeunload\", e => {\n const returnMessage = this.beforeUnload(e);\n if (returnMessage !== null) {\n e.preventDefault();\n e.returnValue = returnMessage;\n return returnMessage;\n }\n });\n this._isInit = true;\n }\n setAppEndedListener(listener) {\n this._appEndedListener = listener;\n }\n goBack() {\n if (this._siteStack.length >= 1) {\n let site = this.getCurrentSite();\n if (site && site.onBackPressed() !== false) {\n this.endSite(site);\n }\n }\n }\n /**\n * gibt die aktuelle Seite zurück\n * @returns AbstractSite\n */\n getCurrentSite() {\n if (this._siteStack.length >= 1) {\n return this._siteStack[this._siteStack.length - 1];\n }\n return null;\n }\n /**\n * Erstellt eine neue Seite und zeigt diese an. ParamsPromise kann entweder ein Promise oder ein Objekt oder null sein.\n *\n * @param siteConstructor\n * @param paramsPromise\n * @returns {Promise}\n */\n startSite(siteConstructor, paramsPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n //Testen, ob der Constructor vom richtigen Typen ist\n if (!(siteConstructor.prototype instanceof AbstractSite_1.AbstractSite)) {\n throw {\n \"error\": \"wrong class given! Expected AbstractSite, given \" + siteConstructor.name\n };\n }\n EventManager_1.EventManager.trigger(\"site-manager-start-site\", {\n site: siteConstructor, paramPromise: paramsPromise\n });\n //Loading-Symbol, falls ViewParameters noch länger brauchen\n let loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n this._siteDiv.appendChild(loadingSymbol);\n //create Site\n let site = new siteConstructor(this);\n this._siteStack.unshift(site);\n //Wartet auf onConstruct, viewPromise, onViewLoaded und zeigt dann Seite\n Promise.resolve(paramsPromise).then((params) => __awaiter(this, void 0, void 0, function* () {\n site._onConstructPromise = site.onConstruct(Helper_1.Helper.nonNull(params, {}));\n yield Promise.all([site._onConstructPromise, site.getViewPromise()]);\n //If site is ended inside onConstruct, don't do anything\n if (site._state !== Context_1.Context.STATE_DESTROYED && site._state !== Context_1.Context.STATE_DESTROYING) {\n yield site.callOnViewLoaded();\n site._viewLoadedPromise.resolve();\n return this._show(site);\n }\n loadingSymbol.remove();\n })).catch((e) => {\n console.error(\"site start error for site \", siteConstructor.name, e);\n site.getFinishResolver().reject(e);\n loadingSymbol.remove();\n //Zeige alte Seite im Fehlerfall wieder an\n for (let i = this._siteStack.length - 1; i >= 0; i--) {\n if (this._siteStack[i] !== site) {\n return this._show(this._siteStack[i]);\n }\n }\n site._viewLoadedPromise.reject();\n });\n //Gebe Site-Promise zurück\n return site.getFinishPromise();\n });\n }\n updateUrl(site, args) {\n let url = this._generateUrl(site, args);\n HistoryManager_1.HistoryManager.getInstance().replaceState({\n 'site': site,\n 'parameters': args\n }, site.constructor.name, url);\n }\n _generateUrl(site, args) {\n let deepLink = this.getDeepLinkFor(site);\n let url = [location.protocol, '//', location.host, location.pathname].join('');\n if (Helper_1.Helper.isNotNull(deepLink)) {\n args[\"s\"] = deepLink;\n url = [url, DataManager_1.DataManager.buildQuery(args)].join('');\n }\n return url;\n }\n /**\n * Gibt einen DeepLink zurück\n *\n * @param site\n * @return string\n */\n getDeepLinkFor(site) {\n return this._inversedDeepLinks[site.constructor];\n }\n /**\n * Pausiert eine Seite\n *\n * @param site\n * @private\n */\n _pauseSite(site) {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && site._state === Context_1.Context.STATE_RUNNING) {\n site._pauseParameters = site.onPause();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n }\n }\n /**\n * Lässt eine Seite weiterlaufen\n *\n * @param site\n * @private\n */\n _resumeSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && (site._state === Context_1.Context.STATE_PAUSED || site._state === Context_1.Context.STATE_VIEW_LOADED)) {\n yield site.getViewPromise();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(site._view);\n yield Translator_1.Translator.getInstance().updateTranslations();\n if (Helper_1.Helper.isNull(site._historyId)) {\n site._historyId = HistoryManager_1.HistoryManager.getInstance().pushState({\n 'site': site,\n 'parameters': site.getParameters()\n }, site.constructor.name, this._generateUrl(site, site.getParameters()));\n }\n else {\n HistoryManager_1.HistoryManager.getInstance().stateToCurrentPosition(site._historyId);\n }\n yield site.onStart(site._pauseParameters);\n }\n });\n }\n /**\n * Zeigt eine Seite an\n *\n * @param site\n * @returns {Promise<*>}\n * @private\n */\n _show(site) {\n return __awaiter(this, void 0, void 0, function* () {\n //check if site is ended\n if (site._state === Context_1.Context.STATE_DESTROYING || site._state === Context_1.Context.STATE_DESTROYED) {\n return;\n }\n //Mache nichts, wenn Seite bereits angezeigt wird\n if (site._state === Context_1.Context.STATE_RUNNING && this.getCurrentSite() === site) {\n return;\n }\n //Speichere alte Seite\n this._pauseSite();\n //Zeige Ladesymbol\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n //Hinzufügen/Updaten zum SiteStack\n let currentSiteIndex = this._siteStack.indexOf(site);\n if (-1 !== currentSiteIndex) {\n this._siteStack.splice(currentSiteIndex, 1);\n }\n this._siteStack.push(site);\n //Anzeigen der Seite. Stelle sicher, dass die View wirklich geladen ist!\n return site.getViewPromise().then(() => __awaiter(this, void 0, void 0, function* () {\n //Stelle sicher, dass in der Zwischenzeit keine andere Seite gestartet wurde\n if (this.getCurrentSite() === site) {\n yield this._resumeSite(site);\n }\n }));\n });\n }\n /**\n * Beendet eine Seite. Muss nicht die aktive Seite sein\n *\n * @param site\n */\n endSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n // return site._onConstructPromise.then(async () => {\n //Aus Index entfernen\n let index = this._siteStack.indexOf(site);\n this._siteStack.splice(index, 1);\n //Seite war/ist die aktive Seite\n if (index === this._siteStack.length) {\n this._pauseSite(site);\n //Seite ist aktiv, zeige Ladesymbol\n this._siteDiv.appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol('overlay'));\n site.getFinishPromise().then(() => {\n let newSiteToShow = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(newSiteToShow)) {\n this.toForeground(newSiteToShow);\n }\n });\n }\n if (this._siteStack.length <= 0) {\n console.log(\"stack is empty, starting normal site!\");\n HistoryManager_1.HistoryManager.getInstance().cutStack(0);\n HistoryManager_1.HistoryManager.getInstance().go(-1 * history.length, true);\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(document.createTextNode(\"App ist beendet\"));\n if (typeof this._appEndedListener === \"function\") {\n this._appEndedListener(this);\n }\n }\n site._context = Context_1.Context.STATE_DESTROYING;\n yield site.onDestroy();\n site._context = Context_1.Context.STATE_DESTROYED;\n site.getFinishResolver().resolve(site._result);\n });\n }\n /**\n * Stellt eine aktive Seite in den Vordergrund;\n * @param site\n * @returns {Promise<*>}\n */\n toForeground(site) {\n return this._show(site);\n }\n /**\n * Updated den Seitentitel. Dafür gibt es im translation-file den Key document-title (document-title-empty, falls title null),\n * der als Parameter in der Übersetzung den übergebenen Title übergeben bekommt.\n *\n * Der übergebene title wird mit den angebenenen argumenten zuerst übersetz, bevor der gesamte document-Title überstzt wird\n *\n * Wenn args === false, dann wird title nicht übersetzt\n *\n * Durch das argument titleTemplate kann der key im translation-file von document-title individuell abweichen\n *\n * @param title\n * @param args\n * @param titleTemplate\n */\n updateTitle(title, args, titleTemplate) {\n titleTemplate = Helper_1.Helper.nonNull(titleTemplate, Helper_1.Helper.isNull(title) ? \"document-title-empty\" : \"document-title\");\n if (Helper_1.Helper.isNotNull(this._titleTranslationCallbackId)) {\n Translator_1.Translator.removeTranslationCallback(this._titleTranslationCallbackId);\n }\n this._titleTranslationCallbackId = Translator_1.Translator.addTranslationCallback(() => {\n if (args !== false) {\n title = Translator_1.Translator.translate(title, args);\n }\n document.title = Translator_1.Translator.translate(titleTemplate, [title]);\n });\n }\n beforeUnload(e) {\n return this.getCurrentSite().onBeforeUnload(e);\n }\n}\nexports.SiteManager = SiteManager;\nSiteManager._instance = null;\n//# sourceMappingURL=SiteManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DraggedElement = void 0;\nclass DraggedElement {\n constructor(element) {\n this.isDragging = false;\n this.element = element;\n }\n onStart(listener) {\n this.startListener = listener;\n return this;\n }\n onStop(listener) {\n this.stopListener = listener;\n return this;\n }\n onMove(listener) {\n this.moveListener = listener;\n return this;\n }\n start() {\n this.isDragging = true;\n if (!this.previewElement) {\n this.previewElement = this.element.cloneNode(true);\n const styles = getComputedStyle(this.element);\n for (let i = 0; i < styles.length; i++) {\n this.previewElement.style[styles[i]] = styles.getPropertyValue(styles[i]);\n }\n this.previewElement.style.opacity = \"0.6\";\n this.previewElement.style.position = \"fixed\";\n }\n const boundingRect = this.element.getBoundingClientRect();\n this.startPosition = { x: boundingRect.left, y: boundingRect.top };\n this.previewElement.style.top = boundingRect.top + \"px\";\n this.previewElement.style.left = boundingRect.left + \"px\";\n this.previewElement.style.width = (boundingRect.right - boundingRect.left) + \"px\";\n this.previewElement.style.height = (boundingRect.bottom - boundingRect.top) + \"px\";\n document.body.appendChild(this.previewElement);\n if (this.startListener) {\n this.startListener(this.element);\n }\n }\n stop(mousePosition) {\n this.isDragging = false;\n if (this.previewElement) {\n this.previewElement.remove();\n }\n const droppedAt = document.elementFromPoint(mousePosition.x, mousePosition.y);\n if (this.stopListener) {\n this.stopListener(this.element, droppedAt);\n }\n }\n moved() {\n if (this.isDragging && this.moveListener) {\n this.moveListener(this.element);\n }\n }\n moveRelativeTo(relativePos) {\n if (this.startPosition && this.previewElement) {\n const newPosition = { x: this.startPosition.x + relativePos.x, y: this.startPosition.y + relativePos.y };\n this.previewElement.style.left = newPosition.x + \"px\";\n this.previewElement.style.top = newPosition.y + \"px\";\n this.moved();\n }\n }\n}\nexports.DraggedElement = DraggedElement;\n//# sourceMappingURL=DraggedElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotOnlineError = void 0;\nclass NotOnlineError extends Error {\n constructor(message, url) {\n super(message + \" for url \" + url);\n this._url = url;\n }\n}\nexports.NotOnlineError = NotOnlineError;\n//# sourceMappingURL=NotOnlineError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\n/**\n * Manager, welcher sich um die Manipulation von der Historie kümmert\n */\nclass HistoryManager {\n /**\n * Constructor für den Manager. Fügt den onPopstateListener hinzu\n */\n constructor() {\n this._lastStateId = -1;\n this._states = {};\n this._stack = [];\n this._ignoreOnPopState = false;\n this._isUpdateNativeStack = false;\n this._onPopStateListener = null;\n this._currentStackIndex = -1;\n window.onpopstate = (e) => {\n //Wenn nativeStack geupdated wird, mache nichts\n if (this._isUpdateNativeStack) {\n this._isUpdateNativeStack = false;\n return;\n }\n let direction = e.state[\"type\"];\n this._currentStackIndex += direction;\n this._updateNativeHistoryStack();\n //Wenn popState ignoriert werden soll, mache ebenfalls nichts außer Stack updaten\n if (this._ignoreOnPopState) {\n this._ignoreOnPopState = false;\n return;\n }\n //Wenn Listener gesetzt, hole daten und führe Listener aus\n if (typeof this._onPopStateListener === 'function') {\n let data = {};\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n data = this._states[this._stack[this._currentStackIndex]];\n }\n this._onPopStateListener(data, direction, e);\n }\n };\n this._updateNativeHistoryStack();\n }\n /**\n * Updated den History-Stack innerhalb des Browsers\n *\n * @param url\n * @private\n */\n _updateNativeHistoryStack(url) {\n url = Helper_1.Helper.nonNull(url, window.location.href);\n //setze das weitere zurückgehen\n if (this._currentStackIndex >= 0) {\n history.pushState({\n \"type\": HistoryManager.BACK,\n }, \"back\", url);\n }\n history.pushState({\n \"type\": HistoryManager.CURRENT,\n }, \"current\", url);\n if (this._currentStackIndex < this._stack.length - 1) {\n history.pushState({\n \"type\": HistoryManager.FORWARD,\n }, \"forward\", url);\n this._isUpdateNativeStack = true;\n history.go(-1);\n }\n }\n /**\n * Generiert einen neuen History-Eintrag. Gibt die ID des Eintrages zurück\n *\n * @param value\n * @param name\n * @param url\n *\n * @return {number}\n */\n pushState(value, name, url) {\n let newState = {\n state: value,\n title: name,\n url: url\n };\n this._lastStateId++;\n this._states[this._lastStateId] = newState;\n this._currentStackIndex++;\n this._stack.splice(this._currentStackIndex, this._stack.length, this._lastStateId);\n this._updateNativeHistoryStack(url);\n return this._lastStateId;\n }\n /**\n * Ersetzt den Eintrag mit der gegebenen ID. Ist die ID nicht gegeben, wird der aktuelle Eintrag ersetzt\n *\n * @param value\n * @param name\n * @param url\n * @param id\n */\n replaceState(value, name, url, id) {\n id = Helper_1.Helper.nonNull(id, this._stack[this._currentStackIndex]);\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n this._states[id] = {\n state: value,\n title: name,\n url: url\n };\n this._updateNativeHistoryStack(url);\n }\n }\n /**\n * Verschiebt den Eintrag mit der entsprechenden ID an die aktuell aktive Stelle\n * @param id\n */\n stateToCurrentPosition(id) {\n if (Helper_1.Helper.isNotNull(this._states[id])) {\n let oldStackPosition = this._stack.indexOf(id);\n if (oldStackPosition !== -1) {\n this._stack.splice(oldStackPosition, 1);\n this._stack.splice(this._currentStackIndex + ((oldStackPosition <= this._currentStackIndex) ? -1 : 0), 0, id);\n }\n }\n }\n /**\n * Gehe um to in der Historie\n *\n * @param to\n * @param ignoreOnPopState\n */\n go(to, ignoreOnPopState) {\n this._ignoreOnPopState = (Helper_1.Helper.nonNull(ignoreOnPopState, false) === true);\n history.go(to);\n }\n /**\n * Entferne alle Einträge ab at (inklusive). Wenn at nicht gesetzt ist, wird alles über der aktuellen position abgeschnitten\n * @param at\n */\n cutStack(at) {\n at = Helper_1.Helper.nonNull(at, this._currentStackIndex + 1);\n this._stack.splice(at);\n this._currentStackIndex = Math.min(this._currentStackIndex, this._stack.length - 1);\n this._updateNativeHistoryStack();\n }\n /**\n * Alias für this.go(-1)\n */\n back() {\n this.go(-1);\n }\n /**\n * Alias für this.go(1)\n */\n forward() {\n this.go(+1);\n }\n /**\n * Setzt den onPopStateListener\n *\n * @param listener\n */\n setOnPopStateListener(listener) {\n this._onPopStateListener = listener;\n }\n /**\n * Singelton-Getter\n * @return {HistoryManager}\n */\n static getInstance() {\n if (Helper_1.Helper.isNull(HistoryManager._instance)) {\n HistoryManager._instance = new HistoryManager();\n }\n return HistoryManager._instance;\n }\n}\nexports.HistoryManager = HistoryManager;\nHistoryManager.BACK = -1;\nHistoryManager.FORWARD = 1;\nHistoryManager.CURRENT = 0;\n//# sourceMappingURL=HistoryManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorIndicator = void 0;\nconst Singleton_1 = require(\"../Singleton\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ColorIndicator extends Singleton_1.Singleton {\n getAverageImgColor(imgEl, areaWidth, areaHeight) {\n //https://stackoverflow.com/questions/2541481/get-average-color-of-image-via-javascript\n let blockSize = 5, // only visit every 5 pixels\n defaultRGB = { r: 255, g: 255, b: 255 }, // for non-supporting envs\n canvas = document.createElement('canvas'), context = canvas.getContext && canvas.getContext('2d'), data, width, height, i = -4 * blockSize, //start with first pixel\n length, rgb = { r: 0, g: 0, b: 0 }, count = 0;\n if (!context) {\n return defaultRGB;\n }\n height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;\n width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;\n areaWidth = Helper_1.Helper.nonNull(areaWidth, width);\n areaHeight = Helper_1.Helper.nonNull(areaWidth, height);\n context.drawImage(imgEl, 0, 0);\n try {\n data = context.getImageData(0, 0, Math.min(width, areaWidth), Math.min(height, areaHeight));\n }\n catch (e) {\n /* security error, img on diff domain */\n console.error(e);\n return defaultRGB;\n }\n length = data.data.length;\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb.r += data.data[i];\n rgb.g += data.data[i + 1];\n rgb.b += data.data[i + 2];\n }\n // ~~ used to floor values\n rgb.r = ~~(rgb.r / count);\n rgb.g = ~~(rgb.g / count);\n rgb.b = ~~(rgb.b / count);\n return rgb;\n }\n invertColorBW(r, g, b) {\n return this.invertColor(r, g, b, true);\n }\n invertColor(r, g, b, bw) {\n if (typeof r === \"object\") {\n bw = g || bw;\n g = r.g;\n b = r.b;\n r = r.r;\n }\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? { r: 0, g: 0, b: 0 }\n : { r: 255, g: 255, b: 255 };\n }\n // invert color components\n r = (255 - r);\n g = (255 - g);\n b = (255 - b);\n // pad each with zeros and return\n return {\n r: r,\n g: g,\n b: b,\n };\n }\n toHEX(r, g, b) {\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n r = r.toString(16);\n g = g.toString(16);\n b = b.toString(16);\n return \"#\" + Helper_1.Helper.padZero(r) + Helper_1.Helper.padZero(g) + Helper_1.Helper.padZero(b);\n }\n}\nexports.ColorIndicator = ColorIndicator;\n//# sourceMappingURL=ColorIndicator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Singleton = void 0;\nclass Singleton {\n /**\n *\n * @returns {Singleton|this}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new this();\n }\n return this._instance;\n }\n}\nexports.Singleton = Singleton;\n//# sourceMappingURL=Singleton.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MasterSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass MasterSite extends AbstractSite_1.AbstractSite {\n constructor(siteManager, view) {\n super(siteManager, view);\n this._delegates = [];\n }\n addDelegate(delegateSite) {\n this._delegates.push(delegateSite);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onConstruct(constructParameters);\n }));\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onStart(pauseArguments);\n }));\n });\n }\n onBackPressed() {\n super.onBackPressed();\n this._delegates.forEach(delegate => {\n delegate.onBackPressed();\n });\n }\n onMenuPressed() {\n super.onMenuPressed();\n this._delegates.forEach(delegate => {\n delegate.onMenuPressed();\n });\n }\n onSearchPressed() {\n super.onSearchPressed();\n this._delegates.forEach(delegate => {\n delegate.onSearchPressed();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onViewLoaded();\n }));\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onPause.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onPause();\n }));\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onDestroy.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onDestroy();\n }));\n });\n }\n}\nexports.MasterSite = MasterSite;\n//# sourceMappingURL=MasterSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ToastManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nclass ToastManager {\n constructor() {\n this._toastContainer = document.querySelector(ToastManager._toastContainerSelector);\n this._toastTemplate = this._toastContainer.querySelector(\".toast-template\");\n this._toastTemplate.classList.remove(\"toast-template\");\n this._toastTemplate.remove();\n }\n showToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = toast.getMessage();\n if (toast.isShouldTranslate()) {\n message = Translator_1.Translator.makePersistentTranslation(message, toast.getTranslationArgs());\n }\n else {\n message = document.createTextNode(message);\n }\n let toastElement = this._toastTemplate.cloneNode(true);\n toastElement.querySelector(\".message\").appendChild(message);\n toast.setToastElement(toastElement);\n this._toastContainer.appendChild(toastElement);\n toastElement.style.opacity = 1;\n return new Promise(resolve => {\n toastElement.querySelector(\".message\").onclick = () => {\n this.hideToast(toast);\n resolve(true);\n };\n setTimeout(() => {\n this.hideToast(toast);\n resolve(false);\n }, toast.getDuration());\n });\n });\n }\n hideToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n //TODO Animation hinzufügen\n let element = toast.getToastElement();\n if (Helper_1.Helper.isNotNull(element)) {\n element.style.opacity = 0;\n return new Promise(res => {\n setTimeout(() => {\n element.remove();\n res();\n }, 250);\n });\n }\n return Promise.reject(\"toast is not showing\");\n });\n }\n static setToastContainerSelector(selector) {\n ToastManager._toastContainerSelector = selector;\n }\n static getInstance() {\n if (!ToastManager._instance) {\n ToastManager._instance = new ToastManager();\n }\n return ToastManager._instance;\n }\n}\nexports.ToastManager = ToastManager;\nToastManager._instance = null;\nToastManager._toastContainerSelector = \"#toast-container\";\n//# sourceMappingURL=ToastManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DropdownRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst AccordionRenderer_1 = require(\"./AccordionRenderer\");\nconst Submenu_1 = require(\"../Submenu\");\n/**\n * Erstellt ein Dropdown-Menu\n */\nclass DropdownRenderer extends AccordionRenderer_1.AccordionRenderer {\n constructor(parentElement) {\n super(parentElement);\n this._accordionMenuRenderer = new AccordionRenderer_1.AccordionRenderer();\n }\n /**\n * Rendert die SubmenuAction\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.renderSubmenuAction(action);\n }\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.add('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('opens-right');\n return submenuActionElement;\n }\n /**\n * Erstellt ein SubmenuParent\n *\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.createSubmenuParentElement(action);\n }\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-dropdown-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet das Element für eine Action\n * @param action\n */\n updateAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.updateAction(action);\n }\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n submenuElement.classList.add(\"js-dropdown-active\");\n }\n else {\n submenuElement.classList.remove(\"js-dropdown-active\");\n }\n }\n }\n}\nexports.DropdownRenderer = DropdownRenderer;\n//# sourceMappingURL=DropdownRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuRenderer = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\n/**\n * Rendert ein Menü\n */\nclass MenuRenderer {\n /**\n * Jeder Renderer hat ein Element, wo er die gerenderten Elemente hinzufügt\n *\n * @param parentElement\n */\n constructor(parentElement) {\n this._parentElement = parentElement;\n this._renderedElements = {};\n }\n /**\n * Stößt das Rendern an\n * @param menu\n * @param parentElement\n */\n render(menu, parentElement) {\n let actions = menu.getActions();\n //Funktion wird auch für Submenüs genutzt. Daher muss hier ein anderes parentElement übergeben werden\n parentElement = Helper_1.Helper.nonNull(parentElement, this._parentElement);\n if (Helper_1.Helper.isNotNull(parentElement)) {\n Helper_1.Helper.removeAllChildren(parentElement);\n //Füge Elemente hinzu\n actions.forEach(action => {\n parentElement.appendChild(this.getElementForAction(action));\n });\n //Setze den onclick-Listener\n parentElement.onclick = (e) => {\n if (typeof menu.getOnClickListener() === 'function') {\n menu.getOnClickListener()(e);\n }\n };\n }\n }\n /**\n * Führt das Rendern der Elemente aus und ersetzt evtl schon alte Elemente\n * Auslagern von renderAction und renderSubmenuAction zum besseren überschreiben der Funktionen.\n *\n * renderSubmenuAction und renderAction sollten nur von dieser Funktion aufgerufen werden, damit die\n * _rendererElements aktuell bleiben!\n *\n * @param action\n * @returns {HTMLElement}\n * @private\n */\n _triggerRenderAction(action) {\n let oldElement = this._renderedElements[action.getId()];\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._renderedElements[action.getId()] = this.renderSubmenuAction(action);\n }\n else {\n this._renderedElements[action.getId()] = this.renderAction(action);\n }\n this.updateAction(action);\n if (Helper_1.Helper.isNotNull(oldElement)) {\n oldElement.replaceWith(this._renderedElements[action.getId()]);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Gibt das Element zur Action. Falls es noch nicht existiert, wird dieses gerendert\n * @param action\n * @returns {*}\n */\n getElementForAction(action) {\n if (Helper_1.Helper.isNull(this._renderedElements[action.getId()])) {\n this._triggerRenderAction(action);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n renderAction(action) {\n return null;\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n updateAction(action) {\n }\n /**\n * Rendert eine SubmenuAction, kann/sollte überladen werden\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let actionElement = this.renderAction(action);\n action.getSubmenu().sortActions();\n let submenuParentElement = this.createSubmenuParentElement(action);\n this.render(action.getSubmenu(), submenuParentElement);\n actionElement.appendChild(submenuParentElement);\n return actionElement;\n }\n ;\n /**\n * Erstellt ein Element für ein Submenu. Sollte überladen werden\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n return document.createElement(\"ul\");\n }\n}\nexports.MenuRenderer = MenuRenderer;\n//# sourceMappingURL=MenuRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Submenu = void 0;\nconst Menu_1 = require(\"./Menu\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Submenü, ein untermenü\n */\nclass Submenu extends Menu_1.Menu {\n /**\n * Constructor für ein Submenu\n *\n * Bekommt parameter für die OpenSubmenuAction übergeben und reicht diese weiter.\n * Renderer besitzt das Menü keine, da die Renderer des ParentMenus genutzt werden\n * Actions können nicht bei der Erstellung hinzugefügt werden\n *\n * @param title\n * @param showFor\n * @param order\n * @param icon\n * @param renderers\n */\n constructor(title, showFor, order, icon, renderers) {\n super(Helper_1.Helper.nonNull(renderers, []));\n this._parentAction = new OpenSubmenuAction_1.OpenSubmenuAction(title, this, showFor, order, icon);\n this._isOpen = false;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n *\n * @param menu\n * @return {Submenu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Submenu());\n menu = super.copy(menu);\n menu._isOpen = this._isOpen;\n return menu;\n }\n /**\n * Setzt die ParentAction\n *\n * @param action\n */\n setParentAction(action) {\n this._parentAction = action;\n }\n /**\n * Gibt das ParentMenu zurück\n */\n getParentMenu() {\n return this._parentAction.getMenu();\n }\n /**\n * Erstelle keinen onClickListener, damit der Listener aus dem Obermenü aufgerufen wird\n *\n * @returns {null}\n * @private\n */\n _generateOnClickListener() {\n return null;\n }\n /**\n * Wird vom Obermenü aufgerufen, um die ensprechende Action zu finden\n *\n * @param actionId\n * @param event\n * @returns {boolean}\n */\n click(actionId, event) {\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n if (!(this._actions[i] instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.close();\n }\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n return null;\n }\n /**\n * Öffnet oder schließt das Menü\n */\n toggle() {\n if (this._isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * öffnet das Menü und updatet die Elemente\n */\n open() {\n this._isOpen = true;\n this.openSubmenu(this);\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n openSubmenu(submenu) {\n this.getParentMenu().openSubmenu(submenu);\n }\n /**\n * schließt das Menü und updatet die Elemente\n */\n close() {\n this._isOpen = false;\n super.close();\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n /**\n * Gibt die ParentAction zurück\n *\n * @returns {OpenSubmenuAction}\n */\n getParentAction() {\n return this._parentAction;\n }\n /**\n * Updated eine Action. Da ein Submenu keine Renderer hat, muss es ans parentMenu weitergegeben werden\n * @param action\n */\n updateAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.updateAction(action);\n }\n }\n redrawAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.redrawAction(action);\n }\n }\n /**\n * Gibt an, ob das Submenu offen ist oder nicht\n *\n * @returns {boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n}\nexports.Submenu = Submenu;\n//# sourceMappingURL=Submenu.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeChildFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass SwipeChildFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, view);\n this._parent = null;\n }\n onSwipeRight() {\n return __awaiter(this, void 0, void 0, function* () {\n this.previousFragment();\n });\n }\n onSwipeLeft() {\n return __awaiter(this, void 0, void 0, function* () {\n this.nextFragment();\n });\n }\n setParent(parent) {\n this._parent = parent;\n }\n nextFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.nextFragment();\n }\n }\n previousFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.previousFragment();\n }\n }\n}\nexports.SwipeChildFragment = SwipeChildFragment;\n//# sourceMappingURL=SwipeChildFragment.js.map","module.exports = __webpack_public_path__ + \"html/chooseDialog.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElemChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nclass ElemChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n valueElem.querySelector(\".choose-dialog-value\").appendChild(valueNames[k]);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ElemChooseDialog = ElemChooseDialog;\n//# sourceMappingURL=ElemChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageSelectionElement = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst defaultView = require(\"../../html/Form/imageSelectionElement.html\");\nclass ImageSelectionElement {\n constructor(name, view) {\n this.images = {};\n this.name = name;\n this.viewLoadedPromise = ViewInflater_1.ViewInflater.getInstance().load(shared_1.Helper.nonNull(view, defaultView)).then((v) => __awaiter(this, void 0, void 0, function* () {\n this.view = v;\n yield this.prepareView();\n this.showSelection();\n return v;\n }));\n }\n prepareView() {\n this.imageContainerTemplate = this.view.querySelector(\".image-selection-image-container\");\n this.imageContainerTemplate.remove();\n this.categoryTemplate = this.view.querySelector(\".image-selection-category\");\n this.categoryTemplate.remove();\n this.imageSelectionContainer = this.view.querySelector(\".image-selection-category-container\");\n this.imageSelectionPreviewContainer = this.view.querySelector(\".image-selection-preview\");\n this.inputElement = this.view.querySelector(\".image-selection-value\");\n this.inputElement.name = this.name;\n const imageSelection = this.view.querySelector(\".image-selection\");\n imageSelection.addEventListener(\"dragenter\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.add(\"highlight\");\n });\n imageSelection.addEventListener(\"dragover\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.add(\"highlight\");\n });\n imageSelection.addEventListener(\"dragleave\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.remove(\"highlight\");\n });\n imageSelection.addEventListener(\"drop\", (e) => __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.remove(\"highlight\");\n if (e instanceof DragEvent) {\n let file = null;\n if (e.dataTransfer.items && e.dataTransfer.items.length >= 1) {\n if (e.dataTransfer.items[0].kind === \"file\") {\n file = e.dataTransfer.items[0].getAsFile();\n }\n }\n else if (e.dataTransfer.files && e.dataTransfer.files.length >= 1) {\n file = e.dataTransfer.files[0];\n }\n if (!file || !file.type.startsWith(\"image/\")) {\n return;\n }\n let imageValue = null;\n let base64 = yield new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result);\n };\n reader.onerror = error => reject(error);\n reader.readAsDataURL(file);\n });\n imageValue = { src: base64, name: file.name };\n this.addImages({ \"Uploads\": [imageValue] });\n this.setValue(imageValue);\n }\n }));\n }\n showSelection() {\n client_1.ViewHelper.removeAllChildren(this.imageSelectionContainer);\n Object.keys(this.images).sort((a, b) => {\n if (a.toLowerCase() === \"uploads\") {\n return -1;\n }\n else if (b.toLowerCase() === \"uploads\") {\n return 1;\n }\n else {\n return a.localeCompare(b);\n }\n }).forEach(category => {\n const categoryElement = this.categoryTemplate.cloneNode(true);\n categoryElement.querySelector(\".image-selection-category-name\").innerText = category;\n this.images[category].forEach(image => {\n let imageContainerElement = this.createImageElement(image);\n imageContainerElement.addEventListener(\"click\", () => this.setValue(image));\n categoryElement.appendChild(imageContainerElement);\n });\n this.imageSelectionContainer.appendChild(categoryElement);\n });\n }\n createImageElement(image) {\n const imageContainerElement = this.imageContainerTemplate.cloneNode(true);\n imageContainerElement.querySelector(\".image-selection-image\").src = image.src;\n if (image.name) {\n imageContainerElement.querySelector(\".image-selection-image-name\").innerText = image.name;\n }\n return imageContainerElement;\n }\n setImages(images) {\n this.images = images;\n if (this.view) {\n this.showSelection();\n }\n }\n addImages(images) {\n Object.keys(images).forEach(category => {\n if (this.images[category]) {\n const sources = this.images[category].map(i => i.src);\n const newImages = images[category].filter(i => {\n return (sources.indexOf(i.src) === -1);\n });\n this.images[category].push(...newImages);\n }\n else {\n this.images[category] = images[category];\n }\n });\n if (this.view) {\n this.showSelection();\n }\n }\n getView() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.viewLoadedPromise;\n });\n }\n setValue(image) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (typeof image === \"string\") {\n image = JSON.parse(image);\n }\n yield this.viewLoadedPromise;\n client_1.ViewHelper.removeAllChildren(this.imageSelectionPreviewContainer);\n if (image.src) {\n this.imageSelectionPreviewContainer.appendChild(this.createImageElement(image));\n }\n this.inputElement.value = JSON.stringify(image);\n }\n catch (e) {\n }\n });\n }\n}\nexports.ImageSelectionElement = ImageSelectionElement;\n//# sourceMappingURL=ImageSelectionElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareDialog = void 0;\nconst Dialog_1 = require(\"../Dialog/Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Dialog/shareDialog.html\");\nclass ShareDialog extends Dialog_1.Dialog {\n constructor(textToShare) {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n view.querySelector(\"#whatsapp-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"\";\n linkToOpen = \"https://web.whatsapp.com/send?text=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n view.querySelector(\"#telegram-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"https://t.me/share/url?url=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n return view;\n }), \"Share\");\n }\n}\nexports.ShareDialog = ShareDialog;\n//# sourceMappingURL=ShareDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AudioChain = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass AudioChain {\n constructor(context, sourceBuffer, chainFunction) {\n this._buffer = sourceBuffer;\n this._shouldLoop = false;\n this._loopStart = null;\n this._loopEnd = null;\n this._chainFunction = chainFunction;\n this._context = context;\n this._startTime = null;\n this._pauseTime = null;\n this._source = null;\n this._running = false;\n }\n setBuffer(buffer) {\n this._buffer = buffer;\n }\n setLooping(shouldLoop, loopStart, loopEnd) {\n this._shouldLoop = shouldLoop;\n if (Helper_1.Helper.isNotNull(loopStart)) {\n this._loopStart = loopStart;\n }\n if (Helper_1.Helper.isNotNull(loopEnd)) {\n this._loopEnd = loopEnd;\n }\n }\n start(delay, offset, duration) {\n return __awaiter(this, void 0, void 0, function* () {\n //sind sonst null, schmeißt in Android 5 einen fehler\n delay = Helper_1.Helper.nonNull(delay, 0);\n offset = Helper_1.Helper.nonNull(offset, 0);\n //Duration darf nicht gesetzt werden\n // duration = Helper.nonNull(duration, -1);\n let source = this._context.createBufferSource();\n source.loop = this._shouldLoop;\n if (Helper_1.Helper.isNotNull(this._loopStart)) {\n source.loopStart = this._loopStart;\n }\n if (Helper_1.Helper.isNotNull(this._loopEnd)) {\n source.loopEnd = this._loopEnd;\n }\n source.buffer = this._buffer;\n yield this._chainFunction(source);\n if (Helper_1.Helper.isNull(duration)) {\n source.start(delay, offset);\n }\n else {\n source.start(delay, offset, duration);\n }\n this._startTime = (new Date()).getTime() - (Helper_1.Helper.nonNull(offset, 0) * 1000);\n this._source = source;\n this._running = true;\n });\n }\n stop(delay) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._source)) {\n delay = Helper_1.Helper.nonNull(delay, 0);\n this._pauseTime = ((new Date()).getTime()) - this._startTime;\n this._running = false;\n return this._source.stop(delay);\n }\n return null;\n });\n }\n resume() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._running) {\n return this.start(null, Helper_1.Helper.nonNull(this._pauseTime, 0) / 1000.0);\n }\n });\n }\n}\nexports.AudioChain = AudioChain;\n//# sourceMappingURL=AudioChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"cordova-sites/dist/shared\");\nconst deTranslations = require(\"../translations/de\");\nconst enTranslations = require(\"../translations/en\");\nclient_1.App.addInitialization(() => {\n shared_1.Translator.addDynamicTranslations({\n \"de\": deTranslations,\n \"en\": enTranslations\n });\n});\n//# sourceMappingURL=translationInit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Access = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass Access extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n}\nexports.Access = Access;\nAccess.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Access);\n//# sourceMappingURL=Access.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ForgotPasswordSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/forgotPasswordSite.html\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"./LoginSite\");\nclass ForgotPasswordSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite_1.LoginSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n if (client_1.Helper.isSet(constructParameters[\"t\"])) {\n this._token = constructParameters[\"t\"];\n }\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#forgot-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().sendForgotPasswordEmail(data[\"email\"])) {\n new client_1.Toast(\"forgot-password-mail sent\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email is not in our database\"\n });\n }\n }));\n let resetForm = new client_1.Form(this.findBy(\"#reset-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().resetPassword(this._token, data[\"password1\"])) {\n new client_1.Toast(\"password resetted\").show();\n yield this.finish();\n }\n else {\n yield new client_1.Toast(\"token is not valid!\").show();\n }\n }));\n resetForm.addValidator(data => {\n let errors = {};\n let hasErrors = false;\n if (data[\"password1\"].trim() === \"\") {\n hasErrors = true;\n errors[\"password1\"] = \"no password set\";\n }\n if (data[\"password1\"] !== data[\"password2\"]) {\n hasErrors = true;\n errors[\"password2\"] = \"not equal to password1\";\n }\n if (hasErrors) {\n return errors;\n }\n else {\n return true;\n }\n });\n if (this._token) {\n this.findBy(\"#reset-password\").classList.remove(\"hidden\");\n this.findBy(\"#forgot-password\").classList.add(\"hidden\");\n }\n return res;\n });\n }\n}\nexports.ForgotPasswordSite = ForgotPasswordSite;\nclient_1.App.addInitialization(app => {\n app.addDeepLink(\"forgotPW\", ForgotPasswordSite);\n});\n//# sourceMappingURL=ForgotPasswordSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotAllowedSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst view = require(\"./../../html/sites/notAllowedSite.html\");\nclass NotAllowedSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n onConstruct(constructParameters) {\n return super.onConstruct(constructParameters);\n }\n onCreateMenu(navbar) {\n return super.onCreateMenu(navbar);\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n yield this.finish();\n return res;\n });\n }\n}\nexports.NotAllowedSite = NotAllowedSite;\n//# sourceMappingURL=NotAllowedSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectUserDialog = void 0;\nconst Dialog_1 = require(\"cordova-sites/dist/client/js/Dialog/Dialog\");\nconst ViewInflater_1 = require(\"cordova-sites/dist/client/js/ViewInflater\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst view = require(\"../../html/dialog/selectUserDialog.html\");\nclass SelectUserDialog extends Dialog_1.Dialog {\n constructor() {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then((view) => __awaiter(this, void 0, void 0, function* () {\n this._loadUserTimeout = null;\n this._usernameInput =\n view.querySelector(\"#username-input\");\n this._usernameInput.addEventListener(\"keydown\", () => {\n clearTimeout(this._loadUserTimeout);\n this._loadUserTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this._loadUsers(this._usernameInput.value);\n }), 500);\n });\n this._userContainer = view.querySelector(\"#user-container\");\n this._userTemplate = view.querySelector(\"#user-template\");\n this._userTemplate.remove();\n this._userTemplate.removeAttribute(\"id\");\n this._loadUsers();\n return view;\n })), \"select user\");\n }\n _loadUsers(username) {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let res = yield DataManager_1.DataManager.load(\"user/listUsers\" + DataManager_1.DataManager.buildQuery({ username: Helper_1.Helper.nonNull(username, \"\") }));\n if (res[\"success\"]) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._userContainer);\n let users = res[\"data\"];\n users.forEach(user => {\n let userElement = this._userTemplate.cloneNode(true);\n userElement.querySelector(\".name\").innerText = user.username;\n userElement.addEventListener(\"click\", () => {\n this._result = user;\n this.close();\n });\n this._userContainer.appendChild(userElement);\n });\n }\n });\n }\n}\nexports.SelectUserDialog = SelectUserDialog;\n//# sourceMappingURL=SelectUserDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileTransferPromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FilePromise\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nclass FileTransferPromise {\n constructor(downloadUrl, storagePath) {\n this.downloadUrl = downloadUrl;\n if (Helper_1.Helper.isNull(storagePath)) {\n let parts = this.downloadUrl.split(\"/\");\n if (parts.length > 0) {\n storagePath = parts[parts.length - 1];\n }\n }\n this.storagePath = storagePath;\n }\n download() {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let blob = DataManager_1.DataManager.fetchBlob(this.downloadUrl);\n let filePromise = yield FilePromise_1.FilePromise.open(this.storagePath);\n let fileWriter = yield filePromise.createWriter();\n // blob = await blob;\n yield fileWriter.write(yield blob);\n });\n }\n}\nexports.FileTransferPromise = FileTransferPromise;\n//# sourceMappingURL=FileTransferPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileWriterPromise = void 0;\nclass FileWriterPromise {\n constructor(fileWriter) {\n this.fileWriter = fileWriter;\n this._isWritingPromise = Promise.resolve();\n }\n write(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._isWritingPromise.then(() => new Promise((res, rej) => {\n this.fileWriter.onwriteend = res;\n this.fileWriter.onerror = rej;\n this.fileWriter.write(data);\n }));\n this._isWritingPromise = promise.catch(console.error);\n return promise;\n });\n }\n}\nexports.FileWriterPromise = FileWriterPromise;\n//# sourceMappingURL=FileWriterPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass ClientModel extends cordova_sites_database_1.BaseModel {\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"] && columns[\"id\"][\"generated\"]) {\n columns[\"id\"][\"generated\"] = false;\n }\n return columns;\n }\n static _fromJson(jsonObjects, models, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n });\n }\n toJSON(includeFull) {\n }\n ;\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n yield this.constructor._fromJson(data, this, true);\n }\n return _super.save.call(this);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n entities = yield this._fromJson(data, undefined, true);\n }\n return _super.saveMany.call(this, entities);\n });\n }\n static getSchemaDefinition() {\n const TYPES_FOR_DEFAULT_ESCAPING = [\n cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT,\n cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n ];\n let definitions = super.getSchemaDefinition();\n let columns = definitions[\"columns\"];\n Object.keys(columns).forEach(column => {\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.TEXT;\n }\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.JSON) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON;\n }\n if (TYPES_FOR_DEFAULT_ESCAPING.indexOf(columns[column].type) !== -1) {\n columns[column].escapeJS = shared_1.Helper.nonNull(columns[column].escapeJS, true);\n columns[column].escapeHTML = shared_1.Helper.nonNull(columns[column].escapeHTML, true);\n }\n });\n return definitions;\n }\n}\nexports.ClientModel = ClientModel;\nClientModel.SAVE_PATH = \"/sync\";\nClientModel.DELETE_PATH = \"/sync/delete\";\n//# sourceMappingURL=ClientModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ClientPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super();\n this.clientId = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"]) {\n columns[\"id\"][\"primary\"] = false;\n columns[\"id\"][\"generated\"] = false;\n columns[\"id\"][\"nullable\"] = true;\n columns[\"id\"][\"unique\"] = true;\n }\n columns[\"clientId\"] = {\n type: \"integer\",\n primary: true,\n generated: true,\n };\n return columns;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n if (typeof this.clientId !== \"number\") {\n this.clientId = undefined;\n }\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n yield this.constructor._fromJson(data, this, true);\n }\n }\n return _super.save.call(this, true);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this, true);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n entities.forEach(entity => {\n if (typeof entity.clientId !== \"number\") {\n entity.clientId = undefined;\n }\n });\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n entities = yield this._fromJson(data, entities, true);\n }\n }\n return _super.saveMany.call(this, entities, true);\n });\n }\n}\nexports.ClientPartialModel = ClientPartialModel;\n//# sourceMappingURL=ClientPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccessEasySyncModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nclass AccessEasySyncModel extends shared_1.EasySyncBaseModel {\n}\nexports.AccessEasySyncModel = AccessEasySyncModel;\nAccessEasySyncModel.ACCESS_READ = true;\nAccessEasySyncModel.ACCESS_MODIFY = false;\nAccessEasySyncModel.CAN_BE_SYNCED = false;\n//# sourceMappingURL=AccessEasySyncModel.js.map","export default \"img/help.png\";","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar SqljsQueryRunner = /** @class */ (function (_super) {\n __extends(SqljsQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n SqljsQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.commitTransaction.call(this)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.driver.autoSave()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n SqljsQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (parameters === void 0) { parameters = []; }\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, result;\n return __generator(this, function (_a) {\n databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(function (p) { return typeof p !== 'undefined' ? p : null; });\n statement.bind(parameters);\n }\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n result = [];\n while (statement.step()) {\n result.push(statement.getAsObject());\n }\n statement.free();\n ok(result);\n }\n catch (e) {\n if (statement) {\n statement.free();\n }\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n fail(new QueryFailedError(query, parameters, e));\n }\n return [2 /*return*/];\n });\n }); });\n };\n return SqljsQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { SqljsQueryRunner };\n\n//# sourceMappingURL=SqljsQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { NativescriptQueryRunner } from \"./NativescriptQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\n/**\n * Organizes communication with sqlite DBMS within Nativescript.\n */\nvar NativescriptDriver = /** @class */ (function (_super) {\n __extends(NativescriptDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.database = _this.options.database;\n _this.driver = _this.options.driver;\n // validate options to make sure everything is set\n if (!_this.options.database) {\n throw new DriverOptionNotSetError(\"database\");\n }\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n NativescriptDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close().then(ok).catch(fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n NativescriptDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner) {\n this.queryRunner = new NativescriptQueryRunner(this);\n }\n return this.queryRunner;\n };\n NativescriptDriver.prototype.normalizeType = function (column) {\n if (column.type === Buffer) {\n return \"blob\";\n }\n return _super.prototype.normalizeType.call(this, column);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n NativescriptDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n readOnly: _this.options.readOnly,\n key: _this.options.key,\n multithreading: _this.options.multithreading,\n migrate: _this.options.migrate,\n iosFlags: _this.options.iosFlags,\n androidFlags: _this.options.androidFlags,\n }, _this.options.extra || {});\n new _this.sqlite(_this.options.database, options, function (err, db) {\n if (err)\n return fail(err);\n // use object mode to work with TypeORM\n db.resultType(_this.sqlite.RESULTSASOBJECT);\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n db.execSQL(\"PRAGMA foreign_keys = ON;\", [], function (err, result) {\n if (err)\n return fail(err);\n // We are all set\n ok(db);\n });\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n NativescriptDriver.prototype.loadDependencies = function () {\n this.sqlite = this.driver;\n if (!this.driver) {\n throw new DriverPackageNotInstalledError(\"Nativescript\", \"nativescript-sqlite\");\n }\n };\n return NativescriptDriver;\n}(AbstractSqliteDriver));\nexport { NativescriptDriver };\n\n//# sourceMappingURL=NativescriptDriver.js.map\n","import { __extends } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar NativescriptQueryRunner = /** @class */ (function (_super) {\n __extends(NativescriptQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n NativescriptQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n var connection = this.driver.connection;\n return new Promise(function (ok, fail) {\n var isInsertQuery = query.substr(0, 11) === \"INSERT INTO\";\n var handler = function (err, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n }\n else {\n // when isInsertQuery == true, result is the id\n ok(result);\n }\n };\n _this.driver.connection.logger.logQuery(query, parameters, _this);\n var queryStartTime = +new Date();\n _this.connect().then(function (databaseConnection) {\n if (isInsertQuery) {\n databaseConnection.execSQL(query, parameters, handler);\n }\n else {\n databaseConnection.all(query, parameters, handler);\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n NativescriptQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return NativescriptQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { NativescriptQueryRunner };\n\n//# sourceMappingURL=NativescriptQueryRunner.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nvar RawSqlResultsToEntityTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RawSqlResultsToEntityTransformer(expressionMap, driver, rawRelationIdResults, rawRelationCountResults, queryRunner) {\n this.expressionMap = expressionMap;\n this.driver = driver;\n this.rawRelationIdResults = rawRelationIdResults;\n this.rawRelationCountResults = rawRelationCountResults;\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n RawSqlResultsToEntityTransformer.prototype.transform = function (rawResults, alias) {\n var _this = this;\n var group = this.group(rawResults, alias);\n var entities = [];\n group.forEach(function (results) {\n var entity = _this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every(function (value) { return value === null; }))\n entities.push(entity);\n });\n return entities;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Groups given raw results by ids of given alias.\n */\n RawSqlResultsToEntityTransformer.prototype.group = function (rawResults, alias) {\n var _this = this;\n var map = new Map();\n var keys = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.columns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n else {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.primaryColumns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n rawResults.forEach(function (rawResult) {\n var id = keys.map(function (key) {\n var keyValue = rawResult[key];\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n return keyValue;\n }).join(\"_\"); // todo: check partial\n var items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n }\n else {\n items.push(rawResult);\n }\n });\n return map;\n };\n /**\n * Transforms set of data results into single entity.\n */\n RawSqlResultsToEntityTransformer.prototype.transformRawResultsGroup = function (rawResults, alias) {\n var _this = this;\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n var metadata = alias.metadata;\n if (metadata.discriminatorColumn) {\n var discriminatorValues_1 = rawResults.map(function (result) { return result[DriverUtils.buildColumnAlias(_this.driver, alias.name, alias.metadata.discriminatorColumn.databaseName)]; });\n var discriminatorMetadata = metadata.childEntityMetadatas.find(function (childEntityMetadata) {\n return typeof discriminatorValues_1.find(function (value) { return value === childEntityMetadata.discriminatorValue; }) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n var entity = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n // get value from columns selections and put them into newly created entity\n var hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n var hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n var hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n var hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n var hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(function (column) { return column.isVirtual === false; }).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n return undefined;\n };\n // get value from columns selections and put them into object\n RawSqlResultsToEntityTransformer.prototype.transformColumns = function (rawResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n var value = rawResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!_this.expressionMap.selects.find(function (select) { return select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath; }))\n return;\n column.setEntityValue(entity, _this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n };\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n RawSqlResultsToEntityTransformer.prototype.transformJoins = function (rawResults, entity, alias, metadata) {\n var _this = this;\n var hasData = false;\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n this.expressionMap.joinAttributes.forEach(function (join) {\n // skip joins without metadata\n if (!join.metadata)\n return;\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(function (relation) { return relation === join.relation; }))\n return;\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n }\n else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation.propertyPath)\n return;\n }\n // transform joined data into entities\n var result = _this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n }\n else { // otherwise set to relation\n join.relation.setEntityValue(entity, result);\n }\n hasData = true;\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n this.rawRelationIdResults.forEach(function (rawRelationIdResult) {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n var relation = rawRelationIdResult.relationIdAttribute.relation;\n var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n var idMaps = rawRelationIdResult.results.map(function (result) {\n var entityPrimaryIds = _this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n }\n else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n var idMap = columns.reduce(function (idMap, column) {\n var value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n }\n else {\n if (column.referencedColumn.referencedColumn) // if column is a relation\n value = column.referencedColumn.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));\n }\n }, {});\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n }\n else {\n return columns[0].referencedColumn.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(function (result) { return result !== undefined; });\n var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n var mapToProperty = function (properties, map, value) {\n var property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n }\n else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n }\n else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n }\n else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationCounts = function (rawSqlResults, alias, entity) {\n var _this = this;\n var hasData = false;\n this.rawRelationCountResults\n .filter(function (rawRelationCountResult) { return rawRelationCountResult.relationCountAttribute.parentAlias === alias.name; })\n .forEach(function (rawRelationCountResult) {\n var relation = rawRelationCountResult.relationCountAttribute.relation;\n var referenceColumnName;\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn.databaseName; // todo: fix joinColumns[0]\n }\n else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n }\n var referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(function (result) { return result[\"parentId\"] === referenceColumnValue; })\n .forEach(function (result) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.createValueMapFromJoinColumns = function (relation, parentAlias, rawSqlResults) {\n var _this = this;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (valueMap, column) {\n rawSqlResults.forEach(function (rawSqlResult) {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.databaseName)], column);\n }\n else {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.referencedColumn.databaseName)], column);\n }\n });\n return valueMap;\n }, {});\n };\n RawSqlResultsToEntityTransformer.prototype.extractEntityPrimaryIds = function (relation, relationIdRawResult) {\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (data, column) {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {});\n };\n return RawSqlResultsToEntityTransformer;\n}());\nexport { RawSqlResultsToEntityTransformer };\n\n//# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Counter = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Counter {\n constructor(value) {\n this._value = 0;\n if (value instanceof Counter) {\n value = value.current;\n }\n this._value = Helper_1.Helper.nonNull(value, 0);\n }\n next() {\n this._value++;\n return this._value;\n }\n current() {\n return this._value;\n }\n}\nexports.Counter = Counter;\n//# sourceMappingURL=Counter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet DateHelper = /** @class */ (() => {\n class DateHelper {\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string}\n */\n static strftime(sFormat, date, useUTC) {\n useUTC = Helper_1.Helper.nonNull(useUTC, false);\n date = Helper_1.Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, (sMatch) => {\n return {\n '%a': this.translate(aDaysShort[nDay]),\n '%A': this.translate(aDays[nDay]),\n '%b': this.translate(aMonths[nMonth].slice(0, 3)),\n '%B': this.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static translate(key) {\n if (this.translationCallback) {\n return this.translationCallback(key);\n }\n return key;\n }\n static setTranslationCallback(callback) {\n this.translationCallback = callback;\n }\n }\n DateHelper.FORMAT = {\n ISO_TIME: \"%Y-%m-%dT%H:%M%S\"\n };\n return DateHelper;\n})();\nexports.DateHelper = DateHelper;\n//# sourceMappingURL=DateHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MigrationHelper = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst Helper_1 = require(\"./Helper\");\nclass MigrationHelper {\n static isServer() {\n return (typeof document !== \"object\");\n }\n static addTableFromModelClass(modelClass, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createTableFromModelClass(modelClass));\n });\n }\n static addManyToManyTable(tableOne, tableTwo, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createManyToManyTable(tableOne, tableTwo));\n });\n }\n static createManyToManyTable(tableOne, tableTwo) {\n let fieldOne = tableOne + \"Id\";\n let fieldTwo = tableTwo + \"Id\";\n let name = tableOne + tableTwo.substr(0, 1).toUpperCase() + tableTwo.substr(1);\n let manyToManyTable = new typeorm_1.Table({\n name: name,\n columns: [\n {\n name: fieldOne,\n isPrimary: true,\n type: \"integer\"\n },\n {\n name: fieldTwo,\n isPrimary: true,\n type: \"integer\"\n }\n ],\n indices: [\n {\n name: \"IDX_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne]\n },\n {\n name: \"IDX_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne],\n referencedTableName: tableOne.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo],\n referencedTableName: tableTwo.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return manyToManyTable;\n }\n static createTableFromModelClass(modelClass, prefix) {\n prefix = Helper_1.Helper.nonNull(prefix, \"\");\n let columns = [];\n let indices = [];\n let foreignKeys = [];\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = prefix + Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n Object.keys(schemaDefinition.columns).forEach(column => {\n let columnConfig = {};\n Object.keys(schemaDefinition.columns[column]).forEach(key => {\n columnConfig[key] = schemaDefinition.columns[column][key];\n });\n columnConfig[\"name\"] = column;\n if (schemaDefinition.columns[column].primary) {\n columnConfig[\"isPrimary\"] = true;\n }\n if (schemaDefinition.columns[column].nullable) {\n columnConfig[\"isNullable\"] = true;\n }\n if (schemaDefinition.columns[column].generated) {\n //If it is not EasySyncBaseModel or server\n if (Helper_1.Helper.isNull(modelClass.CAN_BE_SYNCED) || this.isServer() || column === \"clientId\") {\n columnConfig[\"isGenerated\"] = true;\n columnConfig[\"generationStrategy\"] = \"increment\";\n if (!this.isServer()) {\n columnConfig[\"type\"] = \"INTEGER\";\n }\n }\n }\n if (typeof columnConfig[\"default\"] === \"string\") {\n columnConfig[\"default\"] = \"'\" + columnConfig[\"default\"] + \"'\";\n }\n else if (columnConfig[\"default\"] === true) {\n columnConfig[\"default\"] = 1;\n }\n else if (columnConfig[\"default\"] === false) {\n columnConfig[\"default\"] = 0;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.MEDIUMTEXT && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n columns.push(columnConfig);\n });\n Object.keys(schemaDefinition.relations).forEach(relation => {\n if (schemaDefinition.relations[relation].type === \"many-to-one\" || schemaDefinition.relations[relation].joinColumn) {\n // let columnName = Helper.toSnakeCase(relation) + \"Id\";\n let columnName = relation.substr(0, 1).toLowerCase() + relation.substr(1) + \"Id\";\n let columnConfig = {\n name: columnName,\n type: MigrationHelper.TYPES.INTEGER,\n isNullable: true\n };\n columns.push(columnConfig);\n let indexConfig = {\n name: \"IDX_\" + tableName + \"_\" + columnName,\n columnNames: [columnName]\n };\n indices.push(indexConfig);\n let foreignKeyConfig = {\n name: \"FK_\" + tableName + \"_\" + columnName,\n columnNames: [columnName],\n referencedTableName: Helper_1.Helper.toSnakeCase(schemaDefinition.relations[relation].target),\n referencedColumnNames: [\"id\"]\n };\n foreignKeys.push(foreignKeyConfig);\n }\n });\n return new typeorm_1.Table({\n name: tableName,\n columns: columns,\n indices: indices,\n foreignKeys: foreignKeys\n });\n }\n static updateModel(queryRunner, newModel) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = newModel.getSchemaDefinition();\n let tableName = Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n let newTable = this.createTableFromModelClass(newModel);\n let table = yield queryRunner.getTable(tableName);\n table.name = \"__temp__\" + table.name;\n table.indices.forEach(index => {\n index.name = \"__temp__\" + index.name;\n });\n table.foreignKeys.forEach(key => {\n key.name = \"__temp__\" + key.name;\n key.columnNames = [key.columnNames[0]];\n key.referencedColumnNames = [key.referencedColumnNames[0]];\n });\n if (MigrationHelper.isServer()) {\n table.columns.forEach(column => {\n if (column.default !== null && typeof column.default === \"string\" && column.default.startsWith(\"'\") && column.default.endsWith(\"'\") && (column.type !== \"varchar\" || column.default.startsWith(\"''\"))) {\n column.default = column.default.substring(1, column.default.length - 1);\n }\n });\n }\n yield queryRunner.createTable(table);\n let names = [];\n table.columns.forEach(column => {\n names.push(column.name);\n });\n yield queryRunner.query(\"INSERT INTO \" + table.name + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + tableName + \";\");\n yield queryRunner.query(\"DROP TABLE \" + tableName + \";\");\n yield queryRunner.createTable(newTable);\n let newColumnNames = [];\n newTable.columns.forEach(column => newColumnNames.push(column.name));\n names = [];\n table.columns.forEach(column => {\n if (newColumnNames.indexOf(column.name) !== -1) {\n names.push(column.name);\n }\n });\n yield queryRunner.query(\"INSERT INTO \" + tableName + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + table.name + \";\");\n yield queryRunner.query(\"DROP TABLE \" + table.name + \";\");\n });\n }\n}\nexports.MigrationHelper = MigrationHelper;\nMigrationHelper.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\"\n};\n//# sourceMappingURL=MigrationHelper.js.map","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Prioritized = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Prioritized {\n constructor(promises) {\n this._lastPriority = 0;\n this._status = 0;\n this._lastResult = null;\n this._success = {};\n this._highestPromise = null;\n promises = Helper_1.Helper.nonNull(promises, {});\n this._callbacks = [];\n if (Array.isArray(promises)) {\n let tmpPromises = {};\n promises.forEach((promise, i) => {\n tmpPromises[(i + 1) * 10] = promise;\n });\n promises = tmpPromises;\n }\n let highestPromiseResolver = null;\n this._highestPromise = new Promise(resolve => {\n highestPromiseResolver = resolve;\n });\n Object.keys(promises).forEach(priority => {\n this._success[priority] = null;\n promises[priority].then(res => {\n this._success[priority] = true;\n if (parseInt(priority) > this._lastPriority) {\n this._lastResult = res;\n this._lastPriority = parseInt(priority);\n this._callCallbacks();\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n else {\n this._status = 1;\n }\n }\n }).catch(e => {\n this._success[priority] = e;\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n });\n });\n this._promises = promises;\n }\n _callCallbacks() {\n this._callbacks.forEach(callback => {\n callback(this._lastResult, this._lastPriority);\n });\n }\n _checkHighest() {\n let isHighestResult = false;\n Object.keys(this._success).reverse().some(priority => {\n if (Helper_1.Helper.isNull(this._success[priority])) {\n //return true beendet some-schleife\n return true;\n }\n else if (this._success[priority] === true) {\n isHighestResult = true;\n return true;\n }\n });\n return isHighestResult;\n }\n do(callback) {\n if (this._status < 2) {\n this._callbacks.push(callback);\n }\n if (this._status > 0) {\n callback(this._lastResult, this._lastPriority);\n }\n }\n highest(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._highestPromise;\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.resolve(this._lastResult).then(funcOrPromise);\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n first(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._status === 0) {\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.race(Object[\"values\"](this._promises)).then(funcOrPromise);\n }\n else {\n return Promise.race(Object[\"values\"](this._promises));\n }\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n}\nexports.Prioritized = Prioritized;\n//# sourceMappingURL=Prioritized.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseWithHandlers = void 0;\nclass PromiseWithHandlers extends Promise {\n constructor(executor) {\n let resolver = null;\n let rejecter = null;\n super((res, rej) => {\n resolver = res;\n rejecter = rej;\n if (executor) {\n executor(resolver, rejecter);\n }\n });\n this.resolver = resolver;\n this.rejecter = rejecter;\n }\n resolve(value) {\n if (this.resolver) {\n this.resolver(value);\n }\n }\n reject(value) {\n if (this.rejecter) {\n this.rejecter(value);\n }\n }\n}\nexports.PromiseWithHandlers = PromiseWithHandlers;\n//# sourceMappingURL=PromiseWithHandlers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Random = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet Random = /** @class */ (() => {\n class Random {\n static seedRandom(seed) {\n this._seed = seed;\n }\n static getRandom() {\n let t = this._seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n static getIntRandom(maxValue) {\n return Math.floor(Random.getRandom() * (maxValue + 1));\n }\n static getStringRandom(numSigns, alphabet) {\n alphabet = Helper_1.Helper.nonNull(alphabet, \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\n let random = \"\";\n const numAlphabet = alphabet.length - 1;\n for (let i = 0; i < numSigns; i++) {\n random += alphabet[Random.getIntRandom(numAlphabet)];\n }\n return random;\n }\n }\n Random._seed = new Date().getTime();\n return Random;\n})();\nexports.Random = Random;\n//# sourceMappingURL=Random.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DragHelper = void 0;\nconst DraggedElement_1 = require(\"./DraggedElement\");\nclass DragHelper {\n constructor() {\n this.startPosition = null;\n this.currentDraggedElement = null;\n window.addEventListener(\"mousemove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchmove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n }\n });\n window.addEventListener(\"mouseup\", e => {\n if (e.button === 0) {\n this.dragStop({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchend\", e => {\n if (e.touches.length === 0) {\n this.dragStop({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY });\n }\n });\n }\n static getInstance() {\n if (!this.instance) {\n this.instance = new DragHelper();\n }\n return this.instance;\n }\n draggable(element) {\n const dragElement = new DraggedElement_1.DraggedElement(element);\n element.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n console.log(\"mousedown\", e.button);\n if (e.button === 0) {\n this.dragStart({ x: e.clientX, y: e.clientY }, dragElement);\n }\n });\n element.addEventListener(\"touchstart\", e => {\n e.preventDefault();\n if (e.touches.length === 1) {\n this.dragStart({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }, dragElement);\n }\n });\n return dragElement;\n }\n dragStart(position, draggedElement) {\n this.currentDraggedElement = draggedElement;\n this.startPosition = position;\n this.currentDraggedElement.start();\n }\n dragMove(toPosition) {\n if (this.currentDraggedElement) {\n const diff = { x: toPosition.x - this.startPosition.x, y: toPosition.y - this.startPosition.y };\n this.currentDraggedElement.moveRelativeTo(diff);\n }\n }\n dragStop(mousePos) {\n if (this.currentDraggedElement) {\n this.currentDraggedElement.stop(mousePos);\n this.currentDraggedElement = null;\n this.startPosition = null;\n }\n }\n}\nexports.DragHelper = DragHelper;\n//# sourceMappingURL=DragHelper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HotkeyManager = void 0;\nclass HotkeyManager {\n constructor() {\n this._keys = {};\n this._callbacks = {};\n this._lastCallbackId = 0;\n this._active = false;\n this.mousePosition = null;\n this._addListeners();\n this.ignoreFormElements = false;\n }\n static isFormElement(element) {\n return element instanceof HTMLInputElement\n || element instanceof HTMLSelectElement\n || element instanceof HTMLTextAreaElement;\n }\n getMousePosition() {\n return this.mousePosition;\n }\n _addListeners() {\n window.addEventListener(\"keydown\", e => {\n if (this.ignoreFormElements || !HotkeyManager.isFormElement(e.target)) {\n this._keys[e.key.toLowerCase()] = true;\n if (this._active) {\n this._checkCallbacks(e);\n }\n }\n });\n window.addEventListener(\"keyup\", e => {\n if (e.key) {\n this._keys[e.key.toLowerCase()] = false;\n }\n });\n document.addEventListener(\"mousemove\", e => {\n this.mousePosition = { x: e.clientX, y: e.clientY };\n });\n }\n activate() {\n this._active = true;\n }\n deactivate() {\n this._active = false;\n }\n addCallback(keys, callback) {\n this._lastCallbackId++;\n this._callbacks[this._lastCallbackId] = {\n keys: keys,\n callback: callback\n };\n }\n isKeyPressed(key) {\n return this._active && this._keys[key] && this._keys[key] === true;\n }\n _checkCallbacks(e) {\n //TODO async forEach?\n Object.values(this._callbacks).forEach(callback => {\n // @ts-ignore\n if (callback.keys.every(key => this._keys[key] === true)) {\n // @ts-ignore\n callback.callback(e);\n }\n });\n }\n removeCallback(callbackId) {\n delete this._callbacks[callbackId];\n }\n}\nexports.HotkeyManager = HotkeyManager;\n//# sourceMappingURL=HotkeyManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InputSelect = void 0;\nconst Helper_1 = require(\"../shared/Helper\");\nconst ViewHelper_1 = require(\"./ViewHelper\");\nclass InputSelect {\n constructor(element, options) {\n this.onChangeListeners = [];\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n this.options = new Map();\n this.inputElement = element;\n options.forEach(o => {\n if (typeof o === \"string\") {\n o = { value: o, label: o };\n }\n o.selected = Helper_1.Helper.nonNull(o.selected, false);\n this.options.set(o.value, o);\n return o;\n });\n this.buildElement();\n }\n onChange(listener) {\n this.onChangeListeners.push(listener);\n }\n buildElement() {\n const parent = this.inputElement.parentElement;\n this.container = document.createElement(\"div\");\n this.container.classList.add(\"input-select-container\");\n const flexContainer = document.createElement(\"div\");\n flexContainer.classList.add(\"input-select-flex\");\n this.selectedOptionsContainer = document.createElement(\"span\");\n this.selectedOptionsContainer.classList.add(\"input-select-selected-options\");\n const classes = [];\n this.inputElement.classList.forEach(c => {\n this.container.classList.add(c);\n classes.push(c);\n });\n this.inputElement.classList.remove(...classes);\n this.inputElement.classList.add(\"input-select-input\");\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.classList.add(\"input-select-options\");\n parent.insertBefore(this.container, this.inputElement);\n this.inputElement.remove();\n this.container.appendChild(flexContainer);\n this.container.appendChild(this.optionsContainer);\n flexContainer.appendChild(this.selectedOptionsContainer);\n flexContainer.appendChild(this.inputElement);\n this.inputElement.addEventListener(\"input\", () => this.updateOptions());\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.optionsContainer.style.width = entry.borderBoxSize[0].inlineSize + \"px\";\n });\n });\n resizeObserver.observe(this.container);\n }\n // if (\"IntersectionObserver\" in window) {\n // const intersectionOptions = {\n // root: this.optionsContainer,\n // rootMargin: \"20px\",\n // threshold: 0.01\n // }\n // const intersectionObserver = new IntersectionObserver((entries) => {\n // entries.forEach(entry => console.log(\"is intersecting\", entry.isIntersecting));\n // // console.log(\"entries\", entries);\n // }, intersectionOptions);\n // intersectionObserver.observe(flexContainer);\n // }\n window.addEventListener(\"scroll\", () => console.log(\"scrolling\"));\n this.container.addEventListener(\"click\", () => {\n const rect = this.container.getBoundingClientRect();\n this.optionsContainer.style.top = (rect.top + rect.height) + \"px\";\n });\n this.updateOptions();\n }\n updateOptions() {\n ViewHelper_1.ViewHelper.removeAllChildren(this.selectedOptionsContainer);\n ViewHelper_1.ViewHelper.removeAllChildren(this.optionsContainer);\n const inputValue = this.inputElement.value;\n this.options.forEach(o => {\n const optionElement = document.createElement(\"span\");\n optionElement.classList.add(\"input-select-option\");\n optionElement.dataset[\"value\"] = o.value;\n optionElement.innerText = o.label;\n if (o.selected) {\n this.selectedOptionsContainer.appendChild(optionElement);\n }\n else if (o.label.indexOf(inputValue) !== -1) {\n this.optionsContainer.appendChild(optionElement);\n }\n optionElement.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n e.cancelBubble = true;\n this.toggle(o.value);\n this.inputElement.focus();\n });\n });\n }\n toggle(value) {\n const option = this.options.get(value);\n if (option) {\n option.selected = !option.selected;\n this.updateOptions();\n this.onChangeListeners.forEach(listener => {\n listener(option, this);\n });\n }\n }\n getOptions() {\n return Array.from(this.options.values());\n }\n getSelectedOptions() {\n return this.getOptions().filter(o => o.selected);\n }\n getSelectedValues() {\n return this.getSelectedOptions().map(o => o.value);\n }\n updateSelection(selection) {\n Object.keys(selection).forEach(value => {\n const option = this.options.get(value);\n if (option) {\n option.selected = selection[value];\n }\n });\n this.updateOptions();\n }\n}\nexports.InputSelect = InputSelect;\n//# sourceMappingURL=InputSelect.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./shared/EventManager\"));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst js_helper_1 = require(\"js-helper\");\nclass EventManager {\n constructor() {\n this._listeners = {};\n this._lastListenerId = 0;\n }\n /**\n * @return {EventManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new EventManager();\n }\n return this._instance;\n }\n addListener(event, listener) {\n if (typeof listener !== \"function\") {\n throw new Error(\"can only add functions as listeners!\");\n }\n this._lastListenerId++;\n if (!this._listeners[event]) {\n this._listeners[event] = {};\n this._listeners[event][this._lastListenerId] = listener;\n }\n return this._lastListenerId;\n }\n removeListener(event, listenerId) {\n if (this._listeners[event] && this._listeners[event][listenerId]) {\n delete this._listeners[event][listenerId];\n }\n }\n trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._listeners[event]) {\n yield js_helper_1.Helper.asyncForEach(Object.keys(this._listeners[event]), (listenerId) => __awaiter(this, void 0, void 0, function* () {\n yield this._listeners[event][listenerId](data);\n }), true);\n }\n });\n }\n static trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.getInstance().trigger(event, data);\n });\n }\n}\nexports.EventManager = EventManager;\nEventManager._instance = null;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContainerSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst containerTemplate = require(\"../../html/siteTemplates/container.html\");\n/**\n * Seite, welche das Container-Template benutzt\n */\nclass ContainerSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für die ContainerSite\n *\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(siteManager, view, containerTemplate, \"#site-content\");\n }\n}\nexports.ContainerSite = ContainerSite;\n//# sourceMappingURL=ContainerSite.js.map","module.exports = __webpack_public_path__ + \"html/container.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DelegateSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nclass DelegateSite extends AbstractSite_1.AbstractSite {\n constructor(site) {\n super(undefined, document.createElement(\"span\"));\n /** @var {AbstractSite} */\n this._site = site;\n }\n setTitle(titleElement, title) {\n return this._site.setTitle(titleElement, title);\n }\n setParameter(name, value) {\n //Todo changing\n // return this._site.setParameter(name, value);\n }\n setParameters(parameters) {\n //TODO changing\n // return this._site.setParameters(parameters)\n }\n getParameters() {\n return this._site.getParameters();\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.showLoadingSymbol();\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.removeLoadingSymbol();\n });\n }\n _updateTitle() {\n return this._site._updateTitle();\n }\n updateUrl(args) {\n //todo\n // return this._site.updateUrl(args);\n }\n startSite(site, args) {\n return this._site.startSite(site, args);\n }\n finishAndStartSite(site, args, result) {\n return this._site.finishAndStartSite(site, args, result);\n }\n finish(result) {\n return this._site.finish(result);\n }\n goBack() {\n return this._site.goBack();\n }\n getFinishPromise() {\n return this._site.getFinishPromise();\n }\n setResult(result) {\n return this._site.setResult(result);\n }\n getFinishResolver() {\n return this._site.getFinishResolver();\n }\n addFragment(viewQuery, fragment) {\n return this._site.addFragment(viewQuery, fragment);\n }\n findBy(query, all, asPromise) {\n return this._site.findBy(query, all, asPromise);\n }\n setPauseParameters(pauseParameters) {\n return this._site.setPauseParameters(pauseParameters);\n }\n getViewPromise() {\n return this._site.getViewPromise();\n }\n getState() {\n return this._site.getState();\n }\n getTitle() {\n return this._site.getTitle();\n }\n isShowing() {\n return this._site.isShowing();\n }\n isDestroying() {\n return this._site.isDestroying();\n }\n}\nexports.DelegateSite = DelegateSite;\n//# sourceMappingURL=DelegateSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractWindowFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst ViewInflater_1 = require(\"../../ViewInflater\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Translator_1 = require(\"../../Translator\");\nconst NativeStoragePromise_1 = require(\"../../NativeStoragePromise\");\nconst Toast_1 = require(\"../../Toast/Toast\");\nconst template = require(\"../../../html/Framework/Fragment/abstractWindowTemplate.html\");\nclass AbstractWindowFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view, position, title, id) {\n super(site, template);\n this.position = {\n x: 0,\n y: 0,\n anchorY: \"top\",\n anchorX: \"left\"\n };\n this.title = \"\";\n this._margin = { x: 0, y: 0 };\n this.saveData = {};\n this.state = \"normal\";\n this.popupWindow = null;\n this.translateTitle = true;\n this.position = Object.assign({ anchorY: \"top\", anchorX: \"left\" }, position);\n this.title = Helper_1.Helper.nonNull(title, \" \");\n if (id) {\n this.id = \"window-\" + id;\n }\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(\"#child-view\").replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n setTitle(title) {\n if (this._titleElement) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._titleElement);\n this._titleElement.appendChild(this.translateTitle ? Translator_1.Translator.makePersistentTranslation(title) : document.createTextNode(title));\n }\n this.title = title;\n }\n getDimension() {\n let computedStyle = window.getComputedStyle(this._container);\n let width = parseFloat(computedStyle.getPropertyValue(\"width\"));\n let height = parseFloat(computedStyle.getPropertyValue(\"height\"));\n if (isNaN(width)) {\n width = parseFloat(this._container.style.width);\n }\n if (isNaN(height)) {\n height = parseFloat(this._container.style.height);\n }\n return { x: Math.ceil(width) - this._margin.x, y: Math.ceil(height) - this._margin.y };\n }\n setDimension(x, y) {\n x += this._margin.x;\n y += this._margin.y;\n this._container.style.width = x + \"px\";\n this._container.style.height = y + \"px\";\n this.saveData.dimension = {\n x: x,\n y: y,\n };\n this.save();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._container = this.findBy(\".window-container\");\n if (this.position.width || this.position.height) {\n this._container.style.width = this.position.width + \"px\";\n this._container.style.height = this.position.height + \"px\";\n }\n this._window = this.findBy(\".window\");\n this._titleElement = this.findBy(\"#title\");\n this._resizeElements = {\n x: [\n this._window,\n this.findBy(\".window-resize.left\"),\n this.findBy(\".window-resize.right\")\n ],\n y: [\n this._window,\n this._titleElement,\n this.findBy(\".window-resize.top\"),\n this.findBy(\".window-resize.bottom\")\n ],\n };\n yield this.load();\n this._checkPositionAndDimension();\n // this.moveTo(this.position.x, this.position.y);\n this.setTitle(this.title);\n this.addListeners();\n const buttonContainer = this.findBy(\"#title-buttons\");\n if (buttonContainer) {\n buttonContainer.remove();\n this._titleElement.parentNode.appendChild(buttonContainer);\n buttonContainer.querySelectorAll(\".title-button\").forEach(button => {\n button.addEventListener(\"click\", e => {\n this.onButtonClick(button.id, button, e);\n });\n });\n }\n return res;\n });\n }\n addListeners() {\n return __awaiter(this, void 0, void 0, function* () {\n let resizeStart = null;\n let multiplier;\n let dimension;\n let resizeStartListener = (x, y, e) => {\n if (e.target.classList.contains(\"window-resize\")) {\n e.stopPropagation();\n resizeStart = { x: x, y: y };\n let direction = e.target.dataset[\"direction\"].split(\",\");\n multiplier = { x: parseInt(direction[0]), y: parseInt(direction[1]) };\n dimension = this.getDimension();\n }\n };\n this.findBy(\".window-resize\", true).forEach(element => {\n element.addEventListener(\"mousedown\", (e) => {\n resizeStartListener(e.clientX, e.clientY, e);\n });\n });\n let mouseDownPos = null;\n let pos = null;\n let moveStartListener = (x, y, e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n mouseDownPos = { x: x, y: y };\n pos = Object.assign({}, this.getPosition()); //Make copy\n this._container.classList.add(\"moving\");\n }\n this.makeActiveWindow();\n };\n this._container.addEventListener(\"mousedown\", (e) => {\n moveStartListener(e.clientX, e.clientY, e);\n });\n this._container.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length === 1) {\n moveStartListener(e.touches[0].clientX, e.touches[0].clientY, e);\n }\n });\n let moveListener = (x, y) => {\n if (resizeStart !== null) {\n let localMultiplier = {\n x: multiplier.x,\n y: multiplier.y,\n };\n let diff = {\n x: (x - resizeStart.x) * (localMultiplier.x),\n y: (y - resizeStart.y) * (localMultiplier.y)\n };\n dimension = { x: dimension.x + diff.x, y: dimension.y + diff.y };\n this.setDimension(dimension.x, dimension.y);\n const realDimension = this.getDimension();\n if (dimension.x !== realDimension.x) {\n localMultiplier.x = 0;\n }\n if (dimension.y !== realDimension.y) {\n localMultiplier.y = 0;\n }\n this._checkPositionAndDimension();\n //TODO diff für Center berechnen...\n let moveDiff = { x: 0, y: 0 };\n if (localMultiplier.x !== 0) {\n if (this.position.anchorX === \"center\") {\n moveDiff.x = diff.x * localMultiplier.x / 2;\n }\n else if (localMultiplier.x * (this.position.anchorX === \"left\" ? 1 : -1) < 0) {\n moveDiff.x = diff.x * localMultiplier.x;\n }\n }\n if (localMultiplier.y !== 0) {\n if (this.position.anchorY === \"center\") {\n moveDiff.y = diff.y * localMultiplier.y / 2;\n }\n else if (localMultiplier.y * (this.position.anchorY === \"top\" ? 1 : -1) < 0) {\n moveDiff.y = diff.y * localMultiplier.y;\n }\n }\n this.moveAt(moveDiff.x, moveDiff.y);\n resizeStart = { x: x, y: y };\n }\n else if (mouseDownPos !== null) {\n let diff = {\n x: x - mouseDownPos.x,\n y: y - mouseDownPos.y,\n };\n mouseDownPos = { x, y };\n // const newPos = {x: pos.x + diff.x, y: pos.y + diff.y};\n this.moveAt(diff.x, diff.y);\n }\n };\n window.addEventListener(\"mousemove\", (e) => {\n moveListener(e.clientX, e.clientY);\n });\n window.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length === 1) {\n moveListener(e.touches[0].clientX, e.touches[0].clientY);\n }\n });\n let endListener = (x, y, e) => {\n mouseDownPos = null;\n resizeStart = null;\n this._container.classList.remove(\"moving\");\n };\n window.addEventListener(\"mouseup\", (e) => {\n endListener(e.clientX, e.clientY, e);\n });\n window.addEventListener(\"touchend\", (e) => {\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n endListener(e.changedTouches[0].clientX, e.changedTouches[0].clientY, e);\n }\n });\n this._container.addEventListener(\"dblclick\", (e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n this.toggleMinimize();\n }\n });\n window.addEventListener(\"resize\", () => {\n this._checkPositionAndDimension();\n });\n window.addEventListener(\"beforeunload\", () => {\n if (this.popupWindow) {\n this.id = null; //disable saving, since it should\n this.popupWindow.close();\n }\n });\n });\n }\n makeActiveWindow() {\n let activeWindow = document.querySelector(\".window-container.active-window\");\n if (activeWindow && activeWindow !== this._container) {\n activeWindow.classList.remove(\"active-window\");\n }\n this._container.classList.add(\"active-window\");\n }\n load() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n const saveData = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this.id);\n if (saveData) {\n if (saveData.dimension) {\n this.setDimension(saveData.dimension.x, saveData.dimension.y);\n }\n if (saveData.position) {\n this.position = saveData.position;\n this._checkPositionAndDimension();\n }\n if (saveData.state) {\n switch (saveData.state) {\n case \"minimized\": {\n this.toggleMinimize();\n break;\n }\n case \"maximized\": {\n this.toggleMaximize();\n break;\n }\n case \"popup\": {\n this._viewLoadedPromise.then(() => {\n this.openInNewWindow();\n });\n break;\n }\n }\n }\n this.saveData = saveData;\n this.save();\n }\n }\n });\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n // console.log(\"save\", this.id, this.saveData);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this.id, this.saveData);\n }\n });\n }\n toggleMinimize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"minimized\");\n this._container.classList.remove(\"maximized\");\n if (!this._container.classList.contains(\"minimized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"minimized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n toggleMaximize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"maximized\");\n this._container.classList.remove(\"minimized\");\n if (!this._container.classList.contains(\"maximized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"maximized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n resizeToContent() {\n if (this._window) {\n let diff = {\n x: this._window.scrollWidth - this._window.clientWidth,\n y: this._window.scrollHeight - this._window.clientHeight,\n };\n let dimension = this.getDimension();\n if (diff.x === 0) {\n let sum = 0;\n this._resizeElements.x.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"width\")));\n diff.x = Math.ceil(sum) - dimension.x;\n }\n if (diff.y === 0) {\n let sum = 0;\n this._resizeElements.y.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"height\")));\n diff.y = Math.ceil(sum) - dimension.y;\n }\n dimension.x += diff.x;\n dimension.y += diff.y;\n if (this.state === \"normal\") {\n this.setDimension(dimension.x, dimension.y);\n }\n this._checkPositionAndDimension();\n }\n }\n getTopLeftCornerPosition() {\n const dimension = this.getDimension();\n let x = this.position.x;\n if (this.position.anchorX === \"center\") {\n x += window.innerWidth / 2 - dimension.x / 2;\n }\n else if (this.position.anchorX === \"right\") {\n x += window.innerWidth - dimension.x;\n }\n let y = this.position.y;\n if (this.position.anchorY === \"center\") {\n y += window.innerHeight / 2 - dimension.y / 2;\n }\n else if (this.position.anchorY === \"bottom\") {\n y += window.innerHeight - dimension.y;\n }\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n return { x, y };\n }\n getCenterCenterPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: (topLeft.x + dimension.x / 2) - window.innerWidth / 2,\n y: (topLeft.y + dimension.y / 2) - window.innerHeight / 2\n };\n }\n getBottomRightPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: Math.min((topLeft.x + dimension.x) - window.innerWidth, 0),\n y: Math.min((topLeft.y + dimension.y) - window.innerHeight, 0),\n };\n }\n _checkPositionAndDimension() {\n let dimension = this.getDimension();\n let setDimension = true;\n let dimensionChanged = false;\n if (isNaN(dimension.x)) {\n dimension.x = 0;\n setDimension = false;\n }\n if (isNaN(dimension.y)) {\n dimension.y = 0;\n setDimension = false;\n }\n let posTopLeft = this.getTopLeftCornerPosition();\n let posCenterCenter = this.getCenterCenterPosition();\n let posBottomRight = this.getBottomRightPosition();\n if (dimension.x > window.innerWidth) {\n dimensionChanged = true;\n dimension.x = window.innerWidth;\n this.position.x = 0;\n this.position.anchorX = \"left\";\n }\n else {\n if (posTopLeft.x <= Math.abs(posCenterCenter.x) && posTopLeft.x <= -1 * posBottomRight.x) {\n this.position.x = posTopLeft.x;\n this.position.anchorX = \"left\";\n }\n else if (-1 * posBottomRight.x <= Math.abs(posCenterCenter.x)) {\n this.position.x = posBottomRight.x;\n this.position.anchorX = \"right\";\n }\n else {\n this.position.x = posCenterCenter.x;\n this.position.anchorX = \"center\";\n }\n }\n if (dimension.y > window.innerHeight) {\n dimensionChanged = true;\n dimension.y = window.innerHeight;\n this.position.y = 0;\n this.position.anchorY = \"top\";\n }\n else {\n if (posTopLeft.y <= Math.abs(posCenterCenter.y) && posTopLeft.y <= -1 * posBottomRight.y) {\n this.position.y = posTopLeft.y;\n this.position.anchorY = \"top\";\n }\n else if (-1 * posBottomRight.y <= Math.abs(posCenterCenter.y)) {\n this.position.y = posBottomRight.y;\n this.position.anchorY = \"bottom\";\n }\n else {\n this.position.y = posCenterCenter.y;\n this.position.anchorY = \"center\";\n }\n }\n if (this.position.anchorY === \"top\") {\n this._container.style.top = this.position.y + \"px\";\n this._container.style.removeProperty(\"bottom\");\n }\n else if (this.position.anchorY === \"bottom\") {\n this._container.style.bottom = (-1 * this.position.y) + \"px\";\n this._container.style.removeProperty(\"top\");\n }\n else {\n this._container.style.top = \"calc(50% + \" + this.position.y.toString() + \"px - \" + (dimension.y / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"bottom\");\n }\n if (this.position.anchorX === \"left\") {\n this._container.style.left = this.position.x + \"px\";\n this._container.style.removeProperty(\"right\");\n }\n else if (this.position.anchorX === \"right\") {\n this._container.style.right = (-1 * this.position.x) + \"px\";\n this._container.style.removeProperty(\"left\");\n }\n else {\n this._container.style.left = \"calc(50% + \" + this.position.x.toString() + \"px - \" + (dimension.x / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"right\");\n }\n this.saveData.position = this.position;\n if (!this._container.classList.contains(\"minimized\") && setDimension && dimensionChanged) {\n this.setDimension(dimension.x, dimension.y);\n }\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onStart.call(this, pauseArguments);\n this._checkPositionAndDimension();\n return res;\n });\n }\n moveAt(x, y) {\n const posTopLeft = this.getTopLeftCornerPosition();\n return this.moveTo(x + posTopLeft.x, y + posTopLeft.y);\n }\n moveTo(x, y) {\n this.position = { x: x, y: y, anchorX: \"left\", anchorY: \"top\" };\n this._checkPositionAndDimension();\n this.save();\n }\n onButtonClick(id, button, e) {\n switch (id) {\n case \"minimize-button\": {\n this.toggleMinimize();\n break;\n }\n case \"maximize-button\": {\n this.toggleMaximize();\n break;\n }\n case \"new-window-button\": {\n this.openInNewWindow();\n break;\n }\n }\n }\n openInNewWindow() {\n if (this.state === \"popup\") {\n return;\n }\n const windowProxy = window.open(\"\", \"\", \"modal=yes\");\n if (windowProxy === null) {\n new Toast_1.Toast(\"cannot open popups\").show();\n return;\n }\n this.state = \"popup\";\n this.saveData.state = this.state;\n this.save();\n const baseElement = document.createElement(\"base\");\n baseElement.href = window.location.href;\n windowProxy.document.head.appendChild(baseElement);\n const titleElement = document.createElement(\"title\");\n titleElement.innerText = this.title;\n windowProxy.document.head.appendChild(titleElement);\n document.querySelectorAll(\"link[rel='stylesheet']\").forEach(styleElem => {\n windowProxy.document.head.appendChild(styleElem.cloneNode());\n });\n const parent = this._view.parentNode;\n this._view.remove();\n this._container.classList.add(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n const translationCallback = Translator_1.Translator.getInstance().addTranslationCallback((baseElement) => {\n if (baseElement !== this._container) {\n Translator_1.Translator.getInstance().updateTranslations(this._container);\n }\n }, false);\n windowProxy.document.body.appendChild(this._view);\n windowProxy.addEventListener(\"beforeunload\", () => {\n this.state = \"normal\";\n this.saveData.state = this.state;\n this.save();\n this._view.remove();\n this._container.classList.remove(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n parent.appendChild(this._view);\n this.popupWindow = null;\n Translator_1.Translator.getInstance().removeTranslationCallback(translationCallback);\n });\n this.popupWindow = windowProxy;\n document.body.classList.forEach(className => {\n console.log(\"adding class\", className);\n windowProxy.document.body.classList.add(className);\n });\n }\n getPosition() {\n return this.position;\n }\n}\nexports.AbstractWindowFragment = AbstractWindowFragment;\n//# sourceMappingURL=AbstractWindowFragment.js.map","module.exports = __webpack_public_path__ + \"html/abstractWindowTemplate.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AlphabeticListFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst defaultView = require(\"../../../html/Framework/Fragment/alphabeticListFragment.html\");\nclass AlphabeticListFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, shared_1.Helper.nonNull(view, defaultView));\n this.elements = {};\n this.sideScrolling = false;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n //TODO font-size changing\n let sideAlphabet = this.findBy(\".alphabetic-list-sidealphabet\");\n sideAlphabet.addEventListener(\"mousedown\", () => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"mouseup\", () => {\n this.sideScrolling = false;\n });\n window.addEventListener(\"touchend\", () => {\n this.sideScrolling = false;\n });\n this.findBy(\".alphabet-scroll-to\", true).forEach(elem => {\n let listener = (e) => {\n if (this.sideScrolling) {\n this.findBy(\".alphabet-section.\" + elem.dataset.letter).scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n };\n elem.addEventListener(\"mousedown\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"mousemove\", listener);\n elem.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"touchmove\", listener);\n });\n this.headingElement = this.findBy(\"#alphabetic-list-heading\");\n this.renderList();\n return res;\n });\n }\n setElements(elements) {\n this.elements = {};\n Object.keys(elements).sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n }).forEach(key => {\n this.elements[key] = elements[key];\n });\n }\n setHeading(headingElement) {\n this.heading = headingElement;\n if (this.headingElement && this.heading) {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n this.headingElement.appendChild(this.heading);\n }\n }\n renderElement(element) {\n console.warn(\"should be overloaded?\");\n let elem = document.createElement(\"div\");\n elem.innerText = element;\n return elem;\n }\n renderList() {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n if (this.heading) {\n this.headingElement.appendChild(this.heading);\n }\n this.findBy(\".alphabet-section\", true).forEach(section => {\n client_1.ViewHelper.removeAllChildren(section);\n });\n let currentLetter = 'A';\n let currentSegment = this.findBy(\".alphabet-section.A\");\n Object.keys(this.elements).forEach(key => {\n let newLetter = key.trim().substring(0, 1).toUpperCase();\n if (newLetter !== currentLetter) {\n currentLetter = newLetter;\n let newSegment = this.findBy(\".alphabet-section.\" + newLetter);\n if (newSegment !== null) {\n currentSegment = newSegment;\n }\n }\n let element = this.renderElement(this.elements[key]);\n currentSegment.appendChild(element);\n });\n }\n}\nexports.AlphabeticListFragment = AlphabeticListFragment;\n//# sourceMappingURL=AlphabeticListFragment.js.map","module.exports = __webpack_public_path__ + \"html/alphabeticListFragment.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultTabView = require(\"../../../html/Framework/Fragment/tabFragment.html\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Translator_1 = require(\"../../Translator\");\nconst client_1 = require(\"js-helper/dist/client\");\nclass TabFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, Helper_1.Helper.nonNull(view, defaultTabView));\n this.lastTabId = 0;\n this.activeTab = null;\n this.onTabChangeListener = null;\n this.tabs = new Map();\n this.tabViewPromise = this._viewLoadedPromise;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.nameContainer = this.findBy(\".tab-names\");\n this.nameButton = this.findBy(\".tab-button-template\");\n this.nameButton.classList.remove(\"tab-button-template\");\n this.nameButton.remove();\n this.tabContent = this.findBy(\".tab-content\");\n this.tabSite = this.findBy(\".tab-site-template\");\n this.tabSite.classList.remove(\"tab-site-template\");\n this.tabSite.remove();\n return res;\n });\n }\n addFragment(name, fragment, nameIsTranslatable) {\n super.addFragment(\".tab-content\", fragment);\n fragment._viewLoadedPromise.then(() => {\n const view = this.tabSite.cloneNode(true);\n view.appendChild(fragment._view);\n this.lastTabId++;\n const tab = {\n name: name,\n fragment: fragment,\n view: view,\n nameIsTranslatable: Helper_1.Helper.nonNull(nameIsTranslatable, true),\n button: null,\n id: this.lastTabId,\n };\n this.tabs.set(this.lastTabId, tab);\n this._viewLoadedPromise.then(() => {\n const nameElement = this.nameButton.cloneNode(true);\n nameElement.appendChild(tab.nameIsTranslatable ? Translator_1.Translator.makePersistentTranslation(name) : document.createTextNode(name));\n this.nameContainer.appendChild(nameElement);\n nameElement.addEventListener(\"click\", () => {\n this.showTab(tab.id);\n });\n tab.button = nameElement;\n if (Helper_1.Helper.isNull(this.activeTab)) {\n this.showTab(tab.id);\n }\n });\n });\n }\n showTab(tabId) {\n const tab = this.tabs.get(tabId);\n if (tab && tabId !== this.activeTab) {\n let previousActiveButton = this.findBy(\".tab-button.active\");\n if (Helper_1.Helper.isNotNull(previousActiveButton)) {\n previousActiveButton.classList.remove(\"active\");\n }\n tab.button.classList.add(\"active\");\n client_1.ViewHelper.removeAllChildren(this.tabContent);\n this.tabContent.appendChild(tab.view);\n this.activeTab = tabId;\n if (this.onTabChangeListener) {\n this.onTabChangeListener(tab);\n }\n }\n }\n setOnTabChangeListener(listener) {\n this.onTabChangeListener = listener;\n }\n}\nexports.TabFragment = TabFragment;\n//# sourceMappingURL=TabFragment.js.map","module.exports = __webpack_public_path__ + \"html/tabFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Dialog_1 = require(\"../../../Dialog/Dialog\");\nconst Translator_1 = require(\"../../../Translator\");\nconst errorIcon = require(\"../../../../img/errorIcon.png\");\nclass ErrorAction extends MenuAction_1.MenuAction {\n constructor() {\n super(\"\", () => {\n let d = new Dialog_1.Dialog(ErrorAction._errors.join(\"
\"), Translator_1.Translator.translate(\"error\"));\n d.setTranslatable(false);\n d.show();\n }, MenuAction_1.MenuAction.SHOW_ALWAYS, -1000, ErrorAction.ERROR_ICON);\n this._visible = (ErrorAction._errors.length > 0);\n this._shouldTranslate = false;\n console.log(\"icon: \", ErrorAction.ERROR_ICON);\n }\n static addError(errorMessage) {\n if (this._errors.indexOf(errorMessage) === -1) {\n this._errors.push(errorMessage);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n static removeError(errorMessage) {\n let index = this._errors.indexOf(errorMessage);\n if (index >= 0) {\n this._errors.splice(index, 1);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n /**\n * @return ErrorAction;\n */\n static getInstance() {\n if (this._instance === null) {\n this._instance = new ErrorAction();\n }\n return this._instance;\n }\n}\nexports.ErrorAction = ErrorAction;\nErrorAction.ERROR_ICON = errorIcon;\nErrorAction._instance = null;\nErrorAction._errors = [];\n//# sourceMappingURL=ErrorAction.js.map","export default \"img/errorIcon.png\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartSiteMenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst App_1 = require(\"../../../App\");\nclass StartSiteMenuAction extends MenuAction_1.MenuAction {\n constructor(name, site, showFor, order, icon) {\n super(name, () => {\n if (StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartSiteMenuAction = StartSiteMenuAction;\nStartSiteMenuAction._app = null;\nApp_1.App.addInitialization(app => {\n StartSiteMenuAction._app = app;\n});\n//# sourceMappingURL=StartSiteMenuAction.js.map","module.exports = __webpack_public_path__ + \"html/navbar.html\";","module.exports = __webpack_public_path__ + \"html/menuSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst SwipeChildFragment_1 = require(\"./SwipeChildFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst view = require(\"../../../html/Framework/Fragment/swipeFragment.html\");\nclass SwipeFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site) {\n super(site, view);\n this._activeIndex = 0;\n this._touchStart = null;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this._view.addEventListener(\"touchstart\", e => {\n this._touchStart = e.touches[0];\n }, false);\n this._view.addEventListener(\"touchend\", e => {\n this._handleSwipe(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n this._touchStart = null;\n });\n this._view.addEventListener(\"mousedown\", e => {\n this._touchStart = e;\n }, false);\n this._view.addEventListener(\"mouseup\", e => {\n this._handleSwipe(e.clientX, e.clientY);\n this._touchStart = null;\n });\n return _super.onViewLoaded.call(this);\n });\n }\n _handleSwipe(endX, endY) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._touchStart)) {\n return;\n }\n let touchStart = this._touchStart;\n this._touchStart = null;\n let diffX = touchStart.clientX - endX;\n if (Math.abs(touchStart.clientY - endY) <= SwipeFragment.MAX_Y\n && Math.abs(diffX) >= SwipeFragment.MIN_X) {\n if (diffX > 0) {\n yield this._fragments[this._activeIndex].onSwipeLeft();\n }\n else {\n yield this._fragments[this._activeIndex].onSwipeRight();\n }\n }\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (this._activeIndex >= 0 && this._activeIndex < this._fragments.length) {\n this.setActiveFragment(this._activeIndex);\n }\n return _super.onStart.call(this, pauseArguments);\n });\n }\n setActiveFragment(index) {\n if (index instanceof SwipeChildFragment_1.SwipeChildFragment) {\n index = this._fragments.indexOf(index);\n }\n if (index >= 0 && index < this._fragments.length) {\n this._activeIndex = index;\n this._fragments.forEach((frag, i) => {\n frag.setActive(i === this._activeIndex);\n });\n }\n }\n nextFragment() {\n this.setActiveFragment((this._activeIndex + 1) % this._fragments.length);\n }\n previousFragment() {\n this.setActiveFragment((this._activeIndex + this._fragments.length - 1) % this._fragments.length);\n }\n addFragment(fragment) {\n if (fragment instanceof SwipeChildFragment_1.SwipeChildFragment) {\n fragment.setParent(this);\n return super.addFragment(\".swipe-container\", fragment);\n }\n }\n}\nexports.SwipeFragment = SwipeFragment;\nSwipeFragment.MAX_Y = 80;\nSwipeFragment.MIN_X = 150;\n//# sourceMappingURL=SwipeFragment.js.map","module.exports = __webpack_public_path__ + \"html/swipeFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ButtonChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nclass ButtonChooseDialog extends Dialog_1.Dialog {\n constructor(content, title, values) {\n super(content, title);\n Object.keys(values).forEach(key => {\n this.addButton(values[key], key);\n });\n }\n}\nexports.ButtonChooseDialog = ButtonChooseDialog;\n//# sourceMappingURL=ButtonChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nconst Translator_1 = require(\"../Translator\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title, translateable) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n translateable = Helper_1.Helper.nonNull(translateable, true);\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n let textElem = null;\n if (translateable) {\n textElem = Translator_1.Translator.makePersistentTranslation(valueNames[k]);\n }\n else {\n textElem = document.createElement(\"span\");\n textElem.innerText = valueNames[k];\n }\n valueElem.querySelector(\".choose-dialog-value\").appendChild(textElem);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ChooseDialog = ChooseDialog;\n//# sourceMappingURL=ChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfirmDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ConfirmDialog extends Dialog_1.Dialog {\n constructor(content, title, confirmButtonText, cancelButtonText) {\n super(content, title);\n this.confirmButtonText = Helper_1.Helper.nonNull(confirmButtonText, \"confirm-button\");\n this.cancelButtonText = Helper_1.Helper.nonNull(cancelButtonText, \"cancel-button\");\n }\n show() {\n const _super = Object.create(null, {\n show: { get: () => super.show }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addButton(this.confirmButtonText, true);\n this.addButton(this.cancelButtonText, false);\n return _super.show.call(this);\n });\n }\n close() {\n if (Helper_1.Helper.isNull(this._result)) {\n this._result = false;\n }\n return super.close();\n }\n}\nexports.ConfirmDialog = ConfirmDialog;\n//# sourceMappingURL=ConfirmDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImgChooseDialog = void 0;\nconst ElemChooseDialog_1 = require(\"./ElemChooseDialog\");\nclass ImgChooseDialog extends ElemChooseDialog_1.ElemChooseDialog {\n constructor(valueNames, title) {\n let newValueNames = {};\n Object.keys(valueNames).forEach(k => {\n let elem = document.createElement(\"img\");\n elem.src = valueNames[k];\n newValueNames[k] = elem;\n });\n super(newValueNames, title);\n }\n}\nexports.ImgChooseDialog = ImgChooseDialog;\n//# sourceMappingURL=ImgChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"../DataManager\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst Toast_1 = require(\"../Toast/Toast\");\nconst ImageSelectionElement_1 = require(\"./ImageSelectionElement\");\nconst js_helper_1 = require(\"js-helper\");\nclass Form {\n constructor(formElem, urlOrCallback, method, imageSelectionSelector) {\n this.imageSelectionElementReady = new js_helper_1.PromiseWithHandlers();\n this.imageSelectionElements = {};\n this.formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (imageSelectionSelector === undefined) {\n imageSelectionSelector = \"input.image-selection\";\n }\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n this.prepareForImageSelection(imageSelectionSelector).then(r => this.imageSelectionElementReady.resolve(r));\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n prepareForImageSelection(imageSelectionSelector) {\n return __awaiter(this, void 0, void 0, function* () {\n yield Helper_1.Helper.asyncForEach(this.formElem.querySelectorAll(imageSelectionSelector), (imgElement) => __awaiter(this, void 0, void 0, function* () {\n let name = \"\";\n let value = \"\";\n if (imgElement instanceof HTMLInputElement) {\n name = imgElement.name;\n value = imgElement.value;\n }\n if (Helper_1.Helper.isNull(name) || name === \"\") {\n name = imgElement.dataset[\"name\"];\n }\n if (Helper_1.Helper.isNull(value) || value === \"\") {\n value = imgElement.dataset[\"value\"];\n }\n const imgSelectionElement = new ImageSelectionElement_1.ImageSelectionElement(name);\n if (value && value.trim() !== \"\") {\n try {\n yield imgSelectionElement.setValue(JSON.parse(value));\n }\n catch (e) {\n console.warn(e);\n }\n }\n this.imageSelectionElements[name] = imgSelectionElement;\n imgElement.replaceWith(yield imgSelectionElement.getView());\n }), true);\n });\n }\n setImagesForImageSelectionElement(name, images) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.imageSelectionElementReady;\n if (this.imageSelectionElements[name]) {\n this.imageSelectionElements[name].setImages(images);\n }\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this.formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this.formElem.elements[k].type && (this.formElem.elements[k].type === \"checkbox\" || this.formElem.elements[k].type === \"radio\")) {\n this.formElem.elements[k].checked = this.formElem.elements[k].value == values[k];\n }\n else if (this.formElem.elements[k].type && this.formElem.elements[k].type === \"file\") {\n if (this.formElem.elements[k + \"-hidden\"]) {\n this.formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this.formElem.elements[k].accept && this.formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this.formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this.formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this.formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this.formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this.formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n if (Helper_1.Helper.isNotNull(this.imageSelectionElements[k])) {\n console.log(\"setImg\", k, values[k]);\n this.imageSelectionElements[k].setValue(values[k]);\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this.formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this.formElem.elements).forEach(elemKey => {\n this.formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k]) && this.formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this.formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this.formElem.elements[k].disabled) || !this.formElem.elements[k].disabled)) {\n this.formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this.formElem && this.formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this.formElem.classList.add(\"sending\");\n }\n else {\n this.formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this.formElem && !this.formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this.formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","module.exports = __webpack_public_path__ + \"html/imageSelectionElement.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleHelper = void 0;\nconst js_helper_1 = require(\"js-helper\");\nclass ScaleHelper {\n scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n addListener = js_helper_1.Helper.nonNull(addListener, true);\n animationDelay = js_helper_1.Helper.nonNull(animationDelay, 0);\n let newFontSize = yield this._getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay === 0);\n if (animationDelay > 0) {\n yield new Promise(r => {\n setTimeout(r, animationDelay);\n fontElement.style.fontSize = newFontSize + \"px\";\n });\n }\n let self = this;\n let listener = function () {\n return new Promise(resolve => {\n let timeout = (typeof addListener === 'number') ? addListener : 255;\n setTimeout(() => {\n resolve(self.scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, false));\n }, timeout);\n });\n };\n if (addListener !== false) {\n window.addEventListener(\"resize\", listener);\n }\n return listener;\n });\n }\n scaleToFull(fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.scaleTo(1, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener);\n });\n }\n _getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, setFontSize) {\n return __awaiter(this, void 0, void 0, function* () {\n margin = js_helper_1.Helper.nonNull(margin, 10);\n ignoreHeight = js_helper_1.Helper.nonNull(ignoreHeight, false);\n ignoreWidth = js_helper_1.Helper.nonNull(ignoreWidth, false);\n fontWeight = js_helper_1.Helper.nonNull(fontWeight, fontElement.innerHTML.length);\n setFontSize = js_helper_1.Helper.nonNull(setFontSize, true);\n let hasNoTransitionClass = container.classList.contains(\"no-transition\");\n if (!hasNoTransitionClass) {\n container.classList.add(\"no-transition\");\n }\n const numChanged = 5;\n let oldDiffIndex = 0;\n let oldDiff = [];\n for (let i = 0; i < numChanged; i++) {\n oldDiff.push(0);\n }\n let beforeFontSize = fontElement.style.fontSize;\n let currentFontSize = 1;\n let widthDiff = 0;\n let heightDiff = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n do {\n currentFontSize += oldDiff[oldDiffIndex] / (fontWeight + 1);\n fontElement.style.fontSize = currentFontSize + 'px';\n let containerStyle = window.getComputedStyle(container);\n containerWidth = parseFloat(containerStyle.getPropertyValue(\"width\").replace('px', ''));\n containerHeight = parseFloat(containerStyle.getPropertyValue(\"height\").replace('px', ''));\n widthDiff = containerWidth - fontElement.offsetWidth;\n heightDiff = containerHeight - fontElement.offsetHeight;\n oldDiffIndex = (oldDiffIndex + 1) % numChanged;\n let newDiff = (ignoreWidth ? heightDiff : (ignoreHeight ? widthDiff : Math.min(widthDiff, heightDiff)));\n if (newDiff === oldDiff[(oldDiffIndex + 1) % numChanged]) {\n break;\n }\n oldDiff[oldDiffIndex] = newDiff;\n } while ((widthDiff > (1 - scale) * containerWidth || ignoreWidth) && (heightDiff > (1 - scale) * containerHeight || ignoreHeight));\n currentFontSize -= margin;\n fontElement.style.fontSize = ((setFontSize) ? currentFontSize + \"px\" : beforeFontSize);\n if (!hasNoTransitionClass) {\n yield new Promise((r) => {\n setTimeout(r, 50);\n });\n container.classList.remove(\"no-transition\");\n }\n return currentFontSize;\n });\n }\n}\nexports.ScaleHelper = ScaleHelper;\n//# sourceMappingURL=ScaleHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseHelper = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nclass PromiseHelper {\n static delay(milliseconds) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(r, milliseconds);\n });\n });\n }\n static tryMultipleTimes(func, times, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n times = Helper_1.Helper.nonNull(times, 5);\n delay = Helper_1.Helper.nonNull(delay, 50);\n for (let i = 0; i < times; i++) {\n let res = yield func();\n if (res !== undefined) {\n return res;\n }\n else {\n yield PromiseHelper.delay(delay);\n }\n }\n return undefined;\n });\n }\n static tryUntilTimeout(func, timeout, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n timeout = Helper_1.Helper.nonNull(timeout, 500);\n delay = Helper_1.Helper.nonNull(delay, 50);\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let shouldRun = true;\n PromiseHelper.delay(timeout).then(() => {\n reject(new Error(\"timeout\"));\n shouldRun = false;\n });\n while (shouldRun) {\n let res = yield func();\n if (res !== undefined) {\n resolve(res);\n break;\n }\n yield PromiseHelper.delay(delay);\n }\n }));\n });\n }\n}\nexports.PromiseHelper = PromiseHelper;\n//# sourceMappingURL=PromiseHelper.js.map","module.exports = __webpack_public_path__ + \"html/shareDialog.html\";","module.exports = __webpack_public_path__ + \"html/loginSite.html\";","module.exports = __webpack_public_path__ + \"html/forgotPasswordSite.html\";","module.exports = __webpack_public_path__ + \"html/notAllowedSite.html\";","module.exports = __webpack_public_path__ + \"html/selectUserDialog.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OfflineUserManager = void 0;\nconst client_1 = require(\"cordova-sites-easy-sync/dist/client\");\nconst client_2 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"./UserManager\");\nconst Role_1 = require(\"../../shared/v1/model/Role\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass OfflineUserManager extends UserManager_1.UserManager {\n constructor() {\n super();\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n let userId = yield client_2.NativeStoragePromise.getItem(\"user-manager-user-id\");\n if (Helper_1.Helper.isNotNull(userId)) {\n let user = yield User_1.User.findById(userId, User_1.User.getRelations());\n if (Helper_1.Helper.isNotNull(user) && user.activated && !user.blocked) {\n yield this._handleLoginFromUser(user);\n }\n }\n return this._userData;\n });\n }\n _handleLoginFromUser(user) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = [];\n let roles = user.roles;\n let roleIds = [];\n roles.forEach(role => {\n roleIds.push(role.id);\n });\n roles = yield Role_1.Role.findByIds(roleIds, [\"accesses\"]);\n yield Helper_1.Helper.asyncForEach(roles, (role) => __awaiter(this, void 0, void 0, function* () {\n accesses.push(...yield this._getAccessesFromRole(role));\n }));\n let accessNames = [];\n accesses.forEach(access => {\n accessNames.push(access.name);\n });\n this._userData = {\n id: user.id,\n loggedIn: true,\n online: true,\n username: user.username,\n email: user.email,\n accesses: accessNames,\n };\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield User_1.User.findOne({\n \"email\": email,\n \"password\": this._hashPassword(password),\n \"activated\": true,\n \"blocked\": false,\n }, undefined, undefined, User_1.User.getRelations());\n if (user) {\n yield this._handleLoginFromUser(user);\n if (saveLogin) {\n yield client_2.NativeStoragePromise.setItem(\"user-manager-user-id\", user.id);\n }\n return true;\n }\n return false;\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n yield client_2.NativeStoragePromise.remove(\"user-manager-user-id\");\n return false;\n });\n }\n _getAccessesFromRole(role) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = role.accesses;\n let repo = yield client_1.EasySyncClientDb.getInstance()._getRepository(Role_1.Role.getSchemaName());\n let parents = yield repo.createQueryBuilder(Role_1.Role.getSchemaName())\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.accesses', \"access\")\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.children', \"child\")\n .where('child.id = :id', { id: role.id })\n .getMany();\n yield Helper_1.Helper.asyncForEach(parents, (role) => __awaiter(this, void 0, void 0, function* () {\n let otherAccesses = yield this._getAccessesFromRole(role);\n accesses.push(...otherAccesses);\n }));\n return accesses;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let errors = {};\n let users = yield Promise.all([\n User_1.User.findOne({ \"email\": email }),\n User_1.User.findOne({ \"username\": username }),\n ]);\n if (Helper_1.Helper.isNotNull(users[0])) {\n errors[\"email\"] = \"email is already in use.\";\n }\n if (Helper_1.Helper.isNotNull(users[1])) {\n errors[\"username\"] = \"username is already in use.\";\n }\n if (Object.keys(errors).length > 0) {\n return errors;\n }\n let user = new User_1.User();\n user.id = yield OfflineUserManager._getNewId();\n user.email = email;\n user.password = this._hashPassword(password);\n user.username = username;\n user.roles = OfflineUserManager.DEFAULT_ROLES;\n user.activated = true;\n yield user.save();\n // user.roles\n yield this.login(email, password);\n return user;\n });\n }\n static _getNewId() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(OfflineUserManager._lastId)) {\n let user = yield User_1.User.findOne(undefined, { \"id\": \"DESC\" });\n OfflineUserManager._lastId = user.id;\n }\n OfflineUserManager._lastId++;\n return OfflineUserManager._lastId;\n });\n }\n _hashPassword(pw) {\n return pw;\n }\n}\nexports.OfflineUserManager = OfflineUserManager;\nOfflineUserManager.LOGGED_OUT_ACCESSES = UserManager_1.UserManager.OFFLINE_ACCESSES;\nOfflineUserManager.DEFAULT_ROLES = [];\nOfflineUserManager._lastId = null;\n//# sourceMappingURL=OfflineUserManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob_old = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass SyncJob_old {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromises = [];\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (shared_1.Helper.isNull(this._lastSyncDates)) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n let saveResults = yield this._doRuns(requestQueries);\n yield this._handleRelations();\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //Calculate final result and give it back\n let finalRes = {};\n saveResults.forEach(res => {\n if (res) {\n if (!finalRes[res.model]) {\n finalRes[res.model] = {\n \"deleted\": [],\n \"changed\": []\n };\n }\n if (res.deleted) {\n finalRes[res.model][\"deleted\"] = finalRes[res.model][\"deleted\"].concat(res.entities);\n }\n else {\n finalRes[res.model][\"changed\"] = finalRes[res.model][\"changed\"].concat(res.entities);\n }\n }\n });\n if (finalRes[\"FileMedium\"] && finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(finalRes[\"FileMedium\"][\"changed\"]);\n }\n return finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n let shouldAskAgain = false;\n //Ask for next run until no more runs needed\n do {\n shouldAskAgain = false;\n response = yield SyncJob_old._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (this._extractEntities(res)) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n return Promise.all(this._savePromises);\n });\n }\n _handleRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n let mergedRelations = {};\n let relationPromises = [];\n Object.keys(this._relationshipModels).forEach(modelClassName => {\n let relationDefinitions = this._keyedModelClasses[modelClassName].getRelationDefinitions();\n Object.keys(this._relationshipModels[modelClassName]).forEach(id => {\n let entity = this._relationshipModels[modelClassName][id][\"entity\"];\n let relations = this._relationshipModels[modelClassName][id][\"relations\"];\n let entityRelationPromises = [];\n Object.keys(relations).forEach(relation => {\n //foreach relation load other models and save them here\n let valuePromise = this._handleSingleRelation(relationDefinitions, relation, relations, mergedRelations, entity);\n entityRelationPromises.push(valuePromise.then(value => {\n entity[relation] = value;\n }));\n });\n //Save after all relationships has been set\n relationPromises.push(Promise.all(entityRelationPromises).then(() => {\n return entity.save(true);\n }));\n });\n });\n //Wait for relation-promises\n yield Promise.all(relationPromises);\n yield shared_1.Helper.asyncForEach(Object.keys(mergedRelations), (model) => __awaiter(this, void 0, void 0, function* () {\n let entities = shared_1.Helper.arrayToObject(yield this._keyedModelClasses[model].findByIds(Object.keys(mergedRelations[model]), this._keyedModelClasses[model].getRelations()), e => e.id);\n Object.keys(mergedRelations[model]).forEach(id => {\n if (entities[id]) {\n Object.keys(mergedRelations[model][id]).forEach(relation => {\n if (Array.isArray(mergedRelations[model][id][relation])) {\n entities[id][relation] = shared_1.Helper.nonNull(entities[id][relation], []);\n entities[id][relation].push.apply(entities[id][relation], mergedRelations[model][id][relation]);\n }\n else {\n entities[id][relation] = mergedRelations[model][id][relation];\n }\n });\n }\n });\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(Object.values(entities));\n }), true);\n });\n }\n _handleSingleRelation(relationDefinitions, relationName, relations, mergedRelations, entity) {\n let valuePromise = Promise.resolve(undefined);\n let target = relationDefinitions[relationName][\"target\"];\n let shouldSync = (relationDefinitions[relationName].sync !== false);\n //is relation a *-to-many relation?\n if (Array.isArray(relations[relationName])) {\n if (shouldSync || relations[relationName].every(id => !shared_1.Helper.isSet(this._syncedModels, target, id))) {\n valuePromise = this._keyedModelClasses[target].findByIds(relations[relationName]);\n }\n else {\n let targetRelationDefinition = this._keyedModelClasses[target].getRelationDefinitions()[relationDefinitions[relationName][\"inverseSide\"]];\n relations[relationName].filter(id => !shared_1.Helper.isSet(this._relationshipModels, target, id)).forEach(id => {\n mergedRelations[target] = shared_1.Helper.nonNull(mergedRelations[target], {});\n mergedRelations[target][id] = shared_1.Helper.nonNull(mergedRelations[target][id], {});\n let otherRelationValue = null;\n if (targetRelationDefinition.type === \"many-to-many\" || targetRelationDefinition.type === \"one-to-many\") {\n otherRelationValue = shared_1.Helper.nonNull(mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]], []);\n otherRelationValue.push(entity);\n }\n else {\n otherRelationValue = entity;\n }\n mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]] = otherRelationValue;\n });\n }\n }\n else if (shouldSync || !shared_1.Helper.isSet(this._syncedModels, target, relations[relationName])) {\n valuePromise = this._keyedModelClasses[target].findById(relations[relationName]);\n }\n return valuePromise;\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return false;\n }\n let shouldAskAgain = false;\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedModels = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedModels.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n this._savePromises.push(modelClass._fromJson(changedModels).then((changedEntities) => __awaiter(this, void 0, void 0, function* () {\n let relations = modelClass.getRelationDefinitions();\n let newIds = [];\n changedEntities.forEach(entity => {\n this._syncedModels[modelName][entity.id] = entity;\n newIds.push(entity.id);\n Object.keys(relations).forEach(relation => {\n if (entity[relation]) {\n this._addRelation(modelName, entity, relation);\n //clear relation\n entity[relation] = null;\n }\n });\n });\n //Handle partial Models (different ids on client than server)\n if (modelClass.prototype instanceof EasySyncPartialModel_1.EasySyncPartialModel) {\n let oldObjects = yield modelClass.findByIds(newIds);\n let keyedEntities = shared_1.Helper.arrayToObject(changedEntities, changedEntities => changedEntities.id);\n oldObjects.forEach(old => {\n keyedEntities[old.id].clientId = old.clientId;\n });\n }\n return EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(changedEntities).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": false\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n })));\n //Deletion of the entities\n this._savePromises.push(EasySyncClientDb_1.EasySyncClientDb.getInstance().deleteEntity(deletedModelsIds, modelClass).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": true\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n }));\n if (modelRes.shouldAskAgain) {\n shouldAskAgain = true;\n }\n return shouldAskAgain;\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n _addRelation(modelName, entity, relation) {\n this._relationshipModels[modelName] = shared_1.Helper.nonNull(this._relationshipModels[modelName], {});\n this._relationshipModels[modelName][entity.id] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id], {});\n this._relationshipModels[modelName][entity.id][\"entity\"] = entity;\n this._relationshipModels[modelName][entity.id][\"relations\"] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id][\"relations\"], {});\n this._relationshipModels[modelName][entity.id][\"relations\"][relation] = entity[relation];\n return this._relationshipModels;\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob_old.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n}\nexports.SyncJob_old = SyncJob_old;\nSyncJob_old.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob_old.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModifyEntitySite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst Form_1 = require(\"cordova-sites/dist/client/js/Form\");\nconst js_helper_1 = require(\"js-helper\");\nconst EasySyncBaseModel_1 = require(\"../../shared/EasySyncBaseModel\");\nclass ModifyEntitySite extends MenuSite_1.MenuSite {\n constructor(siteManager, view, model, menuTemplate) {\n super(siteManager, view, menuTemplate);\n this._formSelector = \".entity-form\";\n this._ckEditorConfig = {\n \".editor\": {\n toolbar: ['bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote'],\n removePlugins: [\"Heading\", \"Image\", \"ImageCaption\", \"ImageStyle\", \"ImageToolbar\", \"ImageUpload\", \"Table\", \"TableToolbar\", \"MediaEmbed\", \"CKFinderUploadAdapter\"],\n language: \"de\"\n }\n };\n this._entity = null;\n this._model = model;\n }\n getEntityFromParameters(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(this._model.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel)) {\n throw {\n \"error\": \"wrong class given! Expected EasySyncBaseModel, given \" + this._model.name\n };\n }\n let entity = null;\n if (js_helper_1.Helper.isSet(constructParameters, \"id\")) {\n entity = this._model.findById(constructParameters[\"id\"], this._model.getRelations());\n }\n if (js_helper_1.Helper.isNull(entity)) {\n entity = new this._model();\n }\n return entity;\n });\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let entity = yield this.getEntityFromParameters(constructParameters);\n if (entity !== null) {\n this.setEntity(entity);\n }\n return res;\n });\n }\n setEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n this._entity = entity;\n yield this._viewLoadedPromise;\n let values = yield this.dehydrate(this._entity);\n if (js_helper_1.Helper.isNotNull(values)) {\n yield this._form.setValues(values);\n }\n });\n }\n hydrate(values, entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(values, column)) {\n entity[column] = values[column];\n }\n });\n return entity;\n });\n }\n dehydrate(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let values = {};\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(entity, column)) {\n values[column] = entity[column];\n }\n });\n return values;\n });\n }\n validate(values, form) {\n return __awaiter(this, void 0, void 0, function* () {\n return true;\n });\n }\n saveListener() {\n this.finish();\n }\n save(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let entity = yield this.hydrate(values, this._entity);\n yield entity.save();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._form = new Form_1.Form(this.findBy(this._formSelector), (values) => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n try {\n yield this.save(values);\n this.saveListener();\n }\n catch (e) {\n console.error(e);\n this._form.setErrors({ \"error\": e.message });\n }\n finally {\n this.removeLoadingSymbol();\n }\n }));\n if (js_helper_1.Helper.isNotNull(window[\"CKEditor\"])) {\n Object.keys(this._ckEditorConfig).forEach(selector => {\n this.findBy(selector, true).forEach((e) => __awaiter(this, void 0, void 0, function* () {\n this._form.addEditor(yield CKEditor.create(e, this._ckEditorConfig[selector]));\n }));\n });\n }\n this._form.addValidator((values) => __awaiter(this, void 0, void 0, function* () {\n return yield this.validate(values, this._form);\n }));\n return res;\n });\n }\n}\nexports.ModifyEntitySite = ModifyEntitySite;\n//# sourceMappingURL=ModifyEntitySite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupEasySync1000000000500 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupEasySync1000000000500 {\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"last_sync_dates\", true);\n yield this._addLastSyncDates(queryRunner);\n });\n }\n _addLastSyncDates(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let lastSyncDatesTable = new typeorm_1.Table({\n name: \"last_sync_dates\",\n columns: [\n {\n name: \"id\",\n type: \"Integer\",\n isPrimary: true,\n isGenerated: true,\n generationStrategy: \"increment\",\n },\n {\n name: \"model\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isNullable: true\n },\n {\n name: \"lastSynced\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n isNullable: true\n },\n {\n name: \"where\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n }\n ]\n });\n return yield queryRunner.createTable(lastSyncDatesTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupEasySync1000000000500 = SetupEasySync1000000000500;\n//# sourceMappingURL=SetupEasySync.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChangeUserSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst LoginSite_1 = require(\"./LoginSite\");\nconst SelectUserDialog_1 = require(\"../Dialog/SelectUserDialog\");\nconst view = require(\"./../../html/sites/changeUserSite.html\");\nclass ChangeUserSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, ChangeUserSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let data;\n if (Helper_1.Helper.isSet(constructParameters, \"id\")) {\n data = yield DataManager_1.DataManager.load(ChangeUserSite.LOAD_USER_INFOS_URL + DataManager_1.DataManager.buildQuery({ id: constructParameters[\"id\"] }));\n }\n if (!data || data.success !== true) {\n new client_1.Toast(data.message).show();\n this.finish();\n }\n this._roles = data.roles;\n this._userData = data.userData;\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.findBy(\"#username\").innerText = this._userData.username;\n this._hasRoleContainer = this.findBy(\"#has-role-container\");\n this._availableRoleContainer = this.findBy(\"#available-role-container\");\n this._hasRoleTemplate = this.findBy(\"#has-role-template\");\n this._availableRoleTemplate = this.findBy(\"#available-role-template\");\n this._hasRoleTemplate.removeAttribute(\"id\");\n this._availableRoleTemplate.removeAttribute(\"id\");\n this._hasRoleTemplate.remove();\n this._availableRoleTemplate.remove();\n this.updateRoles();\n return res;\n });\n }\n updateRoles() {\n let userRoles = [];\n let availableRoles = [];\n this._roles.forEach(role => {\n if (this._userData.roleIds.indexOf(role.id) !== -1) {\n userRoles.push(role);\n }\n else {\n availableRoles.push(role);\n }\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._hasRoleContainer);\n userRoles.forEach((role, i) => {\n let elem = this._hasRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".remove-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: false\n });\n if (res.success) {\n this._userData.roleIds.splice(this._userData.roleIds.indexOf(role.id), 1);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._hasRoleContainer.appendChild(elem);\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._availableRoleContainer);\n availableRoles.forEach(role => {\n let elem = this._availableRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".add-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: true\n });\n if (res.success) {\n this._userData.roleIds.push(role.id);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._availableRoleContainer.appendChild(elem);\n });\n }\n}\nexports.ChangeUserSite = ChangeUserSite;\nChangeUserSite.ACCESS = \"admin\";\nChangeUserSite.LOAD_USER_INFOS_URL = \"/user/userRoles\";\nChangeUserSite.CHANGE_USER_ROLE_URL = \"/user/changeUserRole\";\nChangeUserSite.ADD_CHANGE_USER_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (ChangeUserSite.ADD_CHANGE_USER_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"change user\", ChangeUserSite.ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n let user = yield new SelectUserDialog_1.SelectUserDialog().show();\n yield app.startSite(ChangeUserSite, { \"id\": user[\"id\"] });\n })));\n }\n app.addDeepLink(\"login\", LoginSite_1.LoginSite);\n});\n//# sourceMappingURL=ChangeUserSite.js.map","module.exports = __webpack_public_path__ + \"html/changeUserSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegistrationSite = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/registrationSite.html\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst User_1 = require(\"../../../shared/v1/model/User\");\nclass RegistrationSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, RegistrationSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#registration-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n let result = yield UserManager_1.UserManager.getInstance().register(data[\"email\"], data[\"username\"], data[\"password\"]);\n if ((result instanceof User_1.User) || result === true) {\n yield new client_1.Toast(\"registration successful\").show();\n yield this.finish();\n }\n else {\n yield form.setErrors(result);\n }\n }));\n form.addValidator(data => {\n if (data[\"password\"] !== data[\"password2\"]) {\n return {\n \"password2\": \"the passwords do not match.\"\n };\n }\n return true;\n });\n // let listener = () => form.clearErrors();\n // this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n // this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n return res;\n });\n }\n}\nexports.RegistrationSite = RegistrationSite;\nRegistrationSite.ACCESS = \"loggedOut\";\nRegistrationSite.ADD_REGISTRATION_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (RegistrationSite.ADD_REGISTRATION_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"registration\", RegistrationSite.ACCESS, RegistrationSite));\n }\n app.addDeepLink(\"registration\", RegistrationSite);\n});\n//# sourceMappingURL=RegistrationSite.js.map","module.exports = __webpack_public_path__ + \"html/registrationSite.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncModel = void 0;\nconst AccessEasySyncModel_1 = require(\"./AccessEasySyncModel\");\nconst User_1 = require(\"./User\");\nclass UserSyncModel extends AccessEasySyncModel_1.AccessEasySyncModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncModel = UserSyncModel;\nUserSyncModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncPartialModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst User_1 = require(\"./User\");\nclass UserSyncPartialModel extends shared_1.EasySyncPartialModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncPartialModel = UserSyncPartialModel;\nUserSyncPartialModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncPartialModel.js.map","export default \"img/settings.png\";","module.exports = __webpack_public_path__ + \"html/menu.html\";","module.exports = __webpack_public_path__ + \"html/level.html\";","export default \"img/single_coin_fall_on_concrete_.mp3\";","module.exports = __webpack_public_path__ + \"html/end.html\";","module.exports = __webpack_public_path__ + \"html/settingsSite.html\";","module.exports = __webpack_public_path__ + \"html/tutorialSite.html\";","module.exports = __webpack_public_path__ + \"html/settings.html\";","module.exports = __webpack_public_path__ + \"html/credits.html\";","module.exports = __webpack_public_path__ + \"html/privacyPolicy.html\";","module.exports = __webpack_public_path__ + \"html/impressum.html\";","module.exports = __webpack_public_path__ + \"html/contactSite.html\";","export default __webpack_public_path__ + \"index.css\";","import {AccessEasySyncModel} from \"cordova-sites-user-management/dist/shared\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\n\nexport class LevelData extends AccessEasySyncModel{\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"words\"] = BaseDatabase.TYPES.STRING;\n columns[\"positions\"] = BaseDatabase.TYPES.STRING;\n columns[\"renderer\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"lang\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"difficulty\"] = BaseDatabase.TYPES.INTEGER;\n return columns;\n }\n\n static async getNextLevelData(renderer){\n debugger;\n }\n}\nBaseDatabase.addModel(LevelData);","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelData} from \"../../LevelData\";\n\nexport class Setup1000000002000 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelData, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","import {Helper} from \"js-helper/dist/shared/Helper\";\n\nexport class TemplateContainer{\n constructor(leafTemplate, parentTemplate, rowTemplate, triangleTemplate, columnTemplate){\n this.leafTemplate = leafTemplate;\n this.parentTemplate = parentTemplate;\n this.rowTemplate = rowTemplate;\n this.triangleTemplate = triangleTemplate;\n this.columnTemplate = columnTemplate;\n }\n\n copyLeafTemplate()\n {\n return this.leafTemplate.cloneNode(true);\n }\n\n copyParentTemplate()\n {\n return this.parentTemplate.cloneNode(true);\n }\n\n copyRowTemplate()\n {\n return this.rowTemplate.cloneNode(true);\n }\n\n copyTriangleTemplate()\n {\n return this.triangleTemplate.cloneNode(true);\n }\n\n copyColumnTemplate(){\n return this.columnTemplate.cloneNode(true);\n }\n}","\nexport class Segment{\n constructor(element){\n this.rotation = 0;\n this.element = element;\n this.parent = null;\n }\n\n getCurrentRotations(rotations){\n return rotations;\n }\n\n sameAs(otherSegment){\n return false;\n }\n\n setParent(parent)\n {\n this.parent = parent;\n }\n \n getLevel()\n {\n if (this.parent!==null)\n {\n return this.parent.getLevel();\n }\n }\n\n canRotate(){\n return false;\n }\n\n isSolved(){\n return (this.rotation === 0);\n }\n \n async rotate(){\n return Promise.resolve();\n };\n\n _updateElement(){};\n\n applyRotations(rotations){\n return rotations;\n }\n\n applyLocks(locks)\n {\n return locks;\n }\n\n getCurrentLocked(lockedArray){\n return lockedArray;\n }\n\n getElement()\n {\n return this.element;\n }\n}\n","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class LeafSegment extends Segment {\n\n constructor(element, leaf) {\n super(element);\n this.leaf = 'A';\n if (Helper.isNotNull(leaf)) {\n this.setLeaf(leaf);\n }\n }\n\n sameAs(otherSegment) {\n // debugger;\n return (otherSegment instanceof LeafSegment && otherSegment.leaf === this.leaf);\n }\n\n setLeaf(leaf) {\n this.leaf = leaf;\n }\n\n _updateElement() {\n ViewHelper.removeAllChildren(this.element.querySelector(\".leaf-element\")).appendChild(document.createTextNode(this.leaf));\n }\n}","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ParentSegment extends Segment {\n static initListener() {\n window.addEventListener(\"mousedown\", (e) => {\n // console.log(\"mousedown\");\n ParentSegment.mouseDownTarget = e.target;\n ParentSegment.clickPosition = {x: e.pageX, y: e.pageY};\n });\n window.addEventListener(\"mouseup\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n\n window.addEventListener(\"touchstart\", (e) => {\n if (e.targetTouches.length === 1) {\n ParentSegment.mouseDownTarget = e.targetTouches[0].target;\n ParentSegment.clickPosition = {x: e.targetTouches[0].pageX, y: e.targetTouches[0].pageY};\n }\n });\n window.addEventListener(\"touchend\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n }\n\n setIsRotatable(rotatable) {\n this.rotatable = rotatable;\n this._updateElement();\n }\n\n constructor(element) {\n super(element);\n this.children = [];\n this.class = \"rotate-0\";\n this.rotatable = true;\n\n this.userRotationDelta = 100;\n this.lastUserRotation = 0;\n\n this.touchendListener = (e) => {\n let now = new Date().getTime();\n\n let target = null;\n let position = null;\n\n if (e.changedTouches.length >= 1) {\n target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY);\n position = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY};\n }\n if (target != null && e.targetTouches.length === 0 && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(target)) {\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, target, ParentSegment.clickPosition, position);\n // console.log(\"touchendListener stopped event\", e);\n\n this.lastUserRotation = new Date().getTime();\n }\n };\n this.mouseupListener = (e) => {\n let now = new Date().getTime();\n\n // console.log(\"mouseup\", ParentSegment.mouseDownTarget);\n if (ParentSegment.mouseDownTarget !== null && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(e.target)) {\n let position = {x: e.pageX, y: e.pageY};\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, e.target, ParentSegment.clickPosition, position);\n // console.log(\"mouseupListener stopped event\", e);\n this.lastUserRotation = new Date().getTime();\n }\n };\n }\n\n canRotate() {\n return (this.rotatable && !this.getLevel().getHasWon());\n }\n\n async rotate(firstElem, secondElem, firstPosition, secondPosition) {\n const timeout = 250;\n const clickTolerance = 5;\n\n let rotationDirection = 1;\n if (Helper.isNotNull(secondElem) && Helper.isNotNull(firstElem) &&\n (Helper.isNull(firstPosition) || Helper.isNull(secondPosition) ||\n Math.abs(firstPosition.x - secondPosition.x) > clickTolerance ||\n Math.abs(firstPosition.y - secondPosition.y) > clickTolerance)) {\n\n let firstIndex = -1;\n let secondIndex = -1;\n let rotationIndexes = [0, 1, 3, 2];\n for (let i = 0; i < this.children.length; i++) {\n if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) {\n firstIndex = (i + this.rotation / 90) % 4;\n }\n if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) {\n secondIndex = (i + this.rotation / 90) % 4;\n }\n }\n\n if (firstIndex >= 0 && secondIndex >= 0) {\n if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1)\n || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3)\n || (firstIndex === 0 && secondIndex === 3)\n || (firstIndex === 3 && secondIndex === 2)) {\n rotationDirection = -1;\n }\n }\n }\n\n if (this.canRotate()) {\n this.rotation += 360 + 90 * rotationDirection;\n this.rotation %= 360;\n\n let currentRotation = this.rotation;\n\n this._updateRotationClass();\n this.element.classList.add(\"rotating\");\n if (rotationDirection === -1) {\n this.element.classList.add(\"reverse\");\n }\n\n let delayPromise = new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n }).then(() => {\n if (this.rotation === currentRotation) {\n this.element.classList.remove(\"rotating\");\n this.element.classList.remove(\"reverse\");\n }\n });\n this.getLevel().checkHasWon(delayPromise);\n return delayPromise;\n }\n }\n\n sameAs(otherSegment) {\n if (!(otherSegment instanceof ParentSegment) || otherSegment.children.length !== this.children.length) {\n return false;\n }\n for (let i = 0; i < this.children.length; i++) {\n if (!this.children[i].sameAs(otherSegment.children[i])) {\n return false;\n }\n }\n return true;\n }\n\n applyRotations(rotations) {\n this.rotation = rotations[0];\n\n if (isNaN(this.rotation)) {\n this.rotation = 0;\n }\n\n rotations.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n applyLocks(locks) {\n this.rotatable = (locks[0] !== false);\n locks.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n getCurrentRotations(rotations) {\n rotations.push(this.rotation);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n locked.push(this.rotatable);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n isSolved(checkChildren) {\n checkChildren = Helper.nonNull(checkChildren, true);\n if (checkChildren) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n if (!this.children[i].isSolved()) {\n return false;\n }\n }\n }\n return (this.rotation === 0 || (\n this.children[0].sameAs(this.children[3]) && this.children[1].sameAs(this.children[2]) && (\n this.rotation === 180 || this.children[0].sameAs(this.children[1]))))\n }\n\n setChildren(children) {\n this.children = [];\n for (let i = 0, n = children.length; i < n; i++) {\n this.addChild(children[i]);\n }\n }\n\n addChild(child) {\n this.children.push(child);\n child.setParent(this);\n this._updateElement();\n }\n\n _updateRotationClass() {\n // this.style.transform = \"rotate(\"+this.rotation+\"deg)\";\n this.element.classList.remove(this.class);\n this.class = \"rotate-\" + this.rotation;\n if (this.class === \"rotate-0\") {\n this.class = \"rotate-360\";\n }\n this.element.classList.add(this.class);\n }\n\n _updateElement() {\n let layer = this._getLayer();\n if (layer >= 2) {\n this.element.classList.add(\"layer-\" + layer);\n }\n\n if (!this.rotatable) {\n this.element.classList.add(\"locked\");\n }\n\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n this.element.removeEventListener(\"mouseup\", this.mouseupListener);\n this.element.removeEventListener(\"touchend\", this.touchendListener);\n\n this.element.addEventListener(\"mouseup\", this.mouseupListener);\n this.element.addEventListener(\"touchend\", this.touchendListener);\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n if (i % 2 === 1 && this.children.length - 1 !== i) {\n childContainer.appendChild(document.createElement(\"br\"));\n }\n }\n }\n\n _getLayer() {\n if (this.children.length >= 1 && this.children[0] && this.children[0] instanceof ParentSegment) {\n return this.children[0]._getLayer() + 1;\n }\n return 1;\n }\n}\n\nParentSegment.initListener();\n","import {LeafSegment} from \"../Segment/LeafSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {Random} from \"js-helper\";\n\nexport class Level {\n constructor(templateContainer) {\n this.rootSegment = null;\n this.words = [];\n this.startRotations = [];\n this.templateContainer = templateContainer;\n\n this.levelData = null;\n\n this.hasWon = false;\n this.id = null;\n\n this.saveAsCurrentAfterCheckWon = true;\n\n this.wonResolver = null;\n this.giveUpResolver = null;\n\n this._shakeLeafs = true;\n this._shakeLeafsTimeout = null;\n this._lastRotation = 0;\n\n this.wonPromise = new Promise((resolve, reject) => {\n this.wonResolver = resolve;\n this.giveUpResolver = reject;\n });\n\n this.segmentClickedListener = () => {\n // console.log(\"clicked\")\n };\n }\n\n getLevelData() {\n return this.levelData;\n }\n\n setLevelData(levelData) {\n this.levelData = levelData;\n }\n\n async saveAsCurrentLevel() {\n let rotations = this.getCurrentRotations();\n let locked = this.getCurrentLocked();\n await NativeStoragePromise.setItem(\"currentLevel\", JSON.stringify({\n \"id\": this.id,\n \"rotations\": rotations,\n \"locks\": locked\n }));\n }\n\n getCurrentLocked() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentLocked([]);\n }\n return [];\n }\n\n getCurrentRotations() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentRotations([]);\n }\n return [];\n }\n\n setLocks(locks) {\n if (this.rootSegment !== null) {\n this.rootSegment.applyLocks(locks);\n }\n }\n\n setId(id) {\n this.id = id;\n }\n\n getId() {\n return this.id;\n }\n\n getLevel() {\n return this;\n }\n\n setRootSegment(rootSegment) {\n this.rootSegment = rootSegment;\n this.rootSegment.setParent(this);\n if (this.startRotations) {\n this.applyRotations();\n }\n }\n\n setWords(words) {\n this.words = [];\n for (let i = 0, n = words.length; i < n; i++) {\n this.words.push(words[i].replace(/ß/g, \"ẞ\").toUpperCase());\n }\n }\n\n setStartRotations(rotations) {\n this.startRotations = rotations;\n }\n\n applyRotations(rotations) {\n if (this.rootSegment) {\n rotations = Helper.nonNull(rotations, this.startRotations);\n this.rootSegment.applyRotations(rotations);\n }\n }\n\n getHasWon() {\n return this.hasWon;\n }\n\n checkHasWon(delayPromise) {\n if (this.rootSegment.isSolved()) {\n this.hasWon = true;\n const self = this;\n Promise.resolve(delayPromise).then(() => {\n self.wonResolver(true);\n });\n return true;\n }\n if (this.saveAsCurrentAfterCheckWon) {\n this.saveAsCurrentLevel();\n }\n return false;\n }\n\n setSaveAsCurrentAfterCheckWon(shouldSave){\n this.saveAsCurrentAfterCheckWon = (shouldSave === true);\n }\n\n getWonPromise() {\n return this.wonPromise;\n }\n\n getRootSegment() {\n return this.rootSegment;\n }\n\n createSegments() {\n };\n\n getRotatableSegments() {\n return Level._getRotatableSegmentsFrom(this.rootSegment);\n }\n\n segmentClicked(segment) {\n if (this.segmentClickedListener) {\n this.segmentClickedListener(segment);\n }\n\n this._lastRotation = new Date().getTime();\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs) {\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(5000) + 25000);\n }\n }\n\n setSegmentClickedListener(listener) {\n this.segmentClickedListener = listener;\n }\n\n getLeafSegments() {\n return Level._getLeafSegmentsFrom(this.rootSegment);\n }\n\n static _getRotatableSegmentsFrom(segment) {\n let rotatable = [];\n if (segment.canRotate()) {\n rotatable.push(segment);\n }\n if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n rotatable.push.apply(rotatable, Level._getRotatableSegmentsFrom(segment.children[i]));\n }\n }\n return rotatable;\n }\n\n shakeLeafs() {\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs && !this.hasWon) {\n\n const leafs = this.getLeafSegments();\n if (leafs.length > 0) {\n const index = Random.getIntRandom(leafs.length - 1);\n const leaf = leafs[index];\n\n leaf.getElement().classList.add(\"shake\");\n setTimeout(() => {\n leaf.getElement().classList.remove(\"shake\");\n }, Random.getIntRandom(350) + 650);\n }\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(2000) + 5000);\n }\n }\n\n static _createLeafsForWord(word, leafSegmentTemplate) {\n let leafSegments = [];\n for (let i = 0, n = word.length; i < n; i++) {\n leafSegments.push(new LeafSegment(leafSegmentTemplate.cloneNode(true), word.charAt(i)));\n }\n return leafSegments;\n }\n\n static _getLeafSegmentsFrom(segment) {\n let leafs = [];\n if (segment instanceof LeafSegment) {\n leafs.push(segment);\n } else if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n leafs.push(...Level._getLeafSegmentsFrom(segment.children[i]));\n }\n }\n return leafs;\n }\n}\n","import {ParentSegment} from \"./ParentSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class RowSegment extends ParentSegment{\n constructor(element) {\n super(element);\n this.rotatable = false;\n }\n\n applyRotations(rotations)\n {\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentRotations(rotations){\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n applyLocks(locks) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class RowLevel extends Level {\n constructor(container, wordLength) {\n super(container);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 2 && this.words[0].length >= this.wordLength && this.words[1].length >= this.wordLength) {\n let leafsWordOne = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n let leafsWordTwo = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0, n = this.wordLength / 2; i < n; i++) {\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(leafsWordOne[2 * i]);\n parent.addChild(leafsWordOne[2 * i + 1]);\n parent.addChild(leafsWordTwo[2 * i]);\n parent.addChild(leafsWordTwo[2 * i + 1]);\n rootSegment.addChild(parent);\n }\n // rootSegment.applyRotations(this.startRotations);\n this.setRootSegment(rootSegment)\n }\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class SimpleLevel extends RowLevel{\n constructor(container) {\n super(container, 6);\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel8 extends RowLevel{\n constructor(container) {\n super(container, 8);\n }\n}\n","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel10 extends RowLevel{\n constructor(container) {\n super(container, 10);\n }\n}\n","import {RowSegment} from \"./RowSegment\";\n\nexport class TriangleSegment extends RowSegment{\n\n}","import {RowSegment} from \"../Segment/RowSegment\";\nimport {Level} from \"./Level\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {TriangleSegment} from \"../Segment/TriangleSegment\";\n\nexport class SixWordsRowLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 6 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.words[4].length >= this.wordLength &&\n this.words[5].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n leafsWords[4] = Level._createLeafsForWord(this.words[4], this.templateContainer.copyLeafTemplate());\n leafsWords[5] = Level._createLeafsForWord(this.words[5], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[4] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[5] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4*i]);\n parents[0].addChild(leafsWords[0][4*i+1]);\n parents[0].addChild(leafsWords[1][4*i]);\n parents[0].addChild(leafsWords[1][4*i+1]);\n\n parents[1].addChild(leafsWords[0][4*i+2]);\n parents[1].addChild(leafsWords[0][4*i+3]);\n parents[1].addChild(leafsWords[1][4*i+2]);\n parents[1].addChild(leafsWords[1][4*i+3]);\n\n parents[2].addChild(leafsWords[2][4*i]);\n parents[2].addChild(leafsWords[2][4*i+1]);\n parents[2].addChild(leafsWords[3][4*i]);\n parents[2].addChild(leafsWords[3][4*i+1]);\n\n parents[3].addChild(leafsWords[2][4*i+2]);\n parents[3].addChild(leafsWords[2][4*i+3]);\n parents[3].addChild(leafsWords[3][4*i+2]);\n parents[3].addChild(leafsWords[3][4*i+3]);\n\n parents[4].addChild(leafsWords[4][4*i]);\n parents[4].addChild(leafsWords[4][4*i+1]);\n parents[4].addChild(leafsWords[5][4*i]);\n parents[4].addChild(leafsWords[5][4*i+1]);\n\n parents[5].addChild(leafsWords[4][4*i+2]);\n parents[5].addChild(leafsWords[4][4*i+3]);\n parents[5].addChild(leafsWords[5][4*i+2]);\n parents[5].addChild(leafsWords[5][4*i+3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n let triangle = new TriangleSegment(this.templateContainer.copyTriangleTemplate());\n if (i % 2 === 0) {\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[4]);\n rowSegment.addChild(parents[5]);\n\n triangle.addChild(parent);\n triangle.addChild(rowSegment);\n\n triangle.getElement().classList.add(\"type-1\");\n }\n else {\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[0]);\n rowSegment.addChild(parents[1]);\n\n triangle.addChild(rowSegment);\n triangle.addChild(parent);\n\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n parent.addChild(parents[4]);\n parent.addChild(parents[5]);\n\n triangle.getElement().classList.add(\"type-2\");\n }\n rootSegment.addChild(triangle);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel8 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel12 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class FourWordsLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4 * i]);\n parents[0].addChild(leafsWords[0][4 * i + 1]);\n parents[0].addChild(leafsWords[1][4 * i]);\n parents[0].addChild(leafsWords[1][4 * i + 1]);\n\n parents[1].addChild(leafsWords[0][4 * i + 2]);\n parents[1].addChild(leafsWords[0][4 * i + 3]);\n parents[1].addChild(leafsWords[1][4 * i + 2]);\n parents[1].addChild(leafsWords[1][4 * i + 3]);\n\n parents[2].addChild(leafsWords[2][4 * i]);\n parents[2].addChild(leafsWords[2][4 * i + 1]);\n parents[2].addChild(leafsWords[3][4 * i]);\n parents[2].addChild(leafsWords[3][4 * i + 1]);\n\n parents[3].addChild(leafsWords[2][4 * i + 2]);\n parents[3].addChild(leafsWords[2][4 * i + 3]);\n parents[3].addChild(leafsWords[3][4 * i + 2]);\n parents[3].addChild(leafsWords[3][4 * i + 3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n rootSegment.addChild(parent);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel8 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel12 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {RowSegment} from \"./RowSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ColumnSegment extends RowSegment{\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n\n // constructor(element) {\n // super(element);\n // this.rotatable = false;\n // }\n //\n // applyRotations(rotations)\n // {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].applyRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentRotations(rotations){\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].getCurrentRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentLocked(locked) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locked = this.children[i].getCurrentLocked(locked);\n // }\n // return locked;\n // }\n //\n // applyLocks(locks) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locks = this.children[i].applyLocks(locks);\n // }\n // return locks;\n // }\n //\n // _updateElement() {\n // const childContainer = this.element.querySelector(\".child-container\");\n // ViewHelper.removeAllChildren(childContainer);\n //\n // this._updateRotationClass();\n //\n // const self = this;\n // this.element.onclick = function (e) {\n // self.rotate();\n // e.stopPropagation();\n // };\n //\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // this.children[i]._updateElement();\n // childContainer.appendChild(this.children[i].getElement());\n // }\n // }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {ColumnSegment} from \"../Segment/ColumnSegment\";\n\nexport class BigSegmentsLevels extends Level{\n constructor(templateContainer, wordLength, bigSegmentPositions) {\n super(templateContainer);\n this.wordLength = wordLength;\n this.bigSegmentPositions = bigSegmentPositions;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.wordLength >= 4\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 2; i++) {\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][2 * i]);\n parents[0].addChild(leafsWords[0][2 * i + 1]);\n parents[0].addChild(leafsWords[1][2 * i]);\n parents[0].addChild(leafsWords[1][2 * i + 1]);\n\n parents[1].addChild(leafsWords[2][2 * i]);\n parents[1].addChild(leafsWords[2][2 * i + 1]);\n parents[1].addChild(leafsWords[3][2 * i]);\n parents[1].addChild(leafsWords[3][2 * i + 1]);\n\n let parentSegment =null;\n if (this.bigSegmentPositions.indexOf(i) !== -1){\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[2].addChild(leafsWords[0][2 * i + 2]);\n parents[2].addChild(leafsWords[0][2 * i + 3]);\n parents[2].addChild(leafsWords[1][2 * i + 2]);\n parents[2].addChild(leafsWords[1][2 * i + 3]);\n\n parents[3].addChild(leafsWords[2][2 * i + 2]);\n parents[3].addChild(leafsWords[2][2 * i + 3]);\n parents[3].addChild(leafsWords[3][2 * i + 2]);\n parents[3].addChild(leafsWords[3][2 * i + 3]);\n\n parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[2]);\n parentSegment.addChild(parents[1]);\n parentSegment.addChild(parents[3]);\n i++;\n }\n else{\n parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[1]);\n }\n\n rootSegment.addChild(parentSegment);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class SimpleFourWordsLevel extends BigSegmentsLevels{\n constructor(templateContainer, wordLength, bigSegmentPosition) {\n super(templateContainer, wordLength, [bigSegmentPosition]);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_0 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 0);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_1 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 1);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_2 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 2);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_3 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 3);\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_1_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [1,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_2 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,2]);\n }\n}\n\n","import {SimpleLevel} from \"./SimpleLevel\";\nimport {RowLevel8} from \"./RowLevel8\";\nimport {RowLevel10} from \"./RowLevel10\";\nimport {SixWordsRowLevel8} from \"./SixWordsRowLevel8\";\nimport {SixWordsRowLevel12} from \"./SixWordsRowLevel12\";\nimport {FourWordsLevel8} from \"./FourWordsLevel8\";\nimport {FourWordsLevel12} from \"./FourWordsLevel12\";\nimport {SimpleFourWordsLevel10_0} from \"./SimpleFourWordsLevel10_0\";\nimport {SimpleFourWordsLevel10_1} from \"./SimpleFourWordsLevel10_1\";\nimport {SimpleFourWordsLevel10_2} from \"./SimpleFourWordsLevel10_2\";\nimport {SimpleFourWordsLevel10_3} from \"./SimpleFourWordsLevel10_3\";\nimport {TwoSegmentFourWordsLevel10_0_3} from \"./TwoSegmentFourWordsLevel10_0_3\";\nimport {TwoSegmentFourWordsLevel10_1_3} from \"./TwoSegmentFourWordsLevel10_1_3\";\nimport {TwoSegmentFourWordsLevel10_0_2} from \"./TwoSegmentFourWordsLevel10_0_2\";\nimport {Level} from \"./Level\";\n\nexport class LevelHelper {\n public static readonly types = {\n 20: SimpleLevel,\n 40: RowLevel8,\n 60: RowLevel10,\n 80: SimpleFourWordsLevel10_0,\n 81: SimpleFourWordsLevel10_1,\n 82: SimpleFourWordsLevel10_2,\n 83: SimpleFourWordsLevel10_3,\n 100: SixWordsRowLevel8,\n 110: TwoSegmentFourWordsLevel10_0_3,\n 111: TwoSegmentFourWordsLevel10_1_3,\n 112: TwoSegmentFourWordsLevel10_0_2,\n 120: FourWordsLevel8,\n 140: SixWordsRowLevel12,\n 160: FourWordsLevel12,\n };\n static setLevelType(typeId, level) {\n LevelHelper.types[typeId] = level;\n }\n\n static getLevelClass(type) {\n return LevelHelper.types[type];\n }\n\n static inflateLevel(levelData, templateContainer): Level {\n let level = new (LevelHelper.types[levelData[\"renderer\"]])(templateContainer);\n level.setWords(JSON.parse(levelData[\"words\"].replace(/"/g, '\"')));\n level.setId(levelData[\"id\"]);\n level.setLevelData(levelData);\n\n levelData[\"positions\"] = JSON.parse(levelData[\"positions\"]);\n for (let i = 0, n = levelData[\"positions\"].length; i < n; i++) {\n if (levelData[\"positions\"][i] <= 4) {\n levelData[\"positions\"][i] = 90 * levelData[\"positions\"][i];\n }\n }\n\n level.setStartRotations(levelData[\"positions\"]);\n return level;\n }\n}\n","const view = require(\"../../html/sites/end.html\");\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class EndSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n","import {BaseModel} from \"cordova-sites-database/dist/BaseModel\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {SelectQueryBuilder} from \"typeorm\";\n\nexport class LevelPlayed extends BaseModel {\n\n levelData: LevelData;\n played: boolean;\n\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"played\"] = {type: BaseDatabase.TYPES.BOOLEAN, default: true};\n return columns;\n }\n\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"levelData\"] = {\n target: LevelData.getSchemaName(),\n type: \"one-to-one\",\n joinColumn: true,\n // cascade: true,\n };\n return relations;\n }\n\n static async setPlayed(levelData, played?){\n played = Helper.nonNull(played, true);\n let levelPlayed = new LevelPlayed();\n levelPlayed.levelData = levelData;\n levelPlayed.played = played;\n\n return await levelPlayed.save();\n }\n\n static async getNextLevelData(renderer){\n let qb = >await this._database.createQueryBuilder(LevelData);\n\n qb = qb.select(\"COUNT(*) as count, difficulty\")\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .groupBy(\"difficulty\")\n .orderBy(\"difficulty, LevelData.id\");\n\n let countRes = await qb.getRawMany();\n\n let difficulty = null;\n let offset = null;\n\n if (!countRes.some(res => {\n if (res[\"count\"] > 0){\n difficulty = res[\"difficulty\"];\n offset = Math.floor(Math.random() * Math.floor(res[\"count\"]));\n return true;\n }\n return false;\n })){\n return null;\n }\n\n qb = >await this._database.createQueryBuilder(LevelData);\n qb = qb\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"difficulty = \"+difficulty)\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .orderBy(\"LevelData.id\")\n .limit(1)\n .offset(offset);\n\n return await qb.getOne();\n }\n}\nBaseDatabase.addModel(LevelPlayed);\n","import {Level} from \"../wordrotator/Level/Level\";\n\nconst helpIcon = require(\"../../img/help.png\").default;\nconst view = require(\"../../html/sites/level.html\");\nconst coinSound = require(\"../../sound/single_coin_fall_on_concrete_.mp3\").default;\n\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {EndSite} from \"./EndSite\";\n\nimport {\n MenuAction,\n Toast,\n ScaleHelper,\n Matomo,\n NativeStoragePromise,\n} from \"cordova-sites/dist/client\";\n\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class LevelSite extends MenuSite {\n\n public static readonly RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 110, 111, 112, 120, 140, 160];\n public static readonly TUTORIAL = {\n FIRST_LEVEL: 67,\n SECOND_LEVEL: 15,\n BIG_SEGMENT_LEVEL: 1921\n };\n\n private coinAction: MenuAction;\n private levelCounterAction: MenuAction;\n private levelCounter: number;\n private levelScaler: () => void;\n private wonParams: { aborted: boolean; coinCounterTimer: any };\n private coinPromise: Promise;\n private continueButtonScaler: () => Promise;\n private wonTextScaler: () => Promise;\n private wonText: HTMLElement;\n private templateContainer: TemplateContainer;\n private coinTemplate: HTMLElement;\n private coinContainer: HTMLElement;\n private level: Level;\n\n constructor(siteManager) {\n super(siteManager, view);\n // this.getNavbarFragment().setBackgroundImage(null);\n }\n\n async onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n\n let coinAction = new MenuAction(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n coinAction._shouldTranslate = false;\n coinAction.setLiClass(\"coin-counter img\");\n navbar.addAction(coinAction);\n this.coinAction = coinAction;\n\n let levelCounterAction = new MenuAction(Helper.nonNull(this.levelCounter, \"1\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n levelCounterAction._shouldTranslate = false;\n levelCounterAction.setLiClass(\"level-counter\");\n navbar.addAction(levelCounterAction);\n this.levelCounterAction = levelCounterAction;\n\n let helpAction = new MenuAction(\"\", () => {\n this.help();\n }, MenuAction.SHOW_ALWAYS, 900);\n helpAction._shouldTranslate = false;\n helpAction._icon = helpIcon;\n helpAction.setLiClass(\"help-action show-while-playing\");\n navbar.addAction(helpAction);\n\n return navbar;\n }\n\n async onConstruct(args) {\n this.levelCounter = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n // this.levelCounter = 9999;\n this.levelScaler = () => {\n };\n this.wonParams = {\n aborted: false,\n coinCounterTimer: null,\n };\n this.coinPromise = Promise.resolve();\n\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: ((await NativeStoragePromise.getItem(\"play-sound\", \"1\")) !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n soundManager.resume(SoundManager.CHANNELS.MUSIC);\n\n return super.onConstruct(args);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.addEventListener(\"click\", () => {\n continueButton.style.opacity = 0;\n this.nextLevel();\n });\n\n let wonText = this.findBy(\"#won-text\");\n\n let scaleHelper = new ScaleHelper();\n this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2);\n this.wonTextScaler = await scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5);\n this.wonText = wonText;\n this.wonText.style.fontSize = \"0\";\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n this.coinTemplate = this.findBy(\"#coin-template\");\n this.coinContainer = this.findBy(\"#coin-container\");\n\n this.coinTemplate.id = null;\n ViewHelper.removeAllChildren(this.coinContainer);\n\n // this.findBy(\"#help-button\").addEventListener(\"click\", () => {\n // this.help();\n // });\n await this.loadLastLevel();\n\n return res;\n }\n\n async loadLastLevel() {\n try {\n let currentLevelInfo = await NativeStoragePromise.getItem(\"currentLevel\");\n if (Helper.isNotNull(currentLevelInfo)) {\n currentLevelInfo = JSON.parse(currentLevelInfo);\n\n let levelData = await LevelData.findById(currentLevelInfo[\"id\"]);\n\n if (Helper.isNull(levelData)) {\n return this.nextLevel();\n }\n\n let level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n level.setStartRotations(currentLevelInfo[\"rotations\"]);\n\n level.getWonPromise().then(() => {\n this.levelWon(level);\n });\n\n level.createSegments();\n level.setLocks(currentLevelInfo[\"locks\"]);\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleTo(1, levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LoadLastLevel\"]);\n this.level.checkHasWon();\n return;\n }\n } catch (e) {\n console.error(e);\n }\n return this.nextLevel();\n }\n\n startEndSite() {\n this.startSite(EndSite);\n this.finish();\n }\n\n updateLevelCounter() {\n this.levelCounterAction.setName(this.levelCounter);\n if (this.levelCounter >= 10 && this.levelCounter <= 99) {\n this.levelCounterAction.setLiClass(\"num-10 level-counter\");\n } else if (this.levelCounter >= 100 && this.levelCounter <= 999) {\n this.levelCounterAction.setLiClass(\"num-100 level-counter\");\n } else if (this.levelCounter >= 1000) {\n this.levelCounterAction.setLiClass(\"num-1000 level-counter\");\n } else {\n this.levelCounterAction.setLiClass(\"level-counter\");\n }\n }\n\n async nextLevel() {\n this.showLoadingSymbol();\n try {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n // let levelData = await LevelData.findById(34);\n // this.level = null;\n\n if (Helper.isNull(levelData)) {\n this.startEndSite();\n return;\n }\n\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n //Waiting for Level to be done\n if (this.level && level.id === this.level.id) {\n console.log(\"Level is the same as before! reload!\");\n await new Promise((resolve) => setTimeout(resolve, 50));\n // return;\n debugger;\n return this.nextLevel();\n }\n\n level.getWonPromise().then(async () => {\n await this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n\n this._view.classList.remove('won');\n this.wonText.style.fontSize = \"0\";\n this.removeLoadingSymbol();\n\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n this.updateLevelCounter();\n\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n\n this.wonParams.aborted = true;\n clearTimeout(this.wonParams.coinCounterTimer);\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"NextLevel\", \"Level Number Normal\", this.levelCounter]);\n\n this.level.checkHasWon();\n\n return this.tutorial();\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n this.startEndSite();\n }\n }\n\n async onStart(args) {\n this.setTitle(\"WR\");\n\n Matomo.update(\"Level Sites\");\n let res = super.onStart(args);\n\n if (this.levelCounterAction) {\n this.updateLevelCounter();\n }\n this.levelScaler();\n\n //TODO Sound\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: (await NativeStoragePromise.getItem(\"play-sound\", \"1\") !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n await this.tutorial();\n\n return res;\n }\n\n async levelWon(level) {\n try {\n const savePromise = LevelPlayed.setPlayed(level.getLevelData());\n\n // savePromise.then((r) => console.log(\"levelSaved!\", r));\n\n this.levelCounter++;\n await NativeStoragePromise.setItem(\"levelCounter\", this.levelCounter);\n await NativeStoragePromise.remove(\"currentLevel\");\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.style.transition = \"none\";\n continueButton.style.opacity = 0;\n\n //Todo richtiges Element aufrufen?\n this._view.classList.add('won');\n ViewHelper.removeAllChildren(this.coinContainer);\n let coinsPerLevel = await NativeStoragePromise.getItem(\"coinsPerLevel\", 5);\n\n let coinsBefore = 0;\n\n let soundManager = SoundManager.getInstance();\n let audioOptions = soundManager.get(SoundManager.CHANNELS.SOUND);\n\n this.coinPromise = this.coinPromise.then(async () => {\n coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n await NativeStoragePromise.setItem(\"coins\", coinsBefore + parseInt(coinsPerLevel));\n }).then(async () => {\n return Promise.all([new Promise((r) => {\n setTimeout(() => {\n //TODO animationen einbauen\n continueButton.style.opacity = 1;\n r();\n }, 500)\n }),\n audioOptions.loadedPromise.catch(e => {\n console.error(e)\n })\n ]);\n });\n\n this.wonParams.aborted = false;\n\n for (let i = 0; i < coinsPerLevel; i++) {\n let coinElem = this.coinTemplate.cloneNode(true);\n this.coinContainer.appendChild(coinElem);\n this.coinPromise = this.coinPromise.then(() => {\n return new Promise(r => {\n let timeout = 350;\n if (!this.wonParams.aborted) {\n //TODO animationen einbauen\n\n coinElem.style.opacity = \"1\";\n soundManager.play(SoundManager.CHANNELS.SOUND);\n\n this.wonParams.coinCounterTimer = setTimeout(() => {\n if (!this.wonParams.aborted) {\n this.coinAction.setName(++coinsBefore);\n }\n }, timeout / 2);\n } else {\n r();\n }\n\n //Always do the next promise for garbage collection\n setTimeout(r, timeout);\n })\n });\n }\n\n this.coinPromise = this.coinPromise.catch((e) => {\n console.error(e)\n });\n\n this.wonTextScaler();\n this.continueButtonScaler();\n this.levelScaler();\n\n // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => {\n // this.levelScaler();\n // });\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LevelWon\", \"Coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"))]);\n\n let leafs = level.getLeafSegments();\n leafs.forEach((leaf, i) => {\n let elem = leaf.getElement();\n elem.style.animationDelay = i * 50 + \"ms\";\n elem.classList.add(\"jump-animation\");\n })\n\n await savePromise;\n } catch (e) {\n console.error(e);\n }\n }\n\n async help() {\n let cost = await NativeStoragePromise.getItem(\"costForHelp\", 25);\n let currentCoins = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), 0));\n\n if (currentCoins >= cost) {\n currentCoins -= cost;\n await NativeStoragePromise.setItem(\"coins\", currentCoins);\n this.coinAction.setName(currentCoins);\n\n let rotatables = this.level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n this.level.saveAsCurrentLevel();\n\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n } else {\n new Toast(\"not-enough-coins\").show();\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Not enough Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n }\n }\n\n async tutorial() {\n const tutorialScale = 0.01;\n\n if (this.level.id === LevelSite.TUTORIAL.FIRST_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"1\");\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n switch (currentStep) {\n case \"1\": {\n this.level.setSegmentClickedListener(async () => {\n this._view.classList.remove(\"step-1\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"2\");\n this.tutorial();\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-1\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 2, 2);\n\n break;\n }\n case \"2\": {\n this.level.setSegmentClickedListener(() => {\n });\n this.level.getWonPromise().then(async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-2\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n this.coinPromise = this.coinPromise.then(async () => {\n new Toast(\"extra-coins-after-first-level\").show();\n await NativeStoragePromise.setItem(\"coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\")) + 50);\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n });\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-2\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.SECOND_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"3\");\n\n switch (currentStep) {\n case \"3\": {\n let scaleHelper = new ScaleHelper();\n\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let eventListener = async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-3\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"4\");\n // this.findBy(\"#help-button\").removeEventListener(\"click\", eventListener);\n this.levelScaler();\n };\n this.findBy(\".help-action\").addEventListener(\"click\", eventListener);\n\n // let textElem = this.findBy(\".tutorial-text .step-3\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"4\");\n\n switch (currentStep) {\n case \"4\": {\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let rotatableSegments = this.level.getRotatableSegments();\n let firstSegment = rotatableSegments[2];\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n firstSegment.element.appendChild(pointer);\n\n this.level.setSegmentClickedListener(async (segment) => {\n if (firstSegment === segment) {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-4\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"5\");\n this.levelScaler();\n }\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-4\");\n\n await this.levelScaler();\n // debugger;\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n }\n }\n}\n","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class MainMenuLevel extends FourWordsLevel{\n\n constructor(templateContainer) {\n super(templateContainer, 4);\n }\n\n saveAsCurrentLevel() {\n }\n\n // checkHasWon(delayPromise) {\n // }\n}","import {Matomo, MenuSite, NativeStoragePromise, ScaleHelper, Toast} from \"cordova-sites/dist/client\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelSite} from \"./LevelSite\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client\";\nimport {Level} from \"../wordrotator/Level/Level\";\n\nconst view = require(\"../../html/sites/tutorialSite.html\");\n\nexport class TutorialSite extends MenuSite {\n private templateContainer: TemplateContainer;\n\n constructor(siteManager: any) {\n super(siteManager, view);\n }\n\n async onConstruct(constructParameters: any): Promise {\n const res = super.onConstruct(constructParameters);\n await Promise.race([new SyncJob().sync([LevelData]).catch(e => console.error(e)), new Promise(async resolve => {\n let levelData = await LevelData.findById(LevelSite.TUTORIAL.FIRST_LEVEL);\n if (levelData !== null) {\n resolve();\n }\n })]);\n return res;\n }\n\n async onViewLoaded(): Promise {\n const res = super.onViewLoaded();\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n const tutorial1Container = this.findBy(\"#tutorial-1 .level-container\");\n const tutorial2Container = this.findBy(\"#tutorial-2 .level-container\");\n const tutorial3Container = this.findBy(\"#tutorial-3 .level-container\");\n\n const level1 = await this.loadLevel(LevelSite.TUTORIAL.FIRST_LEVEL);\n const level2 = await this.loadLevel(LevelSite.TUTORIAL.SECOND_LEVEL);\n const level3 = await this.loadLevel(LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL);\n\n level1.setSaveAsCurrentAfterCheckWon(false);\n level2.setSaveAsCurrentAfterCheckWon(false);\n level3.setSaveAsCurrentAfterCheckWon(false);\n\n tutorial1Container.appendChild(level1.getRootSegment().getElement());\n tutorial2Container.appendChild(level2.getRootSegment().getElement());\n tutorial3Container.appendChild(level3.getRootSegment().getElement());\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n\n let rotatableSegments = level3.getRotatableSegments();\n let pointerSegment = rotatableSegments[2];\n pointerSegment.element.appendChild(pointer);\n\n this.find(\".help-action\").addEventListener(\"click\", () => {\n TutorialSite.help(level2);\n })\n\n return res;\n }\n\n static async help(level: Level) {\n let rotatables = level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n if (rotatables.length === 0){\n return;\n }\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n }\n\n async loadLevel(id) {\n try {\n let levelData = await LevelData.findById(id);\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n level.getWonPromise().then(() => {\n console.log(\"level won!\");\n new Toast(\"you solved the tutorial level!\").show();\n //TODO\n // this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n return level;\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n // this.startEndSite();\n return null;\n }\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"tutorial\", TutorialSite);\n})\n","const view = require(\"../../html/sites/credits.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class CreditsSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"credits\", CreditsSite);\n});\n","const view = require(\"../../html/sites/privacyPolicy.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class PrivacyPolicySite extends MenuSite {\n constructor(siteManager) {\n super(siteManager,view);\n }\n\n async onViewLoaded() {\n let trackSwitch =this.findBy(\"#track-switch\");\n\n trackSwitch.addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n return super.onViewLoaded();\n }\n\n async onStart(args) {\n let trackSwitch =this.findBy(\"#track-switch\");\n trackSwitch.checked = ((await Matomo.getTrackingPromise()) === \"1\");\n\n // Matomo.update(\"Privacy Policy Sites\");\n return super.onStart(args);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"privacyPolicy\", PrivacyPolicySite);\n});\n","const view = require(\"../../html/sites/impressum.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class ImpressumSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"impressum\", ImpressumSite);\n});\n","const view = require(\"../../html/sites/contactSite.html\");\n\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Form} from \"cordova-sites/dist/client/js/Form\";\nimport {DataManager} from \"cordova-sites/dist/client/js/DataManager\";\nimport {Toast} from \"cordova-sites/dist/client/js/Toast/Toast\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class ContactSite extends MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n\n onViewLoaded() {\n let res = super.onViewLoaded();\n\n // @ts-ignore\n this.findBy(\"#contactText\").appendChild(Translator.makePersistentTranslation(\"contact text\", [__CONTACT_EMAIL__]))\n\n new Form(this.findBy(\"#contact-form\"), async values => {\n\n let result = await DataManager.send(\"contact\", values);\n if (result.success) {\n new Toast(\"the message was sent\").show();\n this.finish();\n } else {\n if (result) {\n new Toast(result.message).show();\n } else {\n new Toast(\"Es ist ein Fehler aufgetreten...\").show();\n }\n }\n });\n\n return res;\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"contact\", ContactSite);\n});\n","import {TutorialSite} from \"../Sites/TutorialSite\";\n\nconst view = require(\"../../html/fragment/settings.html\");\n\nimport {CreditsSite} from \"../Sites/CreditsSite\";\nimport {PrivacyPolicySite} from \"../Sites/PrivacyPolicySite\";\nimport {ImpressumSite} from \"../Sites/ImpressumSite\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\nimport {AbstractFragment} from \"cordova-sites/dist/client/js/Context/AbstractFragment\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LastSyncDates} from \"cordova-sites-easy-sync/dist/client/LastSyncDates\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ContactSite} from \"../Sites/ContactSite\";\n\nexport class WordRotatorSettingFragment extends AbstractFragment {\n constructor(site) {\n super(site, view);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n\n this.findBy(\"#reset-levels\").addEventListener(\"click\", async () => {\n await NativeStoragePromise.remove(\"currentLevel\");\n await NativeStoragePromise.remove(\"levelCounter\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n\n await LevelPlayed.clear();\n await LevelData.clear();\n await LastSyncDates.clear();\n });\n\n if (location.hostname.includes(\"beta\") || location.hostname.includes(\"127.0.0.1\") || location.hostname.includes(\"localhost\")) {\n // this.findBy(\"#reset-levels\").classList.remove(\"hidden\");\n }\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\")\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#track-switch\").addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.findBy(\"#tutorial-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(TutorialSite);\n });\n this.findBy(\"#credits-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(CreditsSite);\n });\n this.findBy(\"#privacy-policy-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(PrivacyPolicySite);\n });\n this.findBy(\"#contact-button\").addEventListener(\"click\", () => {\n // new Toast(\"contact site\").show();\n this.getSite().startSite(ContactSite);\n });\n this.findBy(\"#impressum-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(ImpressumSite);\n });\n // @ts-ignore\n this.findBy(\"#version-info\").innerText = __VERSION__;\n\n return res;\n }\n\n onStart(args) {\n Matomo.update(\"Settings Sites\");\n return super.onStart(args);\n }\n}\n","const view = require(\"../../html/sites/settingsSite.html\");\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\nimport {WordRotatorSettingFragment} from \"../Fragment/WordRotatorSettingFragment\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\n\nexport class SettingsSite extends MenuSite {\n\n constructor(siteManager) {\n super(siteManager, view);\n this.addFragment(\"#wordRotatorSettings\", new WordRotatorSettingFragment(this));\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"settings\", SettingsSite);\n});\n","const settingsIcon = require(\"../../img/settings.png\").default;\nconst view = require(\"../../html/sites/menu.html\");\n\nimport {App, Toast, DataManager, ScaleHelper, MenuSite} from \"cordova-sites/dist/client\";\nimport {Helper} from \"js-helper/dist/shared\";\nimport {LevelSite} from \"./LevelSite\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {MainMenuLevel} from \"../wordrotator/Level/MainMenuLevel\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client/SyncJob\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {ShareManager} from \"cordova-sites/dist/client/js/ShareManager/ShareManager\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuAction} from \"cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction\";\nimport {SettingsSite} from \"./SettingsSite\";\n\nexport class MainMenuSite extends MenuSite {\n static app: App;\n\n private loadLevelPromise: Promise;\n private listener: () => void;\n private templateContainer: TemplateContainer;\n private randomRotateTimeout;\n\n constructor(siteManager) {\n super(siteManager, view);\n this.loadLevelPromise = new SyncJob().sync([LevelData]).catch(e => console.error(e));\n this.listener = null;\n this.getNavbarFragment().setCanGoBack(false);\n }\n\n onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n let settingsAction = new MenuAction(\"\", () => {\n this.startSite(SettingsSite);\n }, MenuAction.SHOW_ALWAYS, null, settingsIcon);\n navbar.addAction(settingsAction);\n return navbar;\n }\n\n async onViewLoaded() {\n const res = super.onViewLoaded();\n\n let playButton = this.findBy(\"#play-button\");\n playButton.addEventListener(\"click\", () => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"startButton\"]);\n this.startLevelSite();\n });\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n\n leafSegmentTemplate.id = null;\n parentSegmentTemplate.id = null;\n rowSegmentTemplate.id = null;\n triangleTemplate.id = null;\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate);\n\n //TODO?\n // if (Helper.nonNull(MainMenuSite.app._cookieClosePromise)) {\n // MainMenuSite.app._cookieClosePromise.then(() => {\n // if (this.listener) {\n // this.listener();\n // }\n // });\n // }\n\n let soundManager = SoundManager.getInstance();\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#share-button\").addEventListener(\"click\", () => {\n new ShareManager().share(Translator.getInstance().translate(\"share-text\", [window.location]));\n });\n return res;\n // this.findBy(\"#share-buttons\").appendChild(ShareManager.generateDefaultShareElement(\"https://wordrotator.silas.link\"));\n }\n\n async onStart(args) {\n // Matomo.update(\"Menu Sites\");\n let res = super.onStart(args);\n\n let level = new MainMenuLevel(this.templateContainer);\n level.setWords([\"WORD\", \"ROTA\", \"TORW\", \"ORDR\"]);\n level.createSegments();\n\n level.getWonPromise().then(() => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"levelSolved\"]);\n this.startLevelSite();\n });\n\n let segment = level.getRootSegment();\n segment._updateElement();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(segment.getElement());\n\n let rotationsSegments = level.getRotatableSegments();\n\n let randomRotationFunction = () => {\n let timeout = Math.random() * 4500 + 1500;\n this.randomRotateTimeout = setTimeout(() => {\n let indexBlocked = -1;\n let indexesNotRight = [];\n for (let i = 0; i < rotationsSegments.length; i++) {\n if (rotationsSegments[i].rotation !== 0) {\n indexesNotRight.push(i);\n if (indexesNotRight.length >= 2) {\n break;\n }\n }\n }\n if (indexesNotRight.length === 1) {\n indexBlocked = indexesNotRight[0];\n }\n\n let index = Math.floor(Math.random() * rotationsSegments.length);\n if (index === indexBlocked) {\n index = (index + 1) % rotationsSegments.length;\n }\n\n rotationsSegments[index].rotate();\n randomRotationFunction();\n }, timeout);\n };\n randomRotationFunction();\n\n this.listener = async () => {\n let playButton = this.findBy(\"#play-button\");\n let levelNumber = this.findBy(\"#level-number\");\n levelNumber.innerText = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n\n let levelSegment = this.findBy(\"#level\");\n\n let scaleHelper = new ScaleHelper();\n await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2, 8, null, false);\n\n let levelStyle = getComputedStyle(levelSegment);\n playButton.style.width = levelStyle.getPropertyValue(\"width\");\n scaleHelper.scaleTo(0.65, playButton.children[0], playButton, null, null, null, 4, null, false);\n\n await scaleHelper.scaleTo(0.1, levelNumber.parentElement, levelNumber.parentElement.parentElement, null, null, null, 10, null, false);\n scaleHelper.scaleTo(1, levelNumber, levelNumber.parentElement, false, false, 5, null, null, false);\n };\n\n // this.listener();\n window.addEventListener(\"resize\", this.listener);\n setTimeout(this.listener, 50);\n\n //Musikbuttons update, falls in den Einstellungen umgestellt\n // let settingsManager = SettingsManager.getInstance();\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n\n return res;\n }\n\n async startLevelSite() {\n SoundManager.getInstance().resumeContext();\n\n this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n if (levelData !== null) {\n resolve();\n }\n })]));\n }\n\n onPause() {\n clearTimeout(this.randomRotateTimeout);\n window.removeEventListener(\"resize\", this.listener);\n return super.onPause();\n }\n\n // async loadLevels() {\n // try {\n // const db = await WordRotatorDb.getInstance();\n // const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);\n // // const dateLastSync = Helper.nonNull(localStorage.getItem(\"date-last-sync\"), 0);\n //\n // // let numberLevels = db.countLevels();\n // let newLastSync = null;\n // let maxRuns = 1;\n // let levelPromises = [];\n // for (let run = 0; run < maxRuns; run++) {\n // let res = await DataManager.load(\"wordRotator/levels\" + DataManager.buildQuery({\n // \"currentRun\": run,\n // \"dateLastSync\": dateLastSync\n // }));\n // if (!res[\"success\"]) {\n // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000).show();\n // }\n // newLastSync = null;\n // break;\n // }\n // res = res[\"result\"];\n // newLastSync = Helper.nonNull(newLastSync, res[\"currentSyncDate\"]);\n // maxRuns = res[\"maxRuns\"];\n //\n // let levels = res[\"levels\"];\n // for (let i = 0; i < levels.length; i++) {\n // let currentLevel = levels[i];\n // levelPromises.push(db.loadLevel(levels[i][\"id\"]).then(level => {\n // currentLevel[\"played\"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));\n // return currentLevel;\n // }));\n // }\n // }\n // let levels = await Promise.all(levelPromises);\n // await db.saveManyLevels(levels);\n //\n // if (newLastSync != null && newLastSync !== \"null\") {\n // await NativeStoragePromise.setItem(\"date-last-sync\", newLastSync);\n // db.saveDateLastSync(newLastSync);\n // }\n // }\n // catch(e){\n // // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000);\n // // }\n // console.error(e);\n // }\n // }\n}\n\nApp.addInitialization(app => {\n MainMenuSite.app = app;\n});\n","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelPlayed} from \"../LevelPlayed\";\n\nexport class ClientSetup1000000002001 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelPlayed, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","export default \"img/brightAndBeautifull__.mp3\";","import translationGerman from '../translations/de.json';\nimport translationEn from '../translations/en.json';\nimport {App, Translator, DataManager, Toast} from \"cordova-sites/dist/client\";\n\nimport \"cordova-sites-user-management/dist/client/js/translationInit\"\nimport \"cordova-sites/dist/client/js/translationInit\"\n\nimport {LoginSite, RegistrationSite, UserManager} from \"cordova-sites-user-management/dist/client\";\n\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {DeleteUserManagement1000000000000} from \"cordova-sites-user-management/dist/shared//migrations/DeleteUserManagement\";\nimport {SetupUserManagement1000000001000} from \"cordova-sites-user-management/dist/shared/migrations/SetupUserManagement\";\nimport {Setup1000000002000} from \"../../shared/model/migration/shared/Setup\";\nimport {SetupEasySync1000000000500} from \"cordova-sites-easy-sync/dist/client\";\nimport {MainMenuSite} from \"./Sites/MainMenuSite\";\nimport {ClientSetup1000000002001} from \"./model/migration/ClientSetup\";\nimport {EasySyncClientDb} from \"cordova-sites-easy-sync/dist/client/EasySyncClientDb\";\nimport {NavbarFragment} from \"cordova-sites/dist/client/js/Context/Menu/NavbarFragment\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\n\nimport music from \"../sound/brightAndBeautifull__.mp3\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\n\nwindow[\"JSObject\"] = Object;\n\n//Disable Google Analytics for VideoJS\nwindow[\"HELP_IMPROVE_VIDEOJS\"] = false;\n\nLoginSite.ADD_LOGIN_ACTION = false;\nRegistrationSite.ADD_REGISTRATION_ACTION = false;\n\nApp.addInitialization(async () => {\n Translator.init({\n translations: {\n \"de\": translationGerman,\n \"en\": translationEn\n },\n fallbackLanguage: \"de\",\n // markTranslations: true,\n markUntranslatedTranslations: true,\n });\n\n //Setting Title\n NavbarFragment.title = \"WordRotator\";\n\n let soundManager = SoundManager.getInstance();\n soundManager.play(SoundManager.CHANNELS.MUSIC, {\n audio: music,\n loop: true,\n volume: 0.6,\n muted: (await NativeStoragePromise.getItem(\"play-music\", \"1\") !== \"1\")\n }).catch(e => console.error(e));\n\n await UserManager.getInstance().getMe().catch(e => console.error(e));\n\n UserManager.getInstance().addLoginChangeCallback(async (isLoggedIn) => {\n if (isLoggedIn) {\n // await new SyncJob().sync([UserManager.syncParamFor(Definition), UserManager.syncParamFor(ExerciseProgress), UserManager.syncParamFor(WrongAnswer)]).catch(e => console.error(e));\n }\n });\n});\n\nDataManager._basePath = __HOST_ADDRESS__;\nDataManager.onlineCallback = isOnline => {\n if (!isOnline){\n new Toast(\"not online!\").show();\n }\n};\n\nObject.assign(BaseDatabase.CONNECTION_OPTIONS, {\n logging: [\"error\",],\n synchronize: false,\n migrationsRun: true,\n migrations: [\n DeleteUserManagement1000000000000,\n SetupEasySync1000000000500,\n SetupUserManagement1000000001000,\n Setup1000000002000,\n ClientSetup1000000002001,\n ]\n});\n\nlet app = new App();\napp.start(MainMenuSite).catch(e => console.error(e)).then(async () => {\n window[\"queryDb\"] = async (sql) => {\n // SELECT name FROM my_db.sqlite_master WHERE type='table';\n\n\n // console.log(\"DB\", EasySyncClientDb.getInstance());\n let res = await EasySyncClientDb.getInstance().rawQuery(sql);\n console.log(res);\n return res;\n }\n});\napp.ready(() => {\n console.log(\"initialisation over\", new Date());\n\n if (device.platform === \"browser\"){\n // Check that service workers are supported\n if ('serviceWorker' in navigator) {\n // Use the window load event to keep the page load performant\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('service-worker.js');\n });\n }\n }\n\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/server/public/config.xml b/src/server/public/config.xml index 2d0962b..53e90d3 100644 --- a/src/server/public/config.xml +++ b/src/server/public/config.xml @@ -1,6 +1,6 @@ - - WordRotator + + WordRotator - Test A word-game diff --git a/src/server/public/html/imageSelectionElement.html b/src/server/public/html/imageSelectionElement.html new file mode 100644 index 0000000..a8ddbb4 --- /dev/null +++ b/src/server/public/html/imageSelectionElement.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/server/public/html/level.html b/src/server/public/html/level.html index 470bac9..01050a4 100644 --- a/src/server/public/html/level.html +++ b/src/server/public/html/level.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/server/public/index.css b/src/server/public/index.css index 6e10def..4243c5b 100644 --- a/src/server/public/index.css +++ b/src/server/public/index.css @@ -1,4 +1,4 @@ -@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:"small=0em&smedium=25em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;border-radius:0}.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:transparent;line-height:1;cursor:auto}[data-whatinput='mouse'] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block !important}.is-hidden{display:none !important}[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type='submit'],[type='button']{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type='search']{-webkit-box-sizing:border-box;box-sizing:border-box}::-webkit-input-placeholder{color:#cacaca}::-moz-placeholder{color:#cacaca}:-ms-input-placeholder{color:#cacaca}::-ms-input-placeholder{color:#cacaca}::placeholder{color:#cacaca}[type='file'],[type='checkbox'],[type='radio']{margin:0 0 1rem}[type='checkbox']+label,[type='radio']+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type='checkbox']+label[for],[type='radio']+label[for]{cursor:pointer}label>[type='checkbox'],label>[type='radio']{margin-right:.5rem}[type='file']{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:normal;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:1rem;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0 0 0 0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0 0 0 0}.input-group-label,.input-group-field,.input-group-button,.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}@media screen and (min-width: 0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}select:not([multiple]){padding-top:0;padding-bottom:0}.is-invalid-input:not(:focus){border-color:#cc4b37;background-color:#f9ecea}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-moz-placeholder{color:#cc4b37}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::placeholder{color:#cc4b37}.is-invalid-label{color:#cc4b37}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:bold;color:#cc4b37}.form-error.is-visible{display:block}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:80%;line-height:inherit}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;color:inherit;text-rendering:optimizeLegibility}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small{line-height:0;color:#cacaca}h1,.h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h2,.h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h3,.h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h4,.h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h5,.h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h6,.h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print, screen and (min-width: 40em){h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:1.9375rem}h4,.h4{font-size:1.5625rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}}a{line-height:inherit;color:#1779ba;text-decoration:none;cursor:pointer}a:hover,a:focus{color:#1468a0}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}ul,ol,dl{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ul ul,ol ul,ul ol,ol ol{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:bold}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:normal;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ul.no-bullet,ol.no-bullet{margin-left:0;list-style:none}.cite-block,cite{display:block;color:#8a8a8a;font-size:.8125rem}.cite-block:before,cite:before{content:"— "}.code-inline,code{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:inline;max-width:100%;word-wrap:break-word;padding:.125rem .3125rem .0625rem}.code-block{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:block;overflow:auto;white-space:pre;padding:1rem;margin-bottom:1.5rem}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media screen and (min-width: 25em){.smedium-text-left{text-align:left}.smedium-text-right{text-align:right}.smedium-text-center{text-align:center}.smedium-text-justify{text-align:justify}}@media print, screen and (min-width: 40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print, screen and (min-width: 64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none !important}@media print{*{background:transparent !important;color:black !important;-webkit-print-color-adjust:economy;color-adjust:economy;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}.show-for-print{display:block !important}.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^='javascript:']:after,a[href^='#']:after{content:''}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.grid-container{padding-right:.625rem;padding-left:.625rem;max-width:75rem;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.fluid{padding-right:.625rem;padding-left:.625rem;max-width:100%;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container.fluid{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.full{padding-right:0;padding-left:0;max-width:100%;margin-left:auto;margin-right:auto}.grid-x{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.cell{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-height:0px;min-width:0px;width:100%}.cell.auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.cell.shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.auto{width:auto}.grid-x>.shrink{width:auto}.grid-x>.small-shrink,.grid-x>.small-full,.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-x>.smedium-shrink,.grid-x>.smedium-full,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-x>.medium-shrink,.grid-x>.medium-full,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-x>.large-shrink,.grid-x>.large-full,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.small-1{width:8.33333%}.grid-x>.small-2{width:16.66667%}.grid-x>.small-3{width:25%}.grid-x>.small-4{width:33.33333%}.grid-x>.small-5{width:41.66667%}.grid-x>.small-6{width:50%}.grid-x>.small-7{width:58.33333%}.grid-x>.small-8{width:66.66667%}.grid-x>.small-9{width:75%}.grid-x>.small-10{width:83.33333%}.grid-x>.small-11{width:91.66667%}.grid-x>.small-12{width:100%}@media screen and (min-width: 25em){.grid-x>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.smedium-shrink,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.smedium-shrink{width:auto}.grid-x>.smedium-1{width:8.33333%}.grid-x>.smedium-2{width:16.66667%}.grid-x>.smedium-3{width:25%}.grid-x>.smedium-4{width:33.33333%}.grid-x>.smedium-5{width:41.66667%}.grid-x>.smedium-6{width:50%}.grid-x>.smedium-7{width:58.33333%}.grid-x>.smedium-8{width:66.66667%}.grid-x>.smedium-9{width:75%}.grid-x>.smedium-10{width:83.33333%}.grid-x>.smedium-11{width:91.66667%}.grid-x>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.grid-x>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.medium-shrink,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.medium-shrink{width:auto}.grid-x>.medium-1{width:8.33333%}.grid-x>.medium-2{width:16.66667%}.grid-x>.medium-3{width:25%}.grid-x>.medium-4{width:33.33333%}.grid-x>.medium-5{width:41.66667%}.grid-x>.medium-6{width:50%}.grid-x>.medium-7{width:58.33333%}.grid-x>.medium-8{width:66.66667%}.grid-x>.medium-9{width:75%}.grid-x>.medium-10{width:83.33333%}.grid-x>.medium-11{width:91.66667%}.grid-x>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.grid-x>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.large-shrink,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.large-shrink{width:auto}.grid-x>.large-1{width:8.33333%}.grid-x>.large-2{width:16.66667%}.grid-x>.large-3{width:25%}.grid-x>.large-4{width:33.33333%}.grid-x>.large-5{width:41.66667%}.grid-x>.large-6{width:50%}.grid-x>.large-7{width:58.33333%}.grid-x>.large-8{width:66.66667%}.grid-x>.large-9{width:75%}.grid-x>.large-10{width:83.33333%}.grid-x>.large-11{width:91.66667%}.grid-x>.large-12{width:100%}}.grid-margin-x:not(.grid-x)>.cell{width:auto}.grid-margin-y:not(.grid-y)>.cell{height:auto}.grid-margin-x{margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-x{margin-left:-.9375rem;margin-right:-.9375rem}}.grid-margin-x>.cell{width:calc(100% - 1.25rem);margin-left:.625rem;margin-right:.625rem}@media print, screen and (min-width: 40em){.grid-margin-x>.cell{width:calc(100% - 1.875rem);margin-left:.9375rem;margin-right:.9375rem}}.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.small-3{width:calc(25% - 1.25rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.small-6{width:calc(50% - 1.25rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.small-9{width:calc(75% - 1.25rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.small-12{width:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x>.smedium-auto{width:auto}.grid-margin-x>.smedium-shrink{width:auto}.grid-margin-x>.smedium-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.smedium-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.smedium-3{width:calc(25% - 1.25rem)}.grid-margin-x>.smedium-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.smedium-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.smedium-6{width:calc(50% - 1.25rem)}.grid-margin-x>.smedium-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.smedium-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.smedium-9{width:calc(75% - 1.25rem)}.grid-margin-x>.smedium-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.smedium-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.smedium-12{width:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.small-3{width:calc(25% - 1.875rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.small-6{width:calc(50% - 1.875rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.small-9{width:calc(75% - 1.875rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.small-12{width:calc(100% - 1.875rem)}.grid-margin-x>.medium-auto{width:auto}.grid-margin-x>.medium-shrink{width:auto}.grid-margin-x>.medium-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.medium-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.medium-3{width:calc(25% - 1.875rem)}.grid-margin-x>.medium-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.medium-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.medium-6{width:calc(50% - 1.875rem)}.grid-margin-x>.medium-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.medium-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.medium-9{width:calc(75% - 1.875rem)}.grid-margin-x>.medium-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.medium-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.medium-12{width:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x>.large-auto{width:auto}.grid-margin-x>.large-shrink{width:auto}.grid-margin-x>.large-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.large-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.large-3{width:calc(25% - 1.875rem)}.grid-margin-x>.large-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.large-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.large-6{width:calc(50% - 1.875rem)}.grid-margin-x>.large-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.large-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.large-9{width:calc(75% - 1.875rem)}.grid-margin-x>.large-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.large-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.large-12{width:calc(100% - 1.875rem)}}.grid-padding-x .grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-x .grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-container:not(.full)>.grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-container:not(.full)>.grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-padding-x>.cell{padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.grid-padding-x>.cell{padding-right:.9375rem;padding-left:.9375rem}}.small-up-1>.cell{width:100%}.small-up-2>.cell{width:50%}.small-up-3>.cell{width:33.33333%}.small-up-4>.cell{width:25%}.small-up-5>.cell{width:20%}.small-up-6>.cell{width:16.66667%}.small-up-7>.cell{width:14.28571%}.small-up-8>.cell{width:12.5%}@media screen and (min-width: 25em){.smedium-up-1>.cell{width:100%}.smedium-up-2>.cell{width:50%}.smedium-up-3>.cell{width:33.33333%}.smedium-up-4>.cell{width:25%}.smedium-up-5>.cell{width:20%}.smedium-up-6>.cell{width:16.66667%}.smedium-up-7>.cell{width:14.28571%}.smedium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 40em){.medium-up-1>.cell{width:100%}.medium-up-2>.cell{width:50%}.medium-up-3>.cell{width:33.33333%}.medium-up-4>.cell{width:25%}.medium-up-5>.cell{width:20%}.medium-up-6>.cell{width:16.66667%}.medium-up-7>.cell{width:14.28571%}.medium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 64em){.large-up-1>.cell{width:100%}.large-up-2>.cell{width:50%}.large-up-3>.cell{width:33.33333%}.large-up-4>.cell{width:25%}.large-up-5>.cell{width:20%}.large-up-6>.cell{width:16.66667%}.large-up-7>.cell{width:14.28571%}.large-up-8>.cell{width:12.5%}}.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x.smedium-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.smedium-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.smedium-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.smedium-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.smedium-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.smedium-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.smedium-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.smedium-up-8>.cell{width:calc(12.5% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.875rem)}.grid-margin-x.medium-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.medium-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.medium-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.medium-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.medium-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.medium-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.medium-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.medium-up-8>.cell{width:calc(12.5% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x.large-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.large-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.large-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.large-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.large-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.large-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.large-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.large-up-8>.cell{width:calc(12.5% - 1.875rem)}}.small-margin-collapse{margin-right:0;margin-left:0}.small-margin-collapse>.cell{margin-right:0;margin-left:0}.small-margin-collapse>.small-1{width:8.33333%}.small-margin-collapse>.small-2{width:16.66667%}.small-margin-collapse>.small-3{width:25%}.small-margin-collapse>.small-4{width:33.33333%}.small-margin-collapse>.small-5{width:41.66667%}.small-margin-collapse>.small-6{width:50%}.small-margin-collapse>.small-7{width:58.33333%}.small-margin-collapse>.small-8{width:66.66667%}.small-margin-collapse>.small-9{width:75%}.small-margin-collapse>.small-10{width:83.33333%}.small-margin-collapse>.small-11{width:91.66667%}.small-margin-collapse>.small-12{width:100%}@media screen and (min-width: 25em){.small-margin-collapse>.smedium-1{width:8.33333%}.small-margin-collapse>.smedium-2{width:16.66667%}.small-margin-collapse>.smedium-3{width:25%}.small-margin-collapse>.smedium-4{width:33.33333%}.small-margin-collapse>.smedium-5{width:41.66667%}.small-margin-collapse>.smedium-6{width:50%}.small-margin-collapse>.smedium-7{width:58.33333%}.small-margin-collapse>.smedium-8{width:66.66667%}.small-margin-collapse>.smedium-9{width:75%}.small-margin-collapse>.smedium-10{width:83.33333%}.small-margin-collapse>.smedium-11{width:91.66667%}.small-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.small-margin-collapse>.medium-1{width:8.33333%}.small-margin-collapse>.medium-2{width:16.66667%}.small-margin-collapse>.medium-3{width:25%}.small-margin-collapse>.medium-4{width:33.33333%}.small-margin-collapse>.medium-5{width:41.66667%}.small-margin-collapse>.medium-6{width:50%}.small-margin-collapse>.medium-7{width:58.33333%}.small-margin-collapse>.medium-8{width:66.66667%}.small-margin-collapse>.medium-9{width:75%}.small-margin-collapse>.medium-10{width:83.33333%}.small-margin-collapse>.medium-11{width:91.66667%}.small-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.small-margin-collapse>.large-1{width:8.33333%}.small-margin-collapse>.large-2{width:16.66667%}.small-margin-collapse>.large-3{width:25%}.small-margin-collapse>.large-4{width:33.33333%}.small-margin-collapse>.large-5{width:41.66667%}.small-margin-collapse>.large-6{width:50%}.small-margin-collapse>.large-7{width:58.33333%}.small-margin-collapse>.large-8{width:66.66667%}.small-margin-collapse>.large-9{width:75%}.small-margin-collapse>.large-10{width:83.33333%}.small-margin-collapse>.large-11{width:91.66667%}.small-margin-collapse>.large-12{width:100%}}.small-padding-collapse{margin-right:0;margin-left:0}.small-padding-collapse>.cell{padding-right:0;padding-left:0}@media screen and (min-width: 25em){.smedium-margin-collapse{margin-right:0;margin-left:0}.smedium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media screen and (min-width: 25em){.smedium-margin-collapse>.small-1{width:8.33333%}.smedium-margin-collapse>.small-2{width:16.66667%}.smedium-margin-collapse>.small-3{width:25%}.smedium-margin-collapse>.small-4{width:33.33333%}.smedium-margin-collapse>.small-5{width:41.66667%}.smedium-margin-collapse>.small-6{width:50%}.smedium-margin-collapse>.small-7{width:58.33333%}.smedium-margin-collapse>.small-8{width:66.66667%}.smedium-margin-collapse>.small-9{width:75%}.smedium-margin-collapse>.small-10{width:83.33333%}.smedium-margin-collapse>.small-11{width:91.66667%}.smedium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.smedium-1{width:8.33333%}.smedium-margin-collapse>.smedium-2{width:16.66667%}.smedium-margin-collapse>.smedium-3{width:25%}.smedium-margin-collapse>.smedium-4{width:33.33333%}.smedium-margin-collapse>.smedium-5{width:41.66667%}.smedium-margin-collapse>.smedium-6{width:50%}.smedium-margin-collapse>.smedium-7{width:58.33333%}.smedium-margin-collapse>.smedium-8{width:66.66667%}.smedium-margin-collapse>.smedium-9{width:75%}.smedium-margin-collapse>.smedium-10{width:83.33333%}.smedium-margin-collapse>.smedium-11{width:91.66667%}.smedium-margin-collapse>.smedium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.medium-1{width:8.33333%}.smedium-margin-collapse>.medium-2{width:16.66667%}.smedium-margin-collapse>.medium-3{width:25%}.smedium-margin-collapse>.medium-4{width:33.33333%}.smedium-margin-collapse>.medium-5{width:41.66667%}.smedium-margin-collapse>.medium-6{width:50%}.smedium-margin-collapse>.medium-7{width:58.33333%}.smedium-margin-collapse>.medium-8{width:66.66667%}.smedium-margin-collapse>.medium-9{width:75%}.smedium-margin-collapse>.medium-10{width:83.33333%}.smedium-margin-collapse>.medium-11{width:91.66667%}.smedium-margin-collapse>.medium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.large-1{width:8.33333%}.smedium-margin-collapse>.large-2{width:16.66667%}.smedium-margin-collapse>.large-3{width:25%}.smedium-margin-collapse>.large-4{width:33.33333%}.smedium-margin-collapse>.large-5{width:41.66667%}.smedium-margin-collapse>.large-6{width:50%}.smedium-margin-collapse>.large-7{width:58.33333%}.smedium-margin-collapse>.large-8{width:66.66667%}.smedium-margin-collapse>.large-9{width:75%}.smedium-margin-collapse>.large-10{width:83.33333%}.smedium-margin-collapse>.large-11{width:91.66667%}.smedium-margin-collapse>.large-12{width:100%}}@media screen and (min-width: 25em){.smedium-padding-collapse{margin-right:0;margin-left:0}.smedium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse{margin-right:0;margin-left:0}.medium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.small-1{width:8.33333%}.medium-margin-collapse>.small-2{width:16.66667%}.medium-margin-collapse>.small-3{width:25%}.medium-margin-collapse>.small-4{width:33.33333%}.medium-margin-collapse>.small-5{width:41.66667%}.medium-margin-collapse>.small-6{width:50%}.medium-margin-collapse>.small-7{width:58.33333%}.medium-margin-collapse>.small-8{width:66.66667%}.medium-margin-collapse>.small-9{width:75%}.medium-margin-collapse>.small-10{width:83.33333%}.medium-margin-collapse>.small-11{width:91.66667%}.medium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.medium-margin-collapse>.smedium-1{width:8.33333%}.medium-margin-collapse>.smedium-2{width:16.66667%}.medium-margin-collapse>.smedium-3{width:25%}.medium-margin-collapse>.smedium-4{width:33.33333%}.medium-margin-collapse>.smedium-5{width:41.66667%}.medium-margin-collapse>.smedium-6{width:50%}.medium-margin-collapse>.smedium-7{width:58.33333%}.medium-margin-collapse>.smedium-8{width:66.66667%}.medium-margin-collapse>.smedium-9{width:75%}.medium-margin-collapse>.smedium-10{width:83.33333%}.medium-margin-collapse>.smedium-11{width:91.66667%}.medium-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.medium-1{width:8.33333%}.medium-margin-collapse>.medium-2{width:16.66667%}.medium-margin-collapse>.medium-3{width:25%}.medium-margin-collapse>.medium-4{width:33.33333%}.medium-margin-collapse>.medium-5{width:41.66667%}.medium-margin-collapse>.medium-6{width:50%}.medium-margin-collapse>.medium-7{width:58.33333%}.medium-margin-collapse>.medium-8{width:66.66667%}.medium-margin-collapse>.medium-9{width:75%}.medium-margin-collapse>.medium-10{width:83.33333%}.medium-margin-collapse>.medium-11{width:91.66667%}.medium-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.medium-margin-collapse>.large-1{width:8.33333%}.medium-margin-collapse>.large-2{width:16.66667%}.medium-margin-collapse>.large-3{width:25%}.medium-margin-collapse>.large-4{width:33.33333%}.medium-margin-collapse>.large-5{width:41.66667%}.medium-margin-collapse>.large-6{width:50%}.medium-margin-collapse>.large-7{width:58.33333%}.medium-margin-collapse>.large-8{width:66.66667%}.medium-margin-collapse>.large-9{width:75%}.medium-margin-collapse>.large-10{width:83.33333%}.medium-margin-collapse>.large-11{width:91.66667%}.medium-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 40em){.medium-padding-collapse{margin-right:0;margin-left:0}.medium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse{margin-right:0;margin-left:0}.large-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse>.small-1{width:8.33333%}.large-margin-collapse>.small-2{width:16.66667%}.large-margin-collapse>.small-3{width:25%}.large-margin-collapse>.small-4{width:33.33333%}.large-margin-collapse>.small-5{width:41.66667%}.large-margin-collapse>.small-6{width:50%}.large-margin-collapse>.small-7{width:58.33333%}.large-margin-collapse>.small-8{width:66.66667%}.large-margin-collapse>.small-9{width:75%}.large-margin-collapse>.small-10{width:83.33333%}.large-margin-collapse>.small-11{width:91.66667%}.large-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.large-margin-collapse>.smedium-1{width:8.33333%}.large-margin-collapse>.smedium-2{width:16.66667%}.large-margin-collapse>.smedium-3{width:25%}.large-margin-collapse>.smedium-4{width:33.33333%}.large-margin-collapse>.smedium-5{width:41.66667%}.large-margin-collapse>.smedium-6{width:50%}.large-margin-collapse>.smedium-7{width:58.33333%}.large-margin-collapse>.smedium-8{width:66.66667%}.large-margin-collapse>.smedium-9{width:75%}.large-margin-collapse>.smedium-10{width:83.33333%}.large-margin-collapse>.smedium-11{width:91.66667%}.large-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.medium-1{width:8.33333%}.large-margin-collapse>.medium-2{width:16.66667%}.large-margin-collapse>.medium-3{width:25%}.large-margin-collapse>.medium-4{width:33.33333%}.large-margin-collapse>.medium-5{width:41.66667%}.large-margin-collapse>.medium-6{width:50%}.large-margin-collapse>.medium-7{width:58.33333%}.large-margin-collapse>.medium-8{width:66.66667%}.large-margin-collapse>.medium-9{width:75%}.large-margin-collapse>.medium-10{width:83.33333%}.large-margin-collapse>.medium-11{width:91.66667%}.large-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.large-1{width:8.33333%}.large-margin-collapse>.large-2{width:16.66667%}.large-margin-collapse>.large-3{width:25%}.large-margin-collapse>.large-4{width:33.33333%}.large-margin-collapse>.large-5{width:41.66667%}.large-margin-collapse>.large-6{width:50%}.large-margin-collapse>.large-7{width:58.33333%}.large-margin-collapse>.large-8{width:66.66667%}.large-margin-collapse>.large-9{width:75%}.large-margin-collapse>.large-10{width:83.33333%}.large-margin-collapse>.large-11{width:91.66667%}.large-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 64em){.large-padding-collapse{margin-right:0;margin-left:0}.large-padding-collapse>.cell{padding-right:0;padding-left:0}}.small-offset-0{margin-left:0%}.grid-margin-x>.small-offset-0{margin-left:calc(0% + .625rem)}.small-offset-1{margin-left:8.33333%}.grid-margin-x>.small-offset-1{margin-left:calc(8.33333% + .625rem)}.small-offset-2{margin-left:16.66667%}.grid-margin-x>.small-offset-2{margin-left:calc(16.66667% + .625rem)}.small-offset-3{margin-left:25%}.grid-margin-x>.small-offset-3{margin-left:calc(25% + .625rem)}.small-offset-4{margin-left:33.33333%}.grid-margin-x>.small-offset-4{margin-left:calc(33.33333% + .625rem)}.small-offset-5{margin-left:41.66667%}.grid-margin-x>.small-offset-5{margin-left:calc(41.66667% + .625rem)}.small-offset-6{margin-left:50%}.grid-margin-x>.small-offset-6{margin-left:calc(50% + .625rem)}.small-offset-7{margin-left:58.33333%}.grid-margin-x>.small-offset-7{margin-left:calc(58.33333% + .625rem)}.small-offset-8{margin-left:66.66667%}.grid-margin-x>.small-offset-8{margin-left:calc(66.66667% + .625rem)}.small-offset-9{margin-left:75%}.grid-margin-x>.small-offset-9{margin-left:calc(75% + .625rem)}.small-offset-10{margin-left:83.33333%}.grid-margin-x>.small-offset-10{margin-left:calc(83.33333% + .625rem)}.small-offset-11{margin-left:91.66667%}.grid-margin-x>.small-offset-11{margin-left:calc(91.66667% + .625rem)}@media screen and (min-width: 25em){.smedium-offset-0{margin-left:0%}.grid-margin-x>.smedium-offset-0{margin-left:calc(0% + .625rem)}.smedium-offset-1{margin-left:8.33333%}.grid-margin-x>.smedium-offset-1{margin-left:calc(8.33333% + .625rem)}.smedium-offset-2{margin-left:16.66667%}.grid-margin-x>.smedium-offset-2{margin-left:calc(16.66667% + .625rem)}.smedium-offset-3{margin-left:25%}.grid-margin-x>.smedium-offset-3{margin-left:calc(25% + .625rem)}.smedium-offset-4{margin-left:33.33333%}.grid-margin-x>.smedium-offset-4{margin-left:calc(33.33333% + .625rem)}.smedium-offset-5{margin-left:41.66667%}.grid-margin-x>.smedium-offset-5{margin-left:calc(41.66667% + .625rem)}.smedium-offset-6{margin-left:50%}.grid-margin-x>.smedium-offset-6{margin-left:calc(50% + .625rem)}.smedium-offset-7{margin-left:58.33333%}.grid-margin-x>.smedium-offset-7{margin-left:calc(58.33333% + .625rem)}.smedium-offset-8{margin-left:66.66667%}.grid-margin-x>.smedium-offset-8{margin-left:calc(66.66667% + .625rem)}.smedium-offset-9{margin-left:75%}.grid-margin-x>.smedium-offset-9{margin-left:calc(75% + .625rem)}.smedium-offset-10{margin-left:83.33333%}.grid-margin-x>.smedium-offset-10{margin-left:calc(83.33333% + .625rem)}.smedium-offset-11{margin-left:91.66667%}.grid-margin-x>.smedium-offset-11{margin-left:calc(91.66667% + .625rem)}}@media print, screen and (min-width: 40em){.medium-offset-0{margin-left:0%}.grid-margin-x>.medium-offset-0{margin-left:calc(0% + .9375rem)}.medium-offset-1{margin-left:8.33333%}.grid-margin-x>.medium-offset-1{margin-left:calc(8.33333% + .9375rem)}.medium-offset-2{margin-left:16.66667%}.grid-margin-x>.medium-offset-2{margin-left:calc(16.66667% + .9375rem)}.medium-offset-3{margin-left:25%}.grid-margin-x>.medium-offset-3{margin-left:calc(25% + .9375rem)}.medium-offset-4{margin-left:33.33333%}.grid-margin-x>.medium-offset-4{margin-left:calc(33.33333% + .9375rem)}.medium-offset-5{margin-left:41.66667%}.grid-margin-x>.medium-offset-5{margin-left:calc(41.66667% + .9375rem)}.medium-offset-6{margin-left:50%}.grid-margin-x>.medium-offset-6{margin-left:calc(50% + .9375rem)}.medium-offset-7{margin-left:58.33333%}.grid-margin-x>.medium-offset-7{margin-left:calc(58.33333% + .9375rem)}.medium-offset-8{margin-left:66.66667%}.grid-margin-x>.medium-offset-8{margin-left:calc(66.66667% + .9375rem)}.medium-offset-9{margin-left:75%}.grid-margin-x>.medium-offset-9{margin-left:calc(75% + .9375rem)}.medium-offset-10{margin-left:83.33333%}.grid-margin-x>.medium-offset-10{margin-left:calc(83.33333% + .9375rem)}.medium-offset-11{margin-left:91.66667%}.grid-margin-x>.medium-offset-11{margin-left:calc(91.66667% + .9375rem)}}@media print, screen and (min-width: 64em){.large-offset-0{margin-left:0%}.grid-margin-x>.large-offset-0{margin-left:calc(0% + .9375rem)}.large-offset-1{margin-left:8.33333%}.grid-margin-x>.large-offset-1{margin-left:calc(8.33333% + .9375rem)}.large-offset-2{margin-left:16.66667%}.grid-margin-x>.large-offset-2{margin-left:calc(16.66667% + .9375rem)}.large-offset-3{margin-left:25%}.grid-margin-x>.large-offset-3{margin-left:calc(25% + .9375rem)}.large-offset-4{margin-left:33.33333%}.grid-margin-x>.large-offset-4{margin-left:calc(33.33333% + .9375rem)}.large-offset-5{margin-left:41.66667%}.grid-margin-x>.large-offset-5{margin-left:calc(41.66667% + .9375rem)}.large-offset-6{margin-left:50%}.grid-margin-x>.large-offset-6{margin-left:calc(50% + .9375rem)}.large-offset-7{margin-left:58.33333%}.grid-margin-x>.large-offset-7{margin-left:calc(58.33333% + .9375rem)}.large-offset-8{margin-left:66.66667%}.grid-margin-x>.large-offset-8{margin-left:calc(66.66667% + .9375rem)}.large-offset-9{margin-left:75%}.grid-margin-x>.large-offset-9{margin-left:calc(75% + .9375rem)}.large-offset-10{margin-left:83.33333%}.grid-margin-x>.large-offset-10{margin-left:calc(83.33333% + .9375rem)}.large-offset-11{margin-left:91.66667%}.grid-margin-x>.large-offset-11{margin-left:calc(91.66667% + .9375rem)}}.grid-y{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.grid-y>.cell{height:auto;max-height:none}.grid-y>.auto{height:auto}.grid-y>.shrink{height:auto}.grid-y>.small-shrink,.grid-y>.small-full,.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-y>.smedium-shrink,.grid-y>.smedium-full,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-y>.medium-shrink,.grid-y>.medium-full,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-y>.large-shrink,.grid-y>.large-full,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.small-1{height:8.33333%}.grid-y>.small-2{height:16.66667%}.grid-y>.small-3{height:25%}.grid-y>.small-4{height:33.33333%}.grid-y>.small-5{height:41.66667%}.grid-y>.small-6{height:50%}.grid-y>.small-7{height:58.33333%}.grid-y>.small-8{height:66.66667%}.grid-y>.small-9{height:75%}.grid-y>.small-10{height:83.33333%}.grid-y>.small-11{height:91.66667%}.grid-y>.small-12{height:100%}@media screen and (min-width: 25em){.grid-y>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.smedium-shrink,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.smedium-shrink{height:auto}.grid-y>.smedium-1{height:8.33333%}.grid-y>.smedium-2{height:16.66667%}.grid-y>.smedium-3{height:25%}.grid-y>.smedium-4{height:33.33333%}.grid-y>.smedium-5{height:41.66667%}.grid-y>.smedium-6{height:50%}.grid-y>.smedium-7{height:58.33333%}.grid-y>.smedium-8{height:66.66667%}.grid-y>.smedium-9{height:75%}.grid-y>.smedium-10{height:83.33333%}.grid-y>.smedium-11{height:91.66667%}.grid-y>.smedium-12{height:100%}}@media print, screen and (min-width: 40em){.grid-y>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.medium-shrink,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.medium-shrink{height:auto}.grid-y>.medium-1{height:8.33333%}.grid-y>.medium-2{height:16.66667%}.grid-y>.medium-3{height:25%}.grid-y>.medium-4{height:33.33333%}.grid-y>.medium-5{height:41.66667%}.grid-y>.medium-6{height:50%}.grid-y>.medium-7{height:58.33333%}.grid-y>.medium-8{height:66.66667%}.grid-y>.medium-9{height:75%}.grid-y>.medium-10{height:83.33333%}.grid-y>.medium-11{height:91.66667%}.grid-y>.medium-12{height:100%}}@media print, screen and (min-width: 64em){.grid-y>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.large-shrink,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.large-shrink{height:auto}.grid-y>.large-1{height:8.33333%}.grid-y>.large-2{height:16.66667%}.grid-y>.large-3{height:25%}.grid-y>.large-4{height:33.33333%}.grid-y>.large-5{height:41.66667%}.grid-y>.large-6{height:50%}.grid-y>.large-7{height:58.33333%}.grid-y>.large-8{height:66.66667%}.grid-y>.large-9{height:75%}.grid-y>.large-10{height:83.33333%}.grid-y>.large-11{height:91.66667%}.grid-y>.large-12{height:100%}}.grid-padding-y .grid-padding-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-y .grid-padding-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-padding-y>.cell{padding-top:.625rem;padding-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-padding-y>.cell{padding-top:.9375rem;padding-bottom:.9375rem}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .grid-frame{width:100%}.cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media screen and (min-width: 25em){.smedium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .smedium-grid-frame{width:100%}.smedium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.smedium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.smedium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.smedium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 40em){.medium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .medium-grid-frame{width:100%}.medium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.medium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.medium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 64em){.large-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .large-grid-frame{width:100%}.large-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.large-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.large-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}.grid-y.grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}@media screen and (min-width: 25em){.grid-y.smedium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 40em){.grid-y.medium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 64em){.grid-y.large-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}.cell .grid-y.grid-frame{height:100%}@media screen and (min-width: 25em){.cell .grid-y.smedium-grid-frame{height:100%}}@media print, screen and (min-width: 40em){.cell .grid-y.medium-grid-frame{height:100%}}@media print, screen and (min-width: 64em){.cell .grid-y.large-grid-frame{height:100%}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}@media screen and (min-width: 25em){.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media screen and (min-width: 25em){.grid-margin-y.smedium-grid-frame{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y.medium-grid-frame{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y.large-grid-frame{height:calc(100vh + 1.875rem)}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:0.85em 1em;border:1px solid transparent;border-radius:0;-webkit-transition:background-color 0.25s ease-out,color 0.25s ease-out;transition:background-color 0.25s ease-out,color 0.25s ease-out;font-family:inherit;font-size:0.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer}[data-whatinput='mouse'] .button{outline:0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button,.button.disabled,.button[disabled],.button.disabled:hover,.button[disabled]:hover,.button.disabled:focus,.button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button:hover,.button:focus{background-color:#14679e;color:#fefefe}.button.primary,.button.primary.disabled,.button.primary[disabled],.button.primary.disabled:hover,.button.primary[disabled]:hover,.button.primary.disabled:focus,.button.primary[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.primary:hover,.button.primary:focus{background-color:#126195;color:#fefefe}.button.secondary,.button.secondary.disabled,.button.secondary[disabled],.button.secondary.disabled:hover,.button.secondary[disabled]:hover,.button.secondary.disabled:focus,.button.secondary[disabled]:focus{background-color:#767676;color:#fefefe}.button.secondary:hover,.button.secondary:focus{background-color:#5e5e5e;color:#fefefe}.button.success,.button.success.disabled,.button.success[disabled],.button.success.disabled:hover,.button.success[disabled]:hover,.button.success.disabled:focus,.button.success[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button.success:hover,.button.success:focus{background-color:#22bb5b;color:#0a0a0a}.button.warning,.button.warning.disabled,.button.warning[disabled],.button.warning.disabled:hover,.button.warning[disabled]:hover,.button.warning.disabled:focus,.button.warning[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button.warning:hover,.button.warning:focus{background-color:#cc8b00;color:#0a0a0a}.button.alert,.button.alert.disabled,.button.alert[disabled],.button.alert.disabled:hover,.button.alert[disabled]:hover,.button.alert.disabled:focus,.button.alert[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button.alert:hover,.button.alert:focus{background-color:#a53b2a;color:#fefefe}.button.hollow,.button.hollow:hover,.button.hollow:focus,.button.hollow.disabled,.button.hollow.disabled:hover,.button.hollow.disabled:focus,.button.hollow[disabled],.button.hollow[disabled]:hover,.button.hollow[disabled]:focus{background-color:transparent}.button.hollow,.button.hollow.disabled,.button.hollow[disabled],.button.hollow.disabled:hover,.button.hollow[disabled]:hover,.button.hollow.disabled:focus,.button.hollow[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow:hover,.button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary,.button.hollow.primary.disabled,.button.hollow.primary[disabled],.button.hollow.primary.disabled:hover,.button.hollow.primary[disabled]:hover,.button.hollow.primary.disabled:focus,.button.hollow.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:hover,.button.hollow.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.secondary,.button.hollow.secondary.disabled,.button.hollow.secondary[disabled],.button.hollow.secondary.disabled:hover,.button.hollow.secondary[disabled]:hover,.button.hollow.secondary.disabled:focus,.button.hollow.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button.hollow.secondary:hover,.button.hollow.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.success,.button.hollow.success.disabled,.button.hollow.success[disabled],.button.hollow.success.disabled:hover,.button.hollow.success[disabled]:hover,.button.hollow.success.disabled:focus,.button.hollow.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:hover,.button.hollow.success:focus{border-color:#157539;color:#157539}.button.hollow.warning,.button.hollow.warning.disabled,.button.hollow.warning[disabled],.button.hollow.warning.disabled:hover,.button.hollow.warning[disabled]:hover,.button.hollow.warning.disabled:focus,.button.hollow.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:hover,.button.hollow.warning:focus{border-color:#805700;color:#805700}.button.hollow.alert,.button.hollow.alert.disabled,.button.hollow.alert[disabled],.button.hollow.alert.disabled:hover,.button.hollow.alert[disabled]:hover,.button.hollow.alert.disabled:focus,.button.hollow.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button.hollow.alert:hover,.button.hollow.alert:focus{border-color:#67251a;color:#67251a}.button.clear,.button.clear:hover,.button.clear:focus,.button.clear.disabled,.button.clear.disabled:hover,.button.clear.disabled:focus,.button.clear[disabled],.button.clear[disabled]:hover,.button.clear[disabled]:focus{border-color:transparent;background-color:transparent}.button.clear,.button.clear.disabled,.button.clear[disabled],.button.clear.disabled:hover,.button.clear[disabled]:hover,.button.clear.disabled:focus,.button.clear[disabled]:focus{color:#1779ba}.button.clear:hover,.button.clear:focus{color:#0c3d5d}.button.clear.primary,.button.clear.primary.disabled,.button.clear.primary[disabled],.button.clear.primary.disabled:hover,.button.clear.primary[disabled]:hover,.button.clear.primary.disabled:focus,.button.clear.primary[disabled]:focus{color:#1779ba}.button.clear.primary:hover,.button.clear.primary:focus{color:#0c3d5d}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary[disabled],.button.clear.secondary.disabled:hover,.button.clear.secondary[disabled]:hover,.button.clear.secondary.disabled:focus,.button.clear.secondary[disabled]:focus{color:#767676}.button.clear.secondary:hover,.button.clear.secondary:focus{color:#3b3b3b}.button.clear.success,.button.clear.success.disabled,.button.clear.success[disabled],.button.clear.success.disabled:hover,.button.clear.success[disabled]:hover,.button.clear.success.disabled:focus,.button.clear.success[disabled]:focus{color:#3adb76}.button.clear.success:hover,.button.clear.success:focus{color:#157539}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning[disabled],.button.clear.warning.disabled:hover,.button.clear.warning[disabled]:hover,.button.clear.warning.disabled:focus,.button.clear.warning[disabled]:focus{color:#ffae00}.button.clear.warning:hover,.button.clear.warning:focus{color:#805700}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert[disabled],.button.clear.alert.disabled:hover,.button.clear.alert[disabled]:hover,.button.clear.alert.disabled:focus,.button.clear.alert[disabled]:focus{color:#cc4b37}.button.clear.alert:hover,.button.clear.alert:focus{color:#67251a}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.dropdown::after{display:block;width:0;height:0;border:inset .4em;content:'';border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:0.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow::after,.button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.primary::after,.button.dropdown.clear.primary::after{border-top-color:#1779ba}.button.dropdown.hollow.secondary::after,.button.dropdown.clear.secondary::after{border-top-color:#767676}.button.dropdown.hollow.success::after,.button.dropdown.clear.success::after{border-top-color:#3adb76}.button.dropdown.hollow.warning::after,.button.dropdown.clear.warning::after{border-top-color:#ffae00}.button.dropdown.hollow.alert::after,.button.dropdown.clear.alert::after{border-top-color:#cc4b37}.button.arrow-only::after{top:-0.1em;float:none;margin-left:0}a.button:hover,a.button:focus{text-decoration:none}.button-group{margin-bottom:1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.button-group::before,.button-group::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.button-group::after{clear:both}.button-group::before,.button-group::after{display:none}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:0.9rem;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}.button-group.primary .button,.button-group.primary .button.disabled,.button-group.primary .button[disabled],.button-group.primary .button.disabled:hover,.button-group.primary .button[disabled]:hover,.button-group.primary .button.disabled:focus,.button-group.primary .button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button-group.primary .button:hover,.button-group.primary .button:focus{background-color:#126195;color:#fefefe}.button-group.secondary .button,.button-group.secondary .button.disabled,.button-group.secondary .button[disabled],.button-group.secondary .button.disabled:hover,.button-group.secondary .button[disabled]:hover,.button-group.secondary .button.disabled:focus,.button-group.secondary .button[disabled]:focus{background-color:#767676;color:#fefefe}.button-group.secondary .button:hover,.button-group.secondary .button:focus{background-color:#5e5e5e;color:#fefefe}.button-group.success .button,.button-group.success .button.disabled,.button-group.success .button[disabled],.button-group.success .button.disabled:hover,.button-group.success .button[disabled]:hover,.button-group.success .button.disabled:focus,.button-group.success .button[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:hover,.button-group.success .button:focus{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button,.button-group.warning .button.disabled,.button-group.warning .button[disabled],.button-group.warning .button.disabled:hover,.button-group.warning .button[disabled]:hover,.button-group.warning .button.disabled:focus,.button-group.warning .button[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:hover,.button-group.warning .button:focus{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button,.button-group.alert .button.disabled,.button-group.alert .button[disabled],.button-group.alert .button.disabled:hover,.button-group.alert .button[disabled]:hover,.button-group.alert .button.disabled:focus,.button-group.alert .button[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button-group.alert .button:hover,.button-group.alert .button:focus{background-color:#a53b2a;color:#fefefe}.button-group.hollow .button,.button-group.hollow .button:hover,.button-group.hollow .button:focus,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:hover,.button-group.hollow .button[disabled]:focus{background-color:transparent}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button[disabled],.button-group.hollow .button.disabled:hover,.button-group.hollow .button[disabled]:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button:hover,.button-group.hollow .button:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.primary .button,.button-group.hollow.primary .button.disabled,.button-group.hollow.primary .button[disabled],.button-group.hollow.primary .button.disabled:hover,.button-group.hollow.primary .button[disabled]:hover,.button-group.hollow.primary .button.disabled:focus,.button-group.hollow.primary .button[disabled]:focus,.button-group.hollow .button.primary,.button-group.hollow .button.primary.disabled,.button-group.hollow .button.primary[disabled],.button-group.hollow .button.primary.disabled:hover,.button-group.hollow .button.primary[disabled]:hover,.button-group.hollow .button.primary.disabled:focus,.button-group.hollow .button.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow.primary .button:hover,.button-group.hollow.primary .button:focus,.button-group.hollow .button.primary:hover,.button-group.hollow .button.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.secondary .button,.button-group.hollow.secondary .button.disabled,.button-group.hollow.secondary .button[disabled],.button-group.hollow.secondary .button.disabled:hover,.button-group.hollow.secondary .button[disabled]:hover,.button-group.hollow.secondary .button.disabled:focus,.button-group.hollow.secondary .button[disabled]:focus,.button-group.hollow .button.secondary,.button-group.hollow .button.secondary.disabled,.button-group.hollow .button.secondary[disabled],.button-group.hollow .button.secondary.disabled:hover,.button-group.hollow .button.secondary[disabled]:hover,.button-group.hollow .button.secondary.disabled:focus,.button-group.hollow .button.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button-group.hollow.secondary .button:hover,.button-group.hollow.secondary .button:focus,.button-group.hollow .button.secondary:hover,.button-group.hollow .button.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button-group.hollow.success .button,.button-group.hollow.success .button.disabled,.button-group.hollow.success .button[disabled],.button-group.hollow.success .button.disabled:hover,.button-group.hollow.success .button[disabled]:hover,.button-group.hollow.success .button.disabled:focus,.button-group.hollow.success .button[disabled]:focus,.button-group.hollow .button.success,.button-group.hollow .button.success.disabled,.button-group.hollow .button.success[disabled],.button-group.hollow .button.success.disabled:hover,.button-group.hollow .button.success[disabled]:hover,.button-group.hollow .button.success.disabled:focus,.button-group.hollow .button.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button-group.hollow.success .button:hover,.button-group.hollow.success .button:focus,.button-group.hollow .button.success:hover,.button-group.hollow .button.success:focus{border-color:#157539;color:#157539}.button-group.hollow.warning .button,.button-group.hollow.warning .button.disabled,.button-group.hollow.warning .button[disabled],.button-group.hollow.warning .button.disabled:hover,.button-group.hollow.warning .button[disabled]:hover,.button-group.hollow.warning .button.disabled:focus,.button-group.hollow.warning .button[disabled]:focus,.button-group.hollow .button.warning,.button-group.hollow .button.warning.disabled,.button-group.hollow .button.warning[disabled],.button-group.hollow .button.warning.disabled:hover,.button-group.hollow .button.warning[disabled]:hover,.button-group.hollow .button.warning.disabled:focus,.button-group.hollow .button.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button-group.hollow.warning .button:hover,.button-group.hollow.warning .button:focus,.button-group.hollow .button.warning:hover,.button-group.hollow .button.warning:focus{border-color:#805700;color:#805700}.button-group.hollow.alert .button,.button-group.hollow.alert .button.disabled,.button-group.hollow.alert .button[disabled],.button-group.hollow.alert .button.disabled:hover,.button-group.hollow.alert .button[disabled]:hover,.button-group.hollow.alert .button.disabled:focus,.button-group.hollow.alert .button[disabled]:focus,.button-group.hollow .button.alert,.button-group.hollow .button.alert.disabled,.button-group.hollow .button.alert[disabled],.button-group.hollow .button.alert.disabled:hover,.button-group.hollow .button.alert[disabled]:hover,.button-group.hollow .button.alert.disabled:focus,.button-group.hollow .button.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button-group.hollow.alert .button:hover,.button-group.hollow.alert .button:focus,.button-group.hollow .button.alert:hover,.button-group.hollow .button.alert:focus{border-color:#67251a;color:#67251a}.button-group.clear .button,.button-group.clear .button:hover,.button-group.clear .button:focus,.button-group.clear .button.disabled,.button-group.clear .button.disabled:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:hover,.button-group.clear .button[disabled]:focus{border-color:transparent;background-color:transparent}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button[disabled],.button-group.clear .button.disabled:hover,.button-group.clear .button[disabled]:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled]:focus{color:#1779ba}.button-group.clear .button:hover,.button-group.clear .button:focus{color:#0c3d5d}.button-group.clear.primary .button,.button-group.clear.primary .button.disabled,.button-group.clear.primary .button[disabled],.button-group.clear.primary .button.disabled:hover,.button-group.clear.primary .button[disabled]:hover,.button-group.clear.primary .button.disabled:focus,.button-group.clear.primary .button[disabled]:focus,.button-group.clear .button.primary,.button-group.clear .button.primary.disabled,.button-group.clear .button.primary[disabled],.button-group.clear .button.primary.disabled:hover,.button-group.clear .button.primary[disabled]:hover,.button-group.clear .button.primary.disabled:focus,.button-group.clear .button.primary[disabled]:focus{color:#1779ba}.button-group.clear.primary .button:hover,.button-group.clear.primary .button:focus,.button-group.clear .button.primary:hover,.button-group.clear .button.primary:focus{color:#0c3d5d}.button-group.clear.secondary .button,.button-group.clear.secondary .button.disabled,.button-group.clear.secondary .button[disabled],.button-group.clear.secondary .button.disabled:hover,.button-group.clear.secondary .button[disabled]:hover,.button-group.clear.secondary .button.disabled:focus,.button-group.clear.secondary .button[disabled]:focus,.button-group.clear .button.secondary,.button-group.clear .button.secondary.disabled,.button-group.clear .button.secondary[disabled],.button-group.clear .button.secondary.disabled:hover,.button-group.clear .button.secondary[disabled]:hover,.button-group.clear .button.secondary.disabled:focus,.button-group.clear .button.secondary[disabled]:focus{color:#767676}.button-group.clear.secondary .button:hover,.button-group.clear.secondary .button:focus,.button-group.clear .button.secondary:hover,.button-group.clear .button.secondary:focus{color:#3b3b3b}.button-group.clear.success .button,.button-group.clear.success .button.disabled,.button-group.clear.success .button[disabled],.button-group.clear.success .button.disabled:hover,.button-group.clear.success .button[disabled]:hover,.button-group.clear.success .button.disabled:focus,.button-group.clear.success .button[disabled]:focus,.button-group.clear .button.success,.button-group.clear .button.success.disabled,.button-group.clear .button.success[disabled],.button-group.clear .button.success.disabled:hover,.button-group.clear .button.success[disabled]:hover,.button-group.clear .button.success.disabled:focus,.button-group.clear .button.success[disabled]:focus{color:#3adb76}.button-group.clear.success .button:hover,.button-group.clear.success .button:focus,.button-group.clear .button.success:hover,.button-group.clear .button.success:focus{color:#157539}.button-group.clear.warning .button,.button-group.clear.warning .button.disabled,.button-group.clear.warning .button[disabled],.button-group.clear.warning .button.disabled:hover,.button-group.clear.warning .button[disabled]:hover,.button-group.clear.warning .button.disabled:focus,.button-group.clear.warning .button[disabled]:focus,.button-group.clear .button.warning,.button-group.clear .button.warning.disabled,.button-group.clear .button.warning[disabled],.button-group.clear .button.warning.disabled:hover,.button-group.clear .button.warning[disabled]:hover,.button-group.clear .button.warning.disabled:focus,.button-group.clear .button.warning[disabled]:focus{color:#ffae00}.button-group.clear.warning .button:hover,.button-group.clear.warning .button:focus,.button-group.clear .button.warning:hover,.button-group.clear .button.warning:focus{color:#805700}.button-group.clear.alert .button,.button-group.clear.alert .button.disabled,.button-group.clear.alert .button[disabled],.button-group.clear.alert .button.disabled:hover,.button-group.clear.alert .button[disabled]:hover,.button-group.clear.alert .button.disabled:focus,.button-group.clear.alert .button[disabled]:focus,.button-group.clear .button.alert,.button-group.clear .button.alert.disabled,.button-group.clear .button.alert[disabled],.button-group.clear .button.alert.disabled:hover,.button-group.clear .button.alert[disabled]:hover,.button-group.clear .button.alert.disabled:focus,.button-group.clear .button.alert[disabled]:focus{color:#cc4b37}.button-group.clear.alert .button:hover,.button-group.clear.alert .button:focus,.button-group.clear .button.alert:hover,.button-group.clear .button.alert:focus{color:#67251a}.button-group.no-gaps .button{margin-right:-.0625rem}.button-group.no-gaps .button+.button{border-left-color:transparent}.button-group.stacked,.button-group.stacked-for-small,.button-group.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked-for-medium .button:last-child{margin-bottom:0}.button-group.stacked.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked-for-medium.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}@media print, screen and (min-width: 40em){.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (min-width: 64em){.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (max-width: 24.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media print, screen and (max-width: 63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;z-index:10;color:#8a8a8a;cursor:pointer}[data-whatinput='mouse'] .close-button{outline:0}.close-button:hover,.close-button:focus{color:#0a0a0a}.close-button.small{right:0.66rem;top:0.33em;font-size:1.5em;line-height:1}.close-button.medium,.close-button{right:1rem;top:0.5rem;font-size:2em;line-height:1}.label{display:inline-block;padding:0.33333rem 0.5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#1779ba;color:#fefefe}.label.primary{background:#1779ba;color:#fefefe}.label.secondary{background:#767676;color:#fefefe}.label.success{background:#3adb76;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.alert{background:#cc4b37;color:#fefefe}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#cc4b37}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);margin:0;font-size:0.75rem;font-weight:bold;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.slider-fill.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider-handle{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#1779ba;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput='mouse'] .slider-handle{outline:0}.slider-handle:hover{background-color:#14679e}.slider-handle.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:bold;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);border-radius:0;background:#fefefe;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;content:''}input:checked ~ .switch-paddle{background:#1779ba}input:checked ~ .switch-paddle::after{left:2.25rem}input:disabled ~ .switch-paddle{cursor:not-allowed;opacity:.5}[data-whatinput='mouse'] input:focus ~ .switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked ~ .switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked ~ .switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked ~ .switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}thead,tbody,tfoot{border:1px solid #f1f1f1;background-color:#fefefe}caption{padding:.5rem .625rem .625rem;font-weight:bold}thead{background:#f8f8f8;color:#0a0a0a}tfoot{background:#f1f1f1;color:#0a0a0a}thead tr,tfoot tr{background:transparent}thead th,thead td,tfoot th,tfoot td{padding:.5rem .625rem .625rem;font-weight:bold;text-align:left}tbody th,tbody td{padding:.5rem .625rem .625rem}tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media print, screen and (max-width: 63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack tr,table.stack th,table.stack td{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#1779ba;color:#fefefe}.badge.primary{background:#1779ba;color:#fefefe}.badge.secondary{background:#767676;color:#fefefe}.badge.success{background:#3adb76;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.alert{background:#cc4b37;color:#fefefe}.breadcrumbs{margin:0 0 1rem 0;list-style:none}.breadcrumbs::before,.breadcrumbs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.breadcrumbs::after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child)::after{position:relative;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#1779ba}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.callout{position:relative;margin:0 0 1rem 0;padding:1rem;border:1px solid rgba(10,10,10,0.25);border-radius:0;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#d7ecfa;color:#0a0a0a}.callout.secondary{background-color:#eaeaea;color:#0a0a0a}.callout.success{background-color:#e1faea;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.alert{background-color:#f7e4e1;color:#0a0a0a}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:0;background:#fefefe;-webkit-box-shadow:none;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;padding:1rem}.card-section>:last-child{margin-bottom:0}.card-image{min-height:1px}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.pagination{margin-left:0;margin-bottom:1rem}.pagination::before,.pagination::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:last-child,.pagination li:first-child{display:inline-block}@media print, screen and (min-width: 40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:0.5rem;content:"«"}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:0.5rem;content:"»"}.has-tip{position:relative;display:inline-block;border-bottom:dotted 1px #8a8a8a;font-weight:bold;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;bottom:100%}.tooltip.bottom.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0 0 0 0}.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#1779ba}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0 0 0 0}.accordion-title:hover,.accordion-title:focus{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-0.5rem;content:"+"}.is-active>.accordion-title::before{content:"–"}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.media-object{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.media-object img{max-width:none}@media print, screen and (max-width: 24.99875em){.media-object.stack-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.media-object-section{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}@media print, screen and (max-width: 24.99875em){.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.stack-for-small .media-object-section img{width:100%}}.media-object-section.main-section{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.orbit{position:relative}.orbit-container{position:relative;height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%;position:absolute}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{position:absolute;bottom:0;width:100%;margin-bottom:0;padding:1rem;background-color:rgba(10,10,10,0.5);color:#fefefe}.orbit-previous,.orbit-next{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:10;padding:1rem;color:#fefefe}[data-whatinput='mouse'] .orbit-previous,[data-whatinput='mouse'] .orbit-next{outline:0}.orbit-previous:hover,.orbit-next:hover,.orbit-previous:active,.orbit-next:active,.orbit-previous:focus,.orbit-next:focus{background-color:rgba(10,10,10,0.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput='mouse'] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button:hover{background-color:#8a8a8a}.orbit-bullets button.is-active{background-color:#8a8a8a}.responsive-embed,.flex-video{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.responsive-embed iframe,.responsive-embed object,.responsive-embed embed,.responsive-embed video,.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{position:absolute;top:0;left:0;width:100%;height:100%}.responsive-embed.widescreen,.flex-video.widescreen{padding-bottom:56.25%}.tabs{margin:0;border:1px solid #e6e6e6;background:#fefefe;list-style-type:none}.tabs::before,.tabs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary{background:#1779ba}.tabs.primary>li>a{color:#fefefe}.tabs.primary>li>a:hover,.tabs.primary>li>a:focus{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#1779ba}[data-whatinput='mouse'] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fefefe;color:#1468a0}.tabs-title>a:focus,.tabs-title>a[aria-selected='true']{background:#e6e6e6;color:#1779ba}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;-webkit-transition:all 0.5s ease;transition:all 0.5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(10,10,10,0.2);box-shadow:0 0 0 1px rgba(10,10,10,0.2);line-height:0}a.thumbnail{-webkit-transition:-webkit-box-shadow 200ms ease-out;transition:-webkit-box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out}a.thumbnail:hover,a.thumbnail:focus{-webkit-box-shadow:0 0 6px 1px rgba(23,121,186,0.5);box-shadow:0 0 6px 1px rgba(23,121,186,0.5)}a.thumbnail image{-webkit-box-shadow:none;box-shadow:none}.menu{padding:0;margin:0;list-style:none;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}[data-whatinput='mouse'] .menu li{outline:0}.menu a,.menu .button{line-height:1;text-decoration:none;display:block;padding:0.7rem 1rem}.menu input,.menu select,.menu a,.menu button{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.simple{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media screen and (min-width: 25em){.menu.smedium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.smedium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.smedium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.smedium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 40em){.menu.medium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.medium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.medium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.medium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 64em){.menu.large-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.large-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.large-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.large-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-top a,.menu.icon-right a,.menu.icon-bottom a,.menu.icon-left a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-left li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-left li a img,.menu.icon-left li a i,.menu.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-right li a img,.menu.icon-right li a i,.menu.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-top li a img,.menu.icon-top li a i,.menu.icon-top li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-bottom li a img,.menu.icon-bottom li a i,.menu.icon-bottom li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#1779ba;color:#fefefe}.menu .active>a{background:#1779ba;color:#fefefe}.menu.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu.align-right li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu.align-center li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu .menu-text{padding:0.7rem 1rem;font-weight:bold;line-height:1;color:inherit}.menu-centered>.menu{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;-webkit-box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;-webkit-box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;-webkit-box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;-webkit-box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.accordion-menu li{width:100%}.accordion-menu a{padding:0.7rem 1rem}.accordion-menu .is-accordion-submenu a{padding:0.7rem 1rem}.accordion-menu .nested.is-accordion-submenu{margin-right:0;margin-left:1rem}.accordion-menu.align-right .nested.is-accordion-submenu{margin-right:1rem;margin-left:0}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{position:relative}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.accordion-menu.align-left .is-accordion-submenu-parent>a::after{right:1rem;left:auto}.accordion-menu.align-right .is-accordion-submenu-parent>a::after{right:auto;left:1rem}.accordion-menu .is-accordion-submenu-parent[aria-expanded='true']>a::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.is-accordion-submenu-parent{position:relative}.has-submenu-toggle>a{margin-right:40px}.submenu-toggle{position:absolute;top:0;right:0;width:40px;height:40px;cursor:pointer}.submenu-toggle::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;top:0;bottom:0;margin:auto}.submenu-toggle[aria-expanded='true']::after{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.submenu-toggle-text{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{-webkit-transition:height 0.5s;transition:height 0.5s}.drilldown a{padding:0.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;-webkit-transition:-webkit-transform 0.15s linear;transition:-webkit-transform 0.15s linear;transition:transform 0.15s linear;transition:transform 0.15s linear, -webkit-transform 0.15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:0.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:0.75rem}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput='mouse'] .dropdown.menu a{outline:0}.dropdown.menu>li>a{padding:0.7rem 1rem}.dropdown.menu>li.is-active>a{background:rgba(0,0,0,0);color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}@media screen and (min-width: 25em){.dropdown.menu.smedium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.smedium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.smedium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.smedium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.smedium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.smedium-vertical>li>a::after{right:14px}.dropdown.menu.smedium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.smedium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.dropdown .is-dropdown-submenu a{padding:0.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;-webkit-transition:opacity .5s ease,visibility .5s ease;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,0.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-absolute{position:absolute;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-left.has-transition-push{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push{-webkit-box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-right.has-transition-push{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push{-webkit-box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-top.has-transition-push{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push{-webkit-box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-bottom.has-transition-push{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push{-webkit-box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25)}.off-canvas-content{-webkit-transform:none;-ms-transform:none;transform:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}.off-canvas-content.has-transition-overlap,.off-canvas-content.has-transition-push{-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.off-canvas-content.has-transition-push{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content .off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}@media screen and (min-width: 25em){.position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-smedium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-smedium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-smedium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-smedium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 40em){.position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 64em){.position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large ~ .off-canvas-content{margin-bottom:250px}}@media screen and (min-width: 25em){.off-canvas.in-canvas-for-smedium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-smedium.position-left,.off-canvas.in-canvas-for-smedium.position-right,.off-canvas.in-canvas-for-smedium.position-top,.off-canvas.in-canvas-for-smedium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-smedium .close-button{display:none}}@media print, screen and (min-width: 40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top,.off-canvas.in-canvas-for-medium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print, screen and (min-width: 64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top,.off-canvas.in-canvas-for-large.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}html.is-reveal-open{position:fixed;width:100%;overflow-y:hidden}html.is-reveal-open.zf-has-scroll{overflow-y:scroll}html.is-reveal-open body{overflow-y:hidden}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:rgba(10,10,10,0.45);overflow-y:auto}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput='mouse'] .reveal{outline:0}@media print, screen and (min-width: 40em){.reveal{min-height:0}}.reveal .column{min-width:0}.reveal>:last-child{margin-bottom:0}@media print, screen and (min-width: 40em){.reveal{width:600px;max-width:75rem}}.reveal.collapse{padding:0}@media print, screen and (min-width: 40em){.reveal.tiny{width:30%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.small{width:50%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}@media print, screen and (max-width: 24.99875em){.reveal{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.sticky-container{position:relative}.sticky{position:relative;z-index:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.sticky.is-stuck{position:fixed;z-index:5;width:100%}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:bold}.top-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media print, screen and (min-width: 40em){.top-bar{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.top-bar .top-bar-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;margin-left:auto}}@media screen and (max-width: 39.99875em){.top-bar.stacked-for-smedium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-smedium .top-bar-left,.top-bar.stacked-for-smedium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 63.99875em){.top-bar.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 74.99875em){.top-bar.stacked-for-large{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}.top-bar-title{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:0.5rem 1rem 0.5rem 0}.top-bar-left,.top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.float-left{float:left !important}.float-right{float:right !important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::before,.clearfix::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.clearfix::after{clear:both}.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.align-left.vertical.menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right.vertical.menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.vertical.menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.align-self-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.align-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.align-self-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.align-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.align-self-middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.align-self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.align-center-middle{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.small-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.small-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.small-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.small-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.small-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.small-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}@media screen and (min-width: 25em){.smedium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.smedium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.smedium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.smedium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.smedium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.smedium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 40em){.medium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.medium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.medium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.medium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.medium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.medium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 64em){.large-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.large-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.large-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.large-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.large-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.large-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}.flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media screen and (min-width: 25em){.smedium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.smedium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.smedium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.smedium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.smedium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.smedium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.smedium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.smedium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 40em){.medium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.medium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.medium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.medium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.medium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.medium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.medium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 64em){.large-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.large-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.large-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.large-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.large-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.large-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.large-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.hide{display:none !important}.invisible{visibility:hidden}@media print, screen and (max-width: 24.99875em){.hide-for-small-only{display:none !important}}@media screen and (max-width: 0em), screen and (min-width: 25em){.show-for-small-only{display:none !important}}@media screen and (min-width: 25em){.hide-for-smedium{display:none !important}}@media screen and (max-width: 24.99875em){.show-for-smedium{display:none !important}}@media screen and (min-width: 25em) and (max-width: 39.99875em){.hide-for-smedium-only{display:none !important}}@media screen and (max-width: 24.99875em), screen and (min-width: 40em){.show-for-smedium-only{display:none !important}}@media print, screen and (min-width: 40em){.hide-for-medium{display:none !important}}@media screen and (max-width: 39.99875em){.show-for-medium{display:none !important}}@media print, screen and (min-width: 40em) and (max-width: 63.99875em){.hide-for-medium-only{display:none !important}}@media screen and (max-width: 39.99875em), screen and (min-width: 64em){.show-for-medium-only{display:none !important}}@media print, screen and (min-width: 64em){.hide-for-large{display:none !important}}@media screen and (max-width: 63.99875em){.show-for-large{display:none !important}}@media print, screen and (min-width: 64em) and (max-width: 74.99875em){.hide-for-large-only{display:none !important}}@media screen and (max-width: 63.99875em), screen and (min-width: 75em){.show-for-large-only{display:none !important}}.show-for-sr,.show-on-focus{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.show-on-focus:active,.show-on-focus:focus{position:static !important;width:auto !important;height:auto !important;overflow:visible !important;clip:auto !important;white-space:normal !important}.show-for-landscape,.hide-for-portrait{display:block !important}@media screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:block !important}}@media screen and (orientation: portrait){.show-for-landscape,.hide-for-portrait{display:none !important}}.hide-for-landscape,.show-for-portrait{display:none !important}@media screen and (orientation: landscape){.hide-for-landscape,.show-for-portrait{display:none !important}}@media screen and (orientation: portrait){.hide-for-landscape,.show-for-portrait{display:block !important}}#toast-container{z-index:10001;text-align:center;position:absolute;height:100vh !important;width:100%;overflow:visible !important;padding:8.5vh 0 0 0;pointer-events:none}#toast-container div.toast{position:relative;width:100%;pointer-events:none;-webkit-transition:opacity 0.25s;transition:opacity 0.25s}#toast-container div.toast.toast-template{visibility:hidden}#toast-container div.toast span.message{pointer-events:auto;font-size:0.8rem;border-radius:25px;letter-spacing:0;z-index:10001;max-width:100%;display:inline-block;-webkit-box-shadow:2px 2px 10px rgba(0,0,0,0.28);box-shadow:2px 2px 10px rgba(0,0,0,0.28);border:1px solid #626262;background-color:#6b6b6b;padding:.3em .6em;text-align:center;color:white}#toast-container div.toast span.message:hover{opacity:.4;cursor:pointer}#toast-container div.toast span.message:before,#toast-container div.toast span.message:after{display:block;content:""}.background{position:fixed;z-index:1000000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(55,55,55,0.6)}.background .modal{position:relative;top:50%;margin:auto;width:80%;border-radius:2px;background-color:#fefefe;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);padding:0.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:80%;max-width:1024px}@media print, screen and (max-width: 63.99875em){.background .modal.small-margin{width:90%}}@media print, screen and (max-width: 24.99875em){.background .modal.small-margin{width:95%}}.background .modal.max-small{max-width:0}.background .modal.max-smedium{max-width:400px}.background .modal.max-medium{max-width:640px}.background .modal.max-large{max-width:1024px}.background .modal.max-xlarge{max-width:1200px}.background .modal.max-xxlarge{max-width:1440px}.background .modal .title{font-weight:bold;padding-bottom:0.5rem}.background .modal .content-container{overflow-y:auto;max-height:100%}.background .modal .content-container .loader{position:static;-webkit-transform:none;-ms-transform:none;transform:none}.background .modal .close{text-align:right;float:right;font-size:28px;font-weight:bold;line-height:1}.background .modal .close:hover,.background .modal .close:focus{text-decoration:none;cursor:pointer}.background .modal .modal-button-container{padding-top:0.5rem}.background .modal .modal-button-container .button{margin-left:0.2rem;margin-bottom:0 !important;padding:0.6em 0.8em}@media print, screen and (max-width: 24.99875em){.background .modal .modal-button-container .button{margin-left:0.1rem;padding:0.3em 0.5em}}.background .modal .choose-dialog-value-row{line-height:1;padding-top:0.5em;padding-bottom:0.5em;width:100%;cursor:pointer;background:rgba(150,150,150,0.15);display:inline-block;margin-top:0.3rem;margin-bottom:0.3rem;padding-left:0.5rem}.background .modal.no-title .title{display:none}label{position:relative}label [type='text'],label [type='password'],label [type='date'],label [type='datetime'],label [type='datetime-local'],label [type='month'],label [type='week'],label [type='email'],label [type='number'],label [type='search'],label [type='tel'],label [type='time'],label [type='url'],label [type='color'],label textarea,label input[type='text'],label input:not([type]){display:block;width:100%;height:2.4375rem;padding:0.5rem;-webkit-box-shadow:none;box-shadow:none;font-size:1rem;font-weight:normal;line-height:1.5;border:none;border-bottom:solid 1px #626262;outline:0;margin:0 0 15px}label [type='text']:invalid,label [type='password']:invalid,label [type='date']:invalid,label [type='datetime']:invalid,label [type='datetime-local']:invalid,label [type='month']:invalid,label [type='week']:invalid,label [type='email']:invalid,label [type='number']:invalid,label [type='search']:invalid,label [type='tel']:invalid,label [type='time']:invalid,label [type='url']:invalid,label [type='color']:invalid,label textarea:invalid,label input[type='text']:invalid,label input:not([type]):invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:disabled,label [type='password']:disabled,label [type='date']:disabled,label [type='datetime']:disabled,label [type='datetime-local']:disabled,label [type='month']:disabled,label [type='week']:disabled,label [type='email']:disabled,label [type='number']:disabled,label [type='search']:disabled,label [type='tel']:disabled,label [type='time']:disabled,label [type='url']:disabled,label [type='color']:disabled,label textarea:disabled,label input[type='text']:disabled,label input:not([type]):disabled{background-color:#e6e6e6}label [type='text']:focus,label [type='password']:focus,label [type='date']:focus,label [type='datetime']:focus,label [type='datetime-local']:focus,label [type='month']:focus,label [type='week']:focus,label [type='email']:focus,label [type='number']:focus,label [type='search']:focus,label [type='tel']:focus,label [type='time']:focus,label [type='url']:focus,label [type='color']:focus,label textarea:focus,label input[type='text']:focus,label input:not([type]):focus{border:none;border-bottom:solid 1px #626262;-webkit-box-shadow:none;box-shadow:none}label [type='text']:focus:invalid,label [type='password']:focus:invalid,label [type='date']:focus:invalid,label [type='datetime']:focus:invalid,label [type='datetime-local']:focus:invalid,label [type='month']:focus:invalid,label [type='week']:focus:invalid,label [type='email']:focus:invalid,label [type='number']:focus:invalid,label [type='search']:focus:invalid,label [type='tel']:focus:invalid,label [type='time']:focus:invalid,label [type='url']:focus:invalid,label [type='color']:focus:invalid,label textarea:focus:invalid,label input[type='text']:focus:invalid,label input:not([type]):focus:invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:focus:disabled,label [type='password']:focus:disabled,label [type='date']:focus:disabled,label [type='datetime']:focus:disabled,label [type='datetime-local']:focus:disabled,label [type='month']:focus:disabled,label [type='week']:focus:disabled,label [type='email']:focus:disabled,label [type='number']:focus:disabled,label [type='search']:focus:disabled,label [type='tel']:focus:disabled,label [type='time']:focus:disabled,label [type='url']:focus:disabled,label [type='color']:focus:disabled,label textarea:focus:disabled,label input[type='text']:focus:disabled,label input:not([type]):focus:disabled{background-color:#e6e6e6}label [type='text']:focus ~ span,label [type='text'].notEmpty:not(:focus) ~ span,label [type='text']:not(:empty) ~ span,label [type='password']:focus ~ span,label [type='password'].notEmpty:not(:focus) ~ span,label [type='password']:not(:empty) ~ span,label [type='date']:focus ~ span,label [type='date'].notEmpty:not(:focus) ~ span,label [type='date']:not(:empty) ~ span,label [type='datetime']:focus ~ span,label [type='datetime'].notEmpty:not(:focus) ~ span,label [type='datetime']:not(:empty) ~ span,label [type='datetime-local']:focus ~ span,label [type='datetime-local'].notEmpty:not(:focus) ~ span,label [type='datetime-local']:not(:empty) ~ span,label [type='month']:focus ~ span,label [type='month'].notEmpty:not(:focus) ~ span,label [type='month']:not(:empty) ~ span,label [type='week']:focus ~ span,label [type='week'].notEmpty:not(:focus) ~ span,label [type='week']:not(:empty) ~ span,label [type='email']:focus ~ span,label [type='email'].notEmpty:not(:focus) ~ span,label [type='email']:not(:empty) ~ span,label [type='number']:focus ~ span,label [type='number'].notEmpty:not(:focus) ~ span,label [type='number']:not(:empty) ~ span,label [type='search']:focus ~ span,label [type='search'].notEmpty:not(:focus) ~ span,label [type='search']:not(:empty) ~ span,label [type='tel']:focus ~ span,label [type='tel'].notEmpty:not(:focus) ~ span,label [type='tel']:not(:empty) ~ span,label [type='time']:focus ~ span,label [type='time'].notEmpty:not(:focus) ~ span,label [type='time']:not(:empty) ~ span,label [type='url']:focus ~ span,label [type='url'].notEmpty:not(:focus) ~ span,label [type='url']:not(:empty) ~ span,label [type='color']:focus ~ span,label [type='color'].notEmpty:not(:focus) ~ span,label [type='color']:not(:empty) ~ span,label textarea:focus ~ span,label textarea.notEmpty:not(:focus) ~ span,label textarea:not(:empty) ~ span,label input[type='text']:focus ~ span,label input[type='text'].notEmpty:not(:focus) ~ span,label input[type='text']:not(:empty) ~ span,label input:not([type]):focus ~ span,label input:not([type]).notEmpty:not(:focus) ~ span,label input:not([type]):not(:empty) ~ span{top:-11px;left:0;bottom:0;font-size:11px;opacity:1;color:black}label [type='text'] ~ span,label [type='password'] ~ span,label [type='date'] ~ span,label [type='datetime'] ~ span,label [type='datetime-local'] ~ span,label [type='month'] ~ span,label [type='week'] ~ span,label [type='email'] ~ span,label [type='number'] ~ span,label [type='search'] ~ span,label [type='tel'] ~ span,label [type='time'] ~ span,label [type='url'] ~ span,label [type='color'] ~ span,label textarea ~ span,label input[type='text'] ~ span,label input:not([type]) ~ span{position:absolute;pointer-events:none;left:10px;bottom:10px;top:7px;-webkit-transition:0.2s ease all;transition:0.2s ease all;color:#626262}label textarea{height:10rem;border-top-right-radius:3px;border-top-left-radius:3px}label [type="checkbox"].before-text{margin-bottom:0}input[type=number]{-moz-appearance:textfield}input[type=number] ::-webkit-inner-spin-button,input[type=number] ::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}nav.top-bar{z-index:1;white-space:nowrap;position:relative;background:#000;color:#fff;stroke:#fff;padding:0}nav.top-bar:not(.with-image){margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem)}@media print, screen and (min-width: 40em){nav.top-bar:not(.with-image){margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem)}}nav.top-bar .background-img{display:none}nav.top-bar>span>span>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}nav.top-bar>span .back-button{cursor:pointer;text-align:left}nav.top-bar>span .back-button svg{width:0.5rem;height:100%;vertical-align:bottom}nav.top-bar>span .back-button.hidden{visibility:hidden;display:initial}nav.top-bar>span .top-bar-title{margin-left:0.5rem}nav.top-bar>span #navbar-close-listener-container #navbar-close-listener{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:8999}nav.top-bar>span #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar>span #responsive-menu-toggle .menu-icon{vertical-align:-webkit-baseline-middle}nav.top-bar>span #responsive-menu{display:block;-webkit-transition-duration:0.5s;transition-duration:0.5s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}nav.top-bar>span #responsive-menu.visible .hidden-menu{right:0}nav.top-bar>span #responsive-menu .hidden-menu{position:fixed;-webkit-transform:none;-ms-transform:none;transform:none;display:inline-block;z-index:9000;border:1px solid #1e1c1c;padding:4.5rem 1.65rem 0rem 2.75rem;text-align:left;background:#000;margin-top:-1rem;right:-1000%}nav.top-bar>span #responsive-menu .hidden-menu li{font-size:1.15rem}nav.top-bar>span #responsive-menu .hidden-menu li.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu{top:auto}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>li,nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>.close-listener{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#ffffff transparent transparent;right:5px;left:auto;margin-top:-3px}nav.top-bar>span #responsive-menu .hidden-menu li a{white-space:nowrap}nav.top-bar>span #responsive-menu .hidden-menu li a img{display:none}nav.top-bar>span #responsive-menu .hidden-menu li a img+span{display:inherit}@media print, screen and (min-width: 40em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:none}}@media print, screen and (min-width: 25em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:none}}@media print, screen and (min-width: 64em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:none}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.smedium.hidden{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.medium.hidden{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.large.hidden{display:none}}nav.top-bar>span #responsive-menu .hidden-menu li.never{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.never.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.always{display:none}nav.top-bar>span .navbar-menu{background:initial;width:auto;z-index:9000}nav.top-bar>span .navbar-menu a img+span{display:none}nav.top-bar>span .navbar-menu li{position:relative;z-index:9000}nav.top-bar>span .navbar-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span .navbar-menu li.hidden{display:none}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu li.smedium{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu li li{display:table-cell}nav.top-bar>span .navbar-menu li.medium{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span .navbar-menu li.large{display:none}}nav.top-bar>span .navbar-menu li.never{display:none}nav.top-bar>span .navbar-menu .menu li,nav.top-bar>span .navbar-menu.menu li{z-index:100}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{width:100%}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.236rem}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.236rem}}nav.top-bar>span .navbar-menu .menu li.img a,nav.top-bar>span .navbar-menu.menu li.img a{padding-top:0;padding-bottom:0}nav.top-bar>span .navbar-menu .menu li.img a img,nav.top-bar>span .navbar-menu.menu li.img a img{vertical-align:inherit;max-height:1.8rem}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu{min-width:0}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu li,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu li{display:inherit}nav.top-bar>span .navbar-menu .menu>li.opens-right>a,nav.top-bar>span .navbar-menu.menu>li.opens-right>a{margin-right:0.5rem}nav.top-bar>span .navbar-menu .menu>li.opens-right>a:after,nav.top-bar>span .navbar-menu.menu>li.opens-right>a:after{right:0.1rem}nav.top-bar>span .submenu{background:#000}nav.top-bar.with-image{background:rgba(0,0,0,0);-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image *{-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image .background-img{display:initial;margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem);min-width:1.5625rem}@media print, screen and (min-width: 40em){nav.top-bar.with-image .background-img{margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem);min-width:2.34375rem}}nav.top-bar.with-image>span{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar.with-image>span>*{position:relative}nav.top-bar.with-image>span #responsive-menu-toggle{z-index:9100}nav.top-bar.with-image>span .navbar-menu{background:initial}nav.top-bar.with-image>span .submenu{background:#000}nav.top-bar.with-image.color-black{color:#000;stroke:#000}nav.top-bar.with-image.color-black #responsive-menu .hidden-menu{background:#fff;border-color:#7F7F7F}nav.top-bar.with-image.color-black #responsive-menu-toggle .menu-icon::after{background:#000;-webkit-box-shadow:0 7px 0 #000,0 14px 0 #000;box-shadow:0 7px 0 #000,0 14px 0 #000}nav.top-bar.with-image.color-black .submenu{background:#fff}nav.top-bar.with-image.color-white{color:#fff;stroke:#fff}nav.top-bar.with-image.color-white #responsive-menu .hidden-menu{background:#000;border-color:#1e1c1c}nav.top-bar.with-image.color-white #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar.with-image.color-white .submenu{background:#000}nav.top-bar.with-image.solid{background:#000}nav.top-bar.with-image.solid>span #responsive-menu .hidden-menu{border-color:#7F7F7F}nav.top-bar.with-image.solid>span .navbar-menu{background:inherit}nav.top-bar.with-image.solid.color-black{background:#fff}nav.top-bar.with-image.solid.color-white{background:#000}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{margin-right:0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a::after,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{right:0.1rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) ul a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>ul a{width:100%}.menu.is-accordion-submenu{margin-left:0.7rem}.menu{-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top;-webkit-transition:0.25s;transition:0.25s}#responsive-menu-toggle button{vertical-align:initial}.dropdown.menu>li.is-accordion-submenu-parent>ul.is-dropdown-submenu{left:auto;right:0}#navbar-fragment{width:100%}.logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.logo .logo-img{margin-left:1rem;margin-right:0.5rem;max-width:2.35rem}.tab-fragment .tab-names .tab-button{display:inline-block;border:1px solid #E6E6E6;border-top-left-radius:3px;border-top-right-radius:3px;background-color:#E6E6E6;padding:0.3rem}.tab-fragment .tab-names .tab-button.active{border-bottom:0;background-color:initial}.tab-fragment .tab-content{border:1px solid #E6E6E6;border-top:0;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.tab-fragment .tab-content .tab-site{display:none}.tab-fragment .tab-content .tab-site.active{display:initial}.tab-fragment .tab-button-template,.tab-fragment .tab-site-template{display:none}.tab-fragment .border-bottom{border-bottom:1px solid #E6E6E6}.alphabetic-list{height:100%;position:relative}.alphabetic-list .alphabetic-list-container{height:100%;overflow:auto}.alphabetic-list .alphabetic-list-sidealphabet{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{cursor:pointer;height:3.8%;display:block;text-align:center}@media print, screen and (max-width: 24.99875em){.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{font-size:0.8em}}.window-container{position:fixed;background:white;padding:0;border:1px solid #b1b1b1;border-radius:3px;cursor:-webkit-grab;cursor:grab;-webkit-transition:none;transition:none;min-width:10rem;min-height:3rem;-webkit-box-sizing:content-box;box-sizing:content-box;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.window-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.window-container.active-window{z-index:1100}.window-container .window-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.window-container .window-resize.edge{width:4px;height:4px}.window-container .window-resize.edge.nw{cursor:nw-resize}.window-container .window-resize.edge.ne{cursor:ne-resize}.window-container .window-resize.edge.sw{cursor:sw-resize}.window-container .window-resize.edge.se{cursor:se-resize}.window-container .window-resize.bottom,.window-container .window-resize.top{cursor:ns-resize;height:4px}.window-container .window-resize.left,.window-container .window-resize.right{cursor:ew-resize;width:4px}.window-container #title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0;padding-bottom:0.5rem;font-size:1rem;letter-spacing:0.2rem;font-weight:bold}.window-container #title-buttons .title-button{max-height:1rem;cursor:pointer;outline:none;display:inline-block}.window-container.moving{cursor:-webkit-grabbing;cursor:grabbing}.window-container.minimized{padding:0.2rem;width:0 !important;height:0 !important;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.window-container.minimized .window{display:none}.window-container.minimized .window-resize{display:none}.window-container.minimized #title{border:0;margin:0;height:100%}.window-container.minimized #title-buttons .title-button.hide-minimized{display:none}.window-container.maximized{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.maximized .window-resize{display:none}.window-container.maximized #title-buttons .title-button.hide-maximized{display:none}.window-container.popup{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.popup .window-resize{display:none}.window-container.popup #title-buttons .title-button.hide-popup{display:none}.window-container .window{overflow:auto;cursor:initial;position:relative}.max-height-100{max-height:100%}.overflow-hidden{overflow:hidden}body:not(.access-admin) .access-admin{display:none}body:not(.access-loggedIn) .access-loggedIn{display:none}body:not(.access-loggedOut) .access-loggedOut{display:none}body:not(.access-online) .access-online{display:none}body:not(.access-offline) .access-offline{display:none}body:not(.access-default) .access-default{display:none}.share-icon{width:1.5rem;max-width:1.5rem;margin:0.1rem}.share-icon svg{width:1.5rem;max-width:1.5rem}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{min-height:100%;width:100%;height:100%;letter-spacing:1px}.max-height{height:100%;min-height:100%}body{margin:0;padding:0;height:100%;width:100%;font-family:"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;font-weight:400;line-height:1.5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background:#fefefe;color:#0a0a0a}footer{border-top:#d8d8d8 solid 1px;text-align:center}.top-bar .top-bar-title strong{vertical-align:middle;display:inline-block}nav.top-bar{color:#FFF;font-size:20px;-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);padding:0.6rem;display:block}button.button,a.button{border-radius:2px}.fill-me{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.fill-me.vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.fill-me .grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flex-center{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.flex-center>*{max-height:100%}.menu a,.dropdown.menu a{padding:.4rem .5rem}svg path{fill:currentColor}div.mainContainer{position:relative;max-height:100%;max-width:100%;overflow:auto;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin:0.5rem}div.mainContainer>.row,div.mainContainer #main-content,div.mainContainer #site{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0}.inline-block{display:inline-block}.right{float:right}#logo-img{max-height:2.2rem}a{text-decoration:none;cursor:pointer;color:inherit}a.hidden-link{text-decoration:none;color:inherit}label{cursor:pointer}.align-right{text-align:right}.view-panel{display:none}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small #spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader #spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#b71c1a;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@-webkit-keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}#print-content{display:none}.action-button{max-height:1.7rem;margin-left:0.4rem;margin-right:0.4rem}.action-button:hover{background:#e8e8e8}.vcenter-container{width:100%;height:100%;display:table}.vcenter-container .vcenter{vertical-align:middle;display:table-cell;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.max-width{width:100%}input,button{letter-spacing:1px !important}.no-padding{padding:0;border:0}.center{text-align:center}@media print{nav,.mainContainer,footer,#styles{display:none !important}#print-content{display:block !important}}.overflow-y-auto{overflow-y:auto !important}.row.no-after:after{content:initial}.margin-bottom{margin-bottom:1rem}@media print, screen and (min-width: 25em){.margin-bottom{margin-bottom:2rem}}@media print, screen and (min-width: 40em){.margin-bottom{margin-bottom:3rem}}@media print, screen and (min-width: 64em){.margin-bottom{margin-bottom:4rem}}@media screen and (min-width: 75em){.margin-bottom{margin-bottom:5rem}}.font-small{font-size:0.7em}.border-bottom{border-bottom:1px solid #cacaca}.border-right{border-right:1px solid #cacaca}.border-left{border-left:1px solid #cacaca}img.logo{vertical-align:inherit;display:inline-block;height:auto;max-width:1.1rem;margin-right:2px}.align-center{text-align:center}hr.separator{margin:1rem 0}.button-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.button-line .button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-left:1px;margin-right:1px;padding:0.5rem 0.77rem}@media print, screen and (max-width: 24.99875em){.small-small{font-size:small}}select{border:0;padding:0.3rem 0.3rem}.hidden{display:none}.no-transition{-webkit-transition:none !important;transition:none !important}img.action-image{max-height:1.4rem;cursor:pointer}img.back-button{max-height:0.6rem;margin-right:0.2rem;cursor:pointer;vertical-align:inherit}.no-margin-bottom{margin-bottom:0}.settings-container{border:1px solid black;border-radius:2px;padding:0.3rem}@media print, screen and (min-width: 40em){.settings-container #settings-fragments-container{border-left:1px solid #cacaca}}.settings-container #settings-fragments-container #settings-fragments>*{display:none}.settings-container #settings-fragments-container #settings-fragments>*.active{display:block}.switch{position:relative;display:inline-block;height:initial}@media print, screen and (max-width: 24.99875em){.switch{font-size:0.6em}}@media print, screen and (max-width: 39.99875em){.switch{font-size:0.7em}}.switch input{display:none}.switch input:checked+.slider:before{-webkit-transform:translateX(1.5em);-ms-transform:translateX(1.5em);transform:translateX(1.5em)}.switch .slider{display:inline-block;position:relative;cursor:pointer;width:3em;height:1.5em;border-radius:1.5em;background-color:#ccc;-webkit-transition:.4s;transition:.4s;margin-bottom:0;margin-top:0}.switch .slider:before{position:absolute;content:"";height:1.1em;width:1.1em;left:0.15em;bottom:0.15em;background-color:white;-webkit-transition:.4s;transition:.4s;border-radius:50%}.switch img,.switch svg{width:1.4em;display:inline;vertical-align:initial}.switch img path,.switch svg path{stroke-color:inherit}label{font-size:1em !important}.setting-row:not(.hidden){line-height:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0.5rem 0.4rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;cursor:pointer;background:rgba(195,195,195,0.13)}.setting-row:not(.hidden)>*{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.setting-row:not(.hidden) input[type=checkbox]{margin:0}.zf-green{color:#68b604}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:left}input[type=checkBox].form-control{height:24px;height:1.5rem;width:100%}[type=submit]{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:39px;height:2.4375rem;padding:8px;padding:.5rem;border:1px solid #cacaca;margin:0 0 16px;margin:0 0 1rem;font-family:inherit;font-size:16px;font-size:1rem;color:#0a0a0a;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);border-radius:0;-webkit-transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:box-shadow .5s, border-color .25s ease-in-out;transition:box-shadow .5s, border-color .25s ease-in-out, -webkit-box-shadow .5s;-webkit-appearance:none;-moz-appearance:none}form ul li{color:red;font-size:12.8px;font-size:.8rem}.button-dropdown:after{border-color:#000 transparent transparent;border-width:.4em;border-style:solid;content:"";position:absolute;top:.4em;display:block;height:0;width:0;right:1em}.button-dropdown{position:relative;display:block;padding-right:2em}.button-dropdown.open:after{border-color:transparent transparent #000;top:0}a.ui-datepicker-next,a.ui-datepicker-prev{height:100% !important}div.container a.navbar-brand>img{display:inline;margin-right:4px}ul.menu.plain li.active a{background-color:#ededed;color:#000}ul.menu.plain li a{color:#000}ul.menu.plain li a:hover{color:#525252}ul.submenu{border-top:1px solid #bcbcbc;border-bottom:1px solid #bcbcbc;margin-left:10px}#cookie-compliance{line-height:1.2;font-size:0.8rem;width:100%;margin:0 0;padding:0.3rem 0}#cookie-compliance #close-cookie-msg{float:right;margin-bottom:0;margin-right:3px;padding:0.4rem 0.8rem}.menu-container .button{text-align:center;width:100%}.height-5{height:5%}.max-height-5{max-height:5%}.width-5{width:5%}.max-width-5{max-width:5%}.height-10{height:10%}.max-height-10{max-height:10%}.width-10{width:10%}.max-width-10{max-width:10%}.height-15{height:15%}.max-height-15{max-height:15%}.width-15{width:15%}.max-width-15{max-width:15%}.height-20{height:20%}.max-height-20{max-height:20%}.width-20{width:20%}.max-width-20{max-width:20%}.height-25{height:25%}.max-height-25{max-height:25%}.width-25{width:25%}.max-width-25{max-width:25%}.height-30{height:30%}.max-height-30{max-height:30%}.width-30{width:30%}.max-width-30{max-width:30%}.height-35{height:35%}.max-height-35{max-height:35%}.width-35{width:35%}.max-width-35{max-width:35%}.height-40{height:40%}.max-height-40{max-height:40%}.width-40{width:40%}.max-width-40{max-width:40%}.height-45{height:45%}.max-height-45{max-height:45%}.width-45{width:45%}.max-width-45{max-width:45%}.height-50{height:50%}.max-height-50{max-height:50%}.width-50{width:50%}.max-width-50{max-width:50%}.height-55{height:55%}.max-height-55{max-height:55%}.width-55{width:55%}.max-width-55{max-width:55%}.height-60{height:60%}.max-height-60{max-height:60%}.width-60{width:60%}.max-width-60{max-width:60%}.height-65{height:65%}.max-height-65{max-height:65%}.width-65{width:65%}.max-width-65{max-width:65%}.height-70{height:70%}.max-height-70{max-height:70%}.width-70{width:70%}.max-width-70{max-width:70%}.height-75{height:75%}.max-height-75{max-height:75%}.width-75{width:75%}.max-width-75{max-width:75%}.height-80{height:80%}.max-height-80{max-height:80%}.width-80{width:80%}.max-width-80{max-width:80%}.height-85{height:85%}.max-height-85{max-height:85%}.width-85{width:85%}.max-width-85{max-width:85%}.height-90{height:90%}.max-height-90{max-height:90%}.width-90{width:90%}.max-width-90{max-width:90%}.height-95{height:95%}.max-height-95{max-height:95%}.width-95{width:95%}.max-width-95{max-width:95%}.height-100{height:100%}.max-height-100{max-height:100%}.width-100{width:100%}.max-width-100{max-width:100%}.text-right{text-align:right}*{-webkit-transition:.25s ease-out, color .25s ease-out;transition:.25s ease-out, color .25s ease-out}body.red{background:#fff;color:#000}body.red #cookie-compliance{background-color:#870015;color:#fff}body.red #cookie-compliance a.link{color:#ff3d00;border-bottom-color:#ff3d00}body.red #cookie-compliance a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red a.link{text-decoration:none;color:#ff3d00;border-bottom:none}body.red a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red .loader #spinner{stroke:#b71c1a}body.red nav.top-bar{color:#fff;background:red}body.red .top-bar ul{background:red !important}body.red .top-bar ul a{color:#fff}body.red button.button,body.red a.button{background-color:red}body.red button.button.disabled,body.red button.button.disabled:hover,body.red button.button.disabled:focus,body.red button.button:hover,body.red a.button.disabled,body.red a.button.disabled:hover,body.red a.button.disabled:focus,body.red a.button:hover{background-color:red}body.red .switch input:checked+.slider{background-color:red}body.red .switch input:focus+.slider{-webkit-box-shadow:0 0 1px red;box-shadow:0 0 1px red}body.red label{color:#000}body.red .background .modal{background-color:#fefefe}body.red svg .fill-color,body.red svg.fill-color{fill:currentColor}body.red svg .fill-background,body.red svg.fill-background{fill:#fefefe}body.red label [type='text'],body.red label [type='password'],body.red label [type='date'],body.red label [type='datetime'],body.red label [type='datetime-local'],body.red label [type='month'],body.red label [type='week'],body.red label [type='email'],body.red label [type='number'],body.red label [type='search'],body.red label [type='tel'],body.red label [type='time'],body.red label [type='url'],body.red label [type='color'],body.red label textarea,body.red label input[type=text],body.red label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.red label [type='text']:focus,body.red label [type='password']:focus,body.red label [type='date']:focus,body.red label [type='datetime']:focus,body.red label [type='datetime-local']:focus,body.red label [type='month']:focus,body.red label [type='week']:focus,body.red label [type='email']:focus,body.red label [type='number']:focus,body.red label [type='search']:focus,body.red label [type='tel']:focus,body.red label [type='time']:focus,body.red label [type='url']:focus,body.red label [type='color']:focus,body.red label textarea:focus,body.red label input[type=text]:focus,body.red label input:not([type]):focus{border-bottom:solid #000}body.red label [type='text']:focus ~ span,body.red label [type='text'].notEmpty:not(:focus) ~ span,body.red label [type='password']:focus ~ span,body.red label [type='password'].notEmpty:not(:focus) ~ span,body.red label [type='date']:focus ~ span,body.red label [type='date'].notEmpty:not(:focus) ~ span,body.red label [type='datetime']:focus ~ span,body.red label [type='datetime'].notEmpty:not(:focus) ~ span,body.red label [type='datetime-local']:focus ~ span,body.red label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.red label [type='month']:focus ~ span,body.red label [type='month'].notEmpty:not(:focus) ~ span,body.red label [type='week']:focus ~ span,body.red label [type='week'].notEmpty:not(:focus) ~ span,body.red label [type='email']:focus ~ span,body.red label [type='email'].notEmpty:not(:focus) ~ span,body.red label [type='number']:focus ~ span,body.red label [type='number'].notEmpty:not(:focus) ~ span,body.red label [type='search']:focus ~ span,body.red label [type='search'].notEmpty:not(:focus) ~ span,body.red label [type='tel']:focus ~ span,body.red label [type='tel'].notEmpty:not(:focus) ~ span,body.red label [type='time']:focus ~ span,body.red label [type='time'].notEmpty:not(:focus) ~ span,body.red label [type='url']:focus ~ span,body.red label [type='url'].notEmpty:not(:focus) ~ span,body.red label [type='color']:focus ~ span,body.red label [type='color'].notEmpty:not(:focus) ~ span,body.red label textarea:focus ~ span,body.red label textarea.notEmpty:not(:focus) ~ span,body.red label input[type=text]:focus ~ span,body.red label input[type=text].notEmpty:not(:focus) ~ span,body.red label input:not([type]):focus ~ span,body.red label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.red label [type='text'] ~ span,body.red label [type='password'] ~ span,body.red label [type='date'] ~ span,body.red label [type='datetime'] ~ span,body.red label [type='datetime-local'] ~ span,body.red label [type='month'] ~ span,body.red label [type='week'] ~ span,body.red label [type='email'] ~ span,body.red label [type='number'] ~ span,body.red label [type='search'] ~ span,body.red label [type='tel'] ~ span,body.red label [type='time'] ~ span,body.red label [type='url'] ~ span,body.red label [type='color'] ~ span,body.red label textarea ~ span,body.red label input[type=text] ~ span,body.red label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.red label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.red input.notEmpty:invalid{background-color:rgba(255,0,0,0.65)}body.blue{background:#fff;color:#000}body.blue #cookie-compliance{background-color:#1a3062;color:#fff}body.blue #cookie-compliance a.link{color:#546cfe;border-bottom-color:#546cfe}body.blue #cookie-compliance a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue a.link{text-decoration:none;color:#546cfe;border-bottom:none}body.blue a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue .loader #spinner{stroke:#673AB7}body.blue nav.top-bar{color:#fff;background:#2c58ae}body.blue .top-bar ul{background:#2c58ae !important}body.blue .top-bar ul a{color:#fff}body.blue button.button,body.blue a.button{background-color:#2c58ae}body.blue button.button.disabled,body.blue button.button.disabled:hover,body.blue button.button.disabled:focus,body.blue button.button:hover,body.blue a.button.disabled,body.blue a.button.disabled:hover,body.blue a.button.disabled:focus,body.blue a.button:hover{background-color:#2c58ae}body.blue .switch input:checked+.slider{background-color:#2c58ae}body.blue .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #2c58ae;box-shadow:0 0 1px #2c58ae}body.blue label{color:#000}body.blue .background .modal{background-color:#fefefe}body.blue svg .fill-color,body.blue svg.fill-color{fill:currentColor}body.blue svg .fill-background,body.blue svg.fill-background{fill:#fefefe}body.blue label [type='text'],body.blue label [type='password'],body.blue label [type='date'],body.blue label [type='datetime'],body.blue label [type='datetime-local'],body.blue label [type='month'],body.blue label [type='week'],body.blue label [type='email'],body.blue label [type='number'],body.blue label [type='search'],body.blue label [type='tel'],body.blue label [type='time'],body.blue label [type='url'],body.blue label [type='color'],body.blue label textarea,body.blue label input[type=text],body.blue label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.blue label [type='text']:focus,body.blue label [type='password']:focus,body.blue label [type='date']:focus,body.blue label [type='datetime']:focus,body.blue label [type='datetime-local']:focus,body.blue label [type='month']:focus,body.blue label [type='week']:focus,body.blue label [type='email']:focus,body.blue label [type='number']:focus,body.blue label [type='search']:focus,body.blue label [type='tel']:focus,body.blue label [type='time']:focus,body.blue label [type='url']:focus,body.blue label [type='color']:focus,body.blue label textarea:focus,body.blue label input[type=text]:focus,body.blue label input:not([type]):focus{border-bottom:solid #000}body.blue label [type='text']:focus ~ span,body.blue label [type='text'].notEmpty:not(:focus) ~ span,body.blue label [type='password']:focus ~ span,body.blue label [type='password'].notEmpty:not(:focus) ~ span,body.blue label [type='date']:focus ~ span,body.blue label [type='date'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime']:focus ~ span,body.blue label [type='datetime'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime-local']:focus ~ span,body.blue label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.blue label [type='month']:focus ~ span,body.blue label [type='month'].notEmpty:not(:focus) ~ span,body.blue label [type='week']:focus ~ span,body.blue label [type='week'].notEmpty:not(:focus) ~ span,body.blue label [type='email']:focus ~ span,body.blue label [type='email'].notEmpty:not(:focus) ~ span,body.blue label [type='number']:focus ~ span,body.blue label [type='number'].notEmpty:not(:focus) ~ span,body.blue label [type='search']:focus ~ span,body.blue label [type='search'].notEmpty:not(:focus) ~ span,body.blue label [type='tel']:focus ~ span,body.blue label [type='tel'].notEmpty:not(:focus) ~ span,body.blue label [type='time']:focus ~ span,body.blue label [type='time'].notEmpty:not(:focus) ~ span,body.blue label [type='url']:focus ~ span,body.blue label [type='url'].notEmpty:not(:focus) ~ span,body.blue label [type='color']:focus ~ span,body.blue label [type='color'].notEmpty:not(:focus) ~ span,body.blue label textarea:focus ~ span,body.blue label textarea.notEmpty:not(:focus) ~ span,body.blue label input[type=text]:focus ~ span,body.blue label input[type=text].notEmpty:not(:focus) ~ span,body.blue label input:not([type]):focus ~ span,body.blue label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.blue label [type='text'] ~ span,body.blue label [type='password'] ~ span,body.blue label [type='date'] ~ span,body.blue label [type='datetime'] ~ span,body.blue label [type='datetime-local'] ~ span,body.blue label [type='month'] ~ span,body.blue label [type='week'] ~ span,body.blue label [type='email'] ~ span,body.blue label [type='number'] ~ span,body.blue label [type='search'] ~ span,body.blue label [type='tel'] ~ span,body.blue label [type='time'] ~ span,body.blue label [type='url'] ~ span,body.blue label [type='color'] ~ span,body.blue label textarea ~ span,body.blue label input[type=text] ~ span,body.blue label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.blue label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.blue input.notEmpty:invalid{background-color:rgba(44,88,174,0.65)}body.green{background:#fff;color:#000}body.green #cookie-compliance{background-color:#003613;color:#fff}body.green #cookie-compliance a.link{color:#009829;border-bottom-color:#009829}body.green #cookie-compliance a.link:hover{color:#009829;border-bottom-color:#009829}body.green a.link{text-decoration:none;color:#009829;border-bottom:none}body.green a.link:hover{color:#009829;border-bottom-color:#009829}body.green .loader #spinner{stroke:green}body.green nav.top-bar{color:#fff;background:green}body.green .top-bar ul{background:green !important}body.green .top-bar ul a{color:#fff}body.green button.button,body.green a.button{background-color:green}body.green button.button.disabled,body.green button.button.disabled:hover,body.green button.button.disabled:focus,body.green button.button:hover,body.green a.button.disabled,body.green a.button.disabled:hover,body.green a.button.disabled:focus,body.green a.button:hover{background-color:green}body.green .switch input:checked+.slider{background-color:green}body.green .switch input:focus+.slider{-webkit-box-shadow:0 0 1px green;box-shadow:0 0 1px green}body.green label{color:#000}body.green .background .modal{background-color:#fefefe}body.green svg .fill-color,body.green svg.fill-color{fill:currentColor}body.green svg .fill-background,body.green svg.fill-background{fill:#fefefe}body.green label [type='text'],body.green label [type='password'],body.green label [type='date'],body.green label [type='datetime'],body.green label [type='datetime-local'],body.green label [type='month'],body.green label [type='week'],body.green label [type='email'],body.green label [type='number'],body.green label [type='search'],body.green label [type='tel'],body.green label [type='time'],body.green label [type='url'],body.green label [type='color'],body.green label textarea,body.green label input[type=text],body.green label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.green label [type='text']:focus,body.green label [type='password']:focus,body.green label [type='date']:focus,body.green label [type='datetime']:focus,body.green label [type='datetime-local']:focus,body.green label [type='month']:focus,body.green label [type='week']:focus,body.green label [type='email']:focus,body.green label [type='number']:focus,body.green label [type='search']:focus,body.green label [type='tel']:focus,body.green label [type='time']:focus,body.green label [type='url']:focus,body.green label [type='color']:focus,body.green label textarea:focus,body.green label input[type=text]:focus,body.green label input:not([type]):focus{border-bottom:solid #000}body.green label [type='text']:focus ~ span,body.green label [type='text'].notEmpty:not(:focus) ~ span,body.green label [type='password']:focus ~ span,body.green label [type='password'].notEmpty:not(:focus) ~ span,body.green label [type='date']:focus ~ span,body.green label [type='date'].notEmpty:not(:focus) ~ span,body.green label [type='datetime']:focus ~ span,body.green label [type='datetime'].notEmpty:not(:focus) ~ span,body.green label [type='datetime-local']:focus ~ span,body.green label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.green label [type='month']:focus ~ span,body.green label [type='month'].notEmpty:not(:focus) ~ span,body.green label [type='week']:focus ~ span,body.green label [type='week'].notEmpty:not(:focus) ~ span,body.green label [type='email']:focus ~ span,body.green label [type='email'].notEmpty:not(:focus) ~ span,body.green label [type='number']:focus ~ span,body.green label [type='number'].notEmpty:not(:focus) ~ span,body.green label [type='search']:focus ~ span,body.green label [type='search'].notEmpty:not(:focus) ~ span,body.green label [type='tel']:focus ~ span,body.green label [type='tel'].notEmpty:not(:focus) ~ span,body.green label [type='time']:focus ~ span,body.green label [type='time'].notEmpty:not(:focus) ~ span,body.green label [type='url']:focus ~ span,body.green label [type='url'].notEmpty:not(:focus) ~ span,body.green label [type='color']:focus ~ span,body.green label [type='color'].notEmpty:not(:focus) ~ span,body.green label textarea:focus ~ span,body.green label textarea.notEmpty:not(:focus) ~ span,body.green label input[type=text]:focus ~ span,body.green label input[type=text].notEmpty:not(:focus) ~ span,body.green label input:not([type]):focus ~ span,body.green label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.green label [type='text'] ~ span,body.green label [type='password'] ~ span,body.green label [type='date'] ~ span,body.green label [type='datetime'] ~ span,body.green label [type='datetime-local'] ~ span,body.green label [type='month'] ~ span,body.green label [type='week'] ~ span,body.green label [type='email'] ~ span,body.green label [type='number'] ~ span,body.green label [type='search'] ~ span,body.green label [type='tel'] ~ span,body.green label [type='time'] ~ span,body.green label [type='url'] ~ span,body.green label [type='color'] ~ span,body.green label textarea ~ span,body.green label input[type=text] ~ span,body.green label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.green label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.green input.notEmpty:invalid{background-color:rgba(0,128,0,0.65)}body.pink{background:#fff;color:#000}body.pink #cookie-compliance{background-color:#70374a;color:#fff}body.pink #cookie-compliance a.link{color:#fe64af;border-bottom-color:#fe64af}body.pink #cookie-compliance a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink a.link{text-decoration:none;color:#fe64af;border-bottom:none}body.pink a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink .loader #spinner{stroke:hotpink}body.pink nav.top-bar{color:#fff;background:hotpink}body.pink .top-bar ul{background:hotpink !important}body.pink .top-bar ul a{color:#fff}body.pink button.button,body.pink a.button{background-color:hotpink}body.pink button.button.disabled,body.pink button.button.disabled:hover,body.pink button.button.disabled:focus,body.pink button.button:hover,body.pink a.button.disabled,body.pink a.button.disabled:hover,body.pink a.button.disabled:focus,body.pink a.button:hover{background-color:hotpink}body.pink .switch input:checked+.slider{background-color:hotpink}body.pink .switch input:focus+.slider{-webkit-box-shadow:0 0 1px hotpink;box-shadow:0 0 1px hotpink}body.pink label{color:#000}body.pink .background .modal{background-color:#fefefe}body.pink svg .fill-color,body.pink svg.fill-color{fill:currentColor}body.pink svg .fill-background,body.pink svg.fill-background{fill:#fefefe}body.pink label [type='text'],body.pink label [type='password'],body.pink label [type='date'],body.pink label [type='datetime'],body.pink label [type='datetime-local'],body.pink label [type='month'],body.pink label [type='week'],body.pink label [type='email'],body.pink label [type='number'],body.pink label [type='search'],body.pink label [type='tel'],body.pink label [type='time'],body.pink label [type='url'],body.pink label [type='color'],body.pink label textarea,body.pink label input[type=text],body.pink label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.pink label [type='text']:focus,body.pink label [type='password']:focus,body.pink label [type='date']:focus,body.pink label [type='datetime']:focus,body.pink label [type='datetime-local']:focus,body.pink label [type='month']:focus,body.pink label [type='week']:focus,body.pink label [type='email']:focus,body.pink label [type='number']:focus,body.pink label [type='search']:focus,body.pink label [type='tel']:focus,body.pink label [type='time']:focus,body.pink label [type='url']:focus,body.pink label [type='color']:focus,body.pink label textarea:focus,body.pink label input[type=text]:focus,body.pink label input:not([type]):focus{border-bottom:solid #000}body.pink label [type='text']:focus ~ span,body.pink label [type='text'].notEmpty:not(:focus) ~ span,body.pink label [type='password']:focus ~ span,body.pink label [type='password'].notEmpty:not(:focus) ~ span,body.pink label [type='date']:focus ~ span,body.pink label [type='date'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime']:focus ~ span,body.pink label [type='datetime'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime-local']:focus ~ span,body.pink label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.pink label [type='month']:focus ~ span,body.pink label [type='month'].notEmpty:not(:focus) ~ span,body.pink label [type='week']:focus ~ span,body.pink label [type='week'].notEmpty:not(:focus) ~ span,body.pink label [type='email']:focus ~ span,body.pink label [type='email'].notEmpty:not(:focus) ~ span,body.pink label [type='number']:focus ~ span,body.pink label [type='number'].notEmpty:not(:focus) ~ span,body.pink label [type='search']:focus ~ span,body.pink label [type='search'].notEmpty:not(:focus) ~ span,body.pink label [type='tel']:focus ~ span,body.pink label [type='tel'].notEmpty:not(:focus) ~ span,body.pink label [type='time']:focus ~ span,body.pink label [type='time'].notEmpty:not(:focus) ~ span,body.pink label [type='url']:focus ~ span,body.pink label [type='url'].notEmpty:not(:focus) ~ span,body.pink label [type='color']:focus ~ span,body.pink label [type='color'].notEmpty:not(:focus) ~ span,body.pink label textarea:focus ~ span,body.pink label textarea.notEmpty:not(:focus) ~ span,body.pink label input[type=text]:focus ~ span,body.pink label input[type=text].notEmpty:not(:focus) ~ span,body.pink label input:not([type]):focus ~ span,body.pink label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.pink label [type='text'] ~ span,body.pink label [type='password'] ~ span,body.pink label [type='date'] ~ span,body.pink label [type='datetime'] ~ span,body.pink label [type='datetime-local'] ~ span,body.pink label [type='month'] ~ span,body.pink label [type='week'] ~ span,body.pink label [type='email'] ~ span,body.pink label [type='number'] ~ span,body.pink label [type='search'] ~ span,body.pink label [type='tel'] ~ span,body.pink label [type='time'] ~ span,body.pink label [type='url'] ~ span,body.pink label [type='color'] ~ span,body.pink label textarea ~ span,body.pink label input[type=text] ~ span,body.pink label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.pink label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.pink input.notEmpty:invalid{background-color:rgba(255,105,180,0.65)}body.black{background:#fff;color:#000}body.black #cookie-compliance{background-color:#353535;color:#fff}body.black #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.black #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.black a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.black a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.black .loader #spinner{stroke:#000}body.black nav.top-bar{color:#fff;background:#000}body.black .top-bar ul{background:#000 !important}body.black .top-bar ul a{color:#fff}body.black button.button,body.black a.button{background-color:#000}body.black button.button.disabled,body.black button.button.disabled:hover,body.black button.button.disabled:focus,body.black button.button:hover,body.black a.button.disabled,body.black a.button.disabled:hover,body.black a.button.disabled:focus,body.black a.button:hover{background-color:#000}body.black .switch input:checked+.slider{background-color:#000}body.black .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.black label{color:#000}body.black .background .modal{background-color:#fefefe}body.black svg .fill-color,body.black svg.fill-color{fill:currentColor}body.black svg .fill-background,body.black svg.fill-background{fill:#fefefe}body.black label [type='text'],body.black label [type='password'],body.black label [type='date'],body.black label [type='datetime'],body.black label [type='datetime-local'],body.black label [type='month'],body.black label [type='week'],body.black label [type='email'],body.black label [type='number'],body.black label [type='search'],body.black label [type='tel'],body.black label [type='time'],body.black label [type='url'],body.black label [type='color'],body.black label textarea,body.black label input[type=text],body.black label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.black label [type='text']:focus,body.black label [type='password']:focus,body.black label [type='date']:focus,body.black label [type='datetime']:focus,body.black label [type='datetime-local']:focus,body.black label [type='month']:focus,body.black label [type='week']:focus,body.black label [type='email']:focus,body.black label [type='number']:focus,body.black label [type='search']:focus,body.black label [type='tel']:focus,body.black label [type='time']:focus,body.black label [type='url']:focus,body.black label [type='color']:focus,body.black label textarea:focus,body.black label input[type=text]:focus,body.black label input:not([type]):focus{border-bottom:solid #000}body.black label [type='text']:focus ~ span,body.black label [type='text'].notEmpty:not(:focus) ~ span,body.black label [type='password']:focus ~ span,body.black label [type='password'].notEmpty:not(:focus) ~ span,body.black label [type='date']:focus ~ span,body.black label [type='date'].notEmpty:not(:focus) ~ span,body.black label [type='datetime']:focus ~ span,body.black label [type='datetime'].notEmpty:not(:focus) ~ span,body.black label [type='datetime-local']:focus ~ span,body.black label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.black label [type='month']:focus ~ span,body.black label [type='month'].notEmpty:not(:focus) ~ span,body.black label [type='week']:focus ~ span,body.black label [type='week'].notEmpty:not(:focus) ~ span,body.black label [type='email']:focus ~ span,body.black label [type='email'].notEmpty:not(:focus) ~ span,body.black label [type='number']:focus ~ span,body.black label [type='number'].notEmpty:not(:focus) ~ span,body.black label [type='search']:focus ~ span,body.black label [type='search'].notEmpty:not(:focus) ~ span,body.black label [type='tel']:focus ~ span,body.black label [type='tel'].notEmpty:not(:focus) ~ span,body.black label [type='time']:focus ~ span,body.black label [type='time'].notEmpty:not(:focus) ~ span,body.black label [type='url']:focus ~ span,body.black label [type='url'].notEmpty:not(:focus) ~ span,body.black label [type='color']:focus ~ span,body.black label [type='color'].notEmpty:not(:focus) ~ span,body.black label textarea:focus ~ span,body.black label textarea.notEmpty:not(:focus) ~ span,body.black label input[type=text]:focus ~ span,body.black label input[type=text].notEmpty:not(:focus) ~ span,body.black label input:not([type]):focus ~ span,body.black label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.black label [type='text'] ~ span,body.black label [type='password'] ~ span,body.black label [type='date'] ~ span,body.black label [type='datetime'] ~ span,body.black label [type='datetime-local'] ~ span,body.black label [type='month'] ~ span,body.black label [type='week'] ~ span,body.black label [type='email'] ~ span,body.black label [type='number'] ~ span,body.black label [type='search'] ~ span,body.black label [type='tel'] ~ span,body.black label [type='time'] ~ span,body.black label [type='url'] ~ span,body.black label [type='color'] ~ span,body.black label textarea ~ span,body.black label input[type=text] ~ span,body.black label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.black label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.black input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.default{background:rgba(0,0,0,0);color:#000}body.default #cookie-compliance{background-color:#353535;color:#fff}body.default #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.default #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.default a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.default a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.default .loader #spinner{stroke:#000}body.default nav.top-bar{color:#fff;background:#000}body.default .top-bar ul{background:#000 !important}body.default .top-bar ul a{color:#fff}body.default button.button,body.default a.button{background-color:#000}body.default button.button.disabled,body.default button.button.disabled:hover,body.default button.button.disabled:focus,body.default button.button:hover,body.default a.button.disabled,body.default a.button.disabled:hover,body.default a.button.disabled:focus,body.default a.button:hover{background-color:#000}body.default .switch input:checked+.slider{background-color:#000}body.default .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.default label{color:#000}body.default .background .modal{background-color:#fefefe}body.default svg .fill-color,body.default svg.fill-color{fill:currentColor}body.default svg .fill-background,body.default svg.fill-background{fill:#fefefe}body.default label [type='text'],body.default label [type='password'],body.default label [type='date'],body.default label [type='datetime'],body.default label [type='datetime-local'],body.default label [type='month'],body.default label [type='week'],body.default label [type='email'],body.default label [type='number'],body.default label [type='search'],body.default label [type='tel'],body.default label [type='time'],body.default label [type='url'],body.default label [type='color'],body.default label textarea,body.default label input[type=text],body.default label input:not([type]){border-bottom:solid #000;background:rgba(0,0,0,0);color:#000}body.default label [type='text']:focus,body.default label [type='password']:focus,body.default label [type='date']:focus,body.default label [type='datetime']:focus,body.default label [type='datetime-local']:focus,body.default label [type='month']:focus,body.default label [type='week']:focus,body.default label [type='email']:focus,body.default label [type='number']:focus,body.default label [type='search']:focus,body.default label [type='tel']:focus,body.default label [type='time']:focus,body.default label [type='url']:focus,body.default label [type='color']:focus,body.default label textarea:focus,body.default label input[type=text]:focus,body.default label input:not([type]):focus{border-bottom:solid #000}body.default label [type='text']:focus ~ span,body.default label [type='text'].notEmpty:not(:focus) ~ span,body.default label [type='password']:focus ~ span,body.default label [type='password'].notEmpty:not(:focus) ~ span,body.default label [type='date']:focus ~ span,body.default label [type='date'].notEmpty:not(:focus) ~ span,body.default label [type='datetime']:focus ~ span,body.default label [type='datetime'].notEmpty:not(:focus) ~ span,body.default label [type='datetime-local']:focus ~ span,body.default label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.default label [type='month']:focus ~ span,body.default label [type='month'].notEmpty:not(:focus) ~ span,body.default label [type='week']:focus ~ span,body.default label [type='week'].notEmpty:not(:focus) ~ span,body.default label [type='email']:focus ~ span,body.default label [type='email'].notEmpty:not(:focus) ~ span,body.default label [type='number']:focus ~ span,body.default label [type='number'].notEmpty:not(:focus) ~ span,body.default label [type='search']:focus ~ span,body.default label [type='search'].notEmpty:not(:focus) ~ span,body.default label [type='tel']:focus ~ span,body.default label [type='tel'].notEmpty:not(:focus) ~ span,body.default label [type='time']:focus ~ span,body.default label [type='time'].notEmpty:not(:focus) ~ span,body.default label [type='url']:focus ~ span,body.default label [type='url'].notEmpty:not(:focus) ~ span,body.default label [type='color']:focus ~ span,body.default label [type='color'].notEmpty:not(:focus) ~ span,body.default label textarea:focus ~ span,body.default label textarea.notEmpty:not(:focus) ~ span,body.default label input[type=text]:focus ~ span,body.default label input[type=text].notEmpty:not(:focus) ~ span,body.default label input:not([type]):focus ~ span,body.default label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.default label [type='text'] ~ span,body.default label [type='password'] ~ span,body.default label [type='date'] ~ span,body.default label [type='datetime'] ~ span,body.default label [type='datetime-local'] ~ span,body.default label [type='month'] ~ span,body.default label [type='week'] ~ span,body.default label [type='email'] ~ span,body.default label [type='number'] ~ span,body.default label [type='search'] ~ span,body.default label [type='tel'] ~ span,body.default label [type='time'] ~ span,body.default label [type='url'] ~ span,body.default label [type='color'] ~ span,body.default label textarea ~ span,body.default label input[type=text] ~ span,body.default label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.default label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.default input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.dark{background:#000;color:#fff}body.dark #cookie-compliance{background-color:#4b4b4b;color:#fff}body.dark #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.dark #cookie-compliance a.link:hover{color:#fff;border-bottom-color:#fff}body.dark a.link{text-decoration:none;color:#fff;border-bottom:1px solid #fff}body.dark a.link:hover{color:#fff;border-bottom-color:#fff}body.dark .loader #spinner{stroke:#fff}body.dark nav.top-bar{color:#fff;background:#373737}body.dark .top-bar ul{background:#373737 !important}body.dark .top-bar ul a{color:#fff}body.dark button.button,body.dark a.button{background-color:#373737}body.dark button.button.disabled,body.dark button.button.disabled:hover,body.dark button.button.disabled:focus,body.dark button.button:hover,body.dark a.button.disabled,body.dark a.button.disabled:hover,body.dark a.button.disabled:focus,body.dark a.button:hover{background-color:#373737}body.dark .switch input:checked+.slider{background-color:#373737}body.dark .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #373737;box-shadow:0 0 1px #373737}body.dark label{color:#fff}body.dark .background .modal{background-color:#fefefe}body.dark svg .fill-color,body.dark svg.fill-color{fill:currentColor}body.dark svg .fill-background,body.dark svg.fill-background{fill:#fefefe}body.dark label [type='text'],body.dark label [type='password'],body.dark label [type='date'],body.dark label [type='datetime'],body.dark label [type='datetime-local'],body.dark label [type='month'],body.dark label [type='week'],body.dark label [type='email'],body.dark label [type='number'],body.dark label [type='search'],body.dark label [type='tel'],body.dark label [type='time'],body.dark label [type='url'],body.dark label [type='color'],body.dark label textarea,body.dark label input[type=text],body.dark label input:not([type]){border-bottom:solid #fff;background:#000;color:#fff}body.dark label [type='text']:focus,body.dark label [type='password']:focus,body.dark label [type='date']:focus,body.dark label [type='datetime']:focus,body.dark label [type='datetime-local']:focus,body.dark label [type='month']:focus,body.dark label [type='week']:focus,body.dark label [type='email']:focus,body.dark label [type='number']:focus,body.dark label [type='search']:focus,body.dark label [type='tel']:focus,body.dark label [type='time']:focus,body.dark label [type='url']:focus,body.dark label [type='color']:focus,body.dark label textarea:focus,body.dark label input[type=text]:focus,body.dark label input:not([type]):focus{border-bottom:solid #fff}body.dark label [type='text']:focus ~ span,body.dark label [type='text'].notEmpty:not(:focus) ~ span,body.dark label [type='password']:focus ~ span,body.dark label [type='password'].notEmpty:not(:focus) ~ span,body.dark label [type='date']:focus ~ span,body.dark label [type='date'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime']:focus ~ span,body.dark label [type='datetime'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime-local']:focus ~ span,body.dark label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.dark label [type='month']:focus ~ span,body.dark label [type='month'].notEmpty:not(:focus) ~ span,body.dark label [type='week']:focus ~ span,body.dark label [type='week'].notEmpty:not(:focus) ~ span,body.dark label [type='email']:focus ~ span,body.dark label [type='email'].notEmpty:not(:focus) ~ span,body.dark label [type='number']:focus ~ span,body.dark label [type='number'].notEmpty:not(:focus) ~ span,body.dark label [type='search']:focus ~ span,body.dark label [type='search'].notEmpty:not(:focus) ~ span,body.dark label [type='tel']:focus ~ span,body.dark label [type='tel'].notEmpty:not(:focus) ~ span,body.dark label [type='time']:focus ~ span,body.dark label [type='time'].notEmpty:not(:focus) ~ span,body.dark label [type='url']:focus ~ span,body.dark label [type='url'].notEmpty:not(:focus) ~ span,body.dark label [type='color']:focus ~ span,body.dark label [type='color'].notEmpty:not(:focus) ~ span,body.dark label textarea:focus ~ span,body.dark label textarea.notEmpty:not(:focus) ~ span,body.dark label input[type=text]:focus ~ span,body.dark label input[type=text].notEmpty:not(:focus) ~ span,body.dark label input:not([type]):focus ~ span,body.dark label input:not([type]).notEmpty:not(:focus) ~ span{color:#fff}body.dark label [type='text'] ~ span,body.dark label [type='password'] ~ span,body.dark label [type='date'] ~ span,body.dark label [type='datetime'] ~ span,body.dark label [type='datetime-local'] ~ span,body.dark label [type='month'] ~ span,body.dark label [type='week'] ~ span,body.dark label [type='email'] ~ span,body.dark label [type='number'] ~ span,body.dark label [type='search'] ~ span,body.dark label [type='tel'] ~ span,body.dark label [type='time'] ~ span,body.dark label [type='url'] ~ span,body.dark label [type='color'] ~ span,body.dark label textarea ~ span,body.dark label input[type=text] ~ span,body.dark label input:not([type]) ~ span{color:rgba(255,255,255,0.65)}body.dark label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.dark input.notEmpty:invalid{background-color:rgba(55,55,55,0.65)}@-webkit-keyframes tutorialPointer{0%{top:25%}100%{top:75%}}@keyframes tutorialPointer{0%{top:25%}100%{top:75%}}.tutorial-blanket{display:none;position:fixed;top:0;bottom:0;left:0;right:0;z-index:9001;background:rgba(55,55,55,0.51)}.tutorial .tutorial-blanket{display:block}.tutorial .tutorial-text{color:white;font-size:1.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:none !important;transition:none !important}.tutorial .tutorial-text *{-webkit-transition:none !important;transition:none !important}.tutorial.step-1 #level .segment-row{position:inherit}.tutorial.step-1 #level .segment-parent:nth-child(3),.tutorial.step-1 #level .segment-parent:nth-child(3).rotating{z-index:9900 !important}.tutorial.step-1 .tutorial-text .step-1{display:initial;z-index:9900 !important;position:relative}.tutorial.step-2 #level{z-index:9900 !important}.tutorial.step-2 .tutorial-text .step-2{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .tutorial-text .step-3{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .top-bar{z-index:9900 !important}.tutorial.step-3 .help-action{margin-top:0;padding-top:10px;position:relative;overflow:visible;margin-right:10px;-webkit-box-shadow:0 0 10px 5px #fff;box-shadow:0 0 10px 5px #fff}.tutorial.step-4 .tutorial-text .step-4{display:initial;z-index:9900 !important;position:relative}.tutorial.step-4 #level .segment-row{position:inherit}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating{z-index:9900 !important}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2 #tutorial-pointer,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}#tutorial-site{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#tutorial-site #tutorial-1,#tutorial-site #tutorial-2,#tutorial-site #tutorial-3{text-align:center;margin-top:0.7rem;margin-bottom:0.5rem}#tutorial-site #tutorial-2 .help-action{width:100%;margin-bottom:0.3rem}#tutorial-site #tutorial-3 .tutorial-wrapper{position:relative}#tutorial-site #tutorial-3 .tutorial-wrapper #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}body.red #tutorial-pointer{background:red}body.red #level-number-container.in-main-menu{background:#fff;border-color:#000}body.red .segment.segment-parent{border-color:#555}body.red .segment.segment-parent.layer-2{border-color:#000}body.red #site>:not(.won) .segment.locked{cursor:default;border-color:#870015;background-color:red !important}body.red #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.blue #tutorial-pointer{background:#2c58ae}body.blue #level-number-container.in-main-menu{background:#fff;border-color:#000}body.blue .segment.segment-parent{border-color:#555}body.blue .segment.segment-parent.layer-2{border-color:#000}body.blue #site>:not(.won) .segment.locked{cursor:default;border-color:#1a3062;background-color:#2c58ae !important}body.blue #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.green #tutorial-pointer{background:green}body.green #level-number-container.in-main-menu{background:#fff;border-color:#000}body.green .segment.segment-parent{border-color:#555}body.green .segment.segment-parent.layer-2{border-color:#000}body.green #site>:not(.won) .segment.locked{cursor:default;border-color:#003613;background-color:green !important}body.green #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.pink #tutorial-pointer{background:hotpink}body.pink #level-number-container.in-main-menu{background:#fff;border-color:#000}body.pink .segment.segment-parent{border-color:#555}body.pink .segment.segment-parent.layer-2{border-color:#000}body.pink #site>:not(.won) .segment.locked{cursor:default;border-color:#70374a;background-color:hotpink !important}body.pink #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.black #tutorial-pointer{background:#000}body.black #level-number-container.in-main-menu{background:#fff;border-color:#000}body.black .segment.segment-parent{border-color:#555}body.black .segment.segment-parent.layer-2{border-color:#000}body.black #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.default #tutorial-pointer{background:#000}body.default #level-number-container.in-main-menu{background:rgba(0,0,0,0);border-color:#000}body.default .segment.segment-parent{border-color:#555}body.default .segment.segment-parent.layer-2{border-color:#000}body.default #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.dark #tutorial-pointer{background:#373737}body.dark #level-number-container.in-main-menu{background:#000;border-color:#fff}body.dark .segment.segment-parent{border-color:#9b9b9b}body.dark .segment.segment-parent.layer-2{border-color:#fff}body.dark #site>:not(.won) .segment.locked{cursor:default;border-color:#4b4b4b;background-color:#373737 !important}body.dark #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#000}body.default{background:#0f0f49;color:white}body.default *{color:white}body.default #level-number-container.in-main-menu{background:#fff !important}body.default .segment.segment-parent:not(.layer-2){border-color:#005d07;background:rgba(109,255,127,0.2) !important}body.default #site>:not(.won) .segment.locked{background-color:transparent !important;border-color:#42ff4a !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.dark .switch input:checked+.slider{border-color:black}body.dark .switch .slider{border:solid 1px white;background-color:inherit;padding:1px;margin-bottom:0;margin-top:0}body.dark #site>:not(.won) .segment.locked.layer-2{border-color:#565656}body.dark .modal{background-color:#fefefe;border:1px solid white;border-radius:2px}body.black #site>:not(.won) .segment.locked{background-color:#9d9d9d !important;border-color:#6e6e6e !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.black #logo{border:1px solid grey;border-radius:50%}.no-transition{-webkit-transition:none !important;transition:none !important}.no-transition *{-webkit-transition:none !important;transition:none !important}nav.top-bar.title-bar{padding:0.3rem 0.6rem 0}#logo{max-width:2rem;-webkit-transition:none;transition:none}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.relative-level-number{position:relative}.relative-level-number #level-number-container{top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}#level-number-container,.level-counter{z-index:1;position:absolute;left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);border:3px solid white;border-radius:50%;display:table-cell;height:40px;width:40px;text-align:center;vertical-align:middle}#level-number-container.level-counter,.level-counter.level-counter{position:fixed !important;font-size:1.8rem}#level-number-container.level-counter.num-10,.level-counter.level-counter.num-10{font-size:1.3rem}#level-number-container.level-counter.num-100,.level-counter.level-counter.num-100{font-size:0.9rem}#level-number-container.level-counter.num-1000,.level-counter.level-counter.num-1000{font-size:0.65rem}#level-number-container.in-main-menu,.level-counter.in-main-menu{background:white;border-color:black;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container a,.level-counter a{width:initial !important}#level-number-container #level-number,#level-number-container a,.level-counter #level-number,.level-counter a{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-weight:bold}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}@media print, screen and (max-width: 24.99875em){.coin-counter{font-size:1rem}}.coin-counter :after{background-image:url(img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{line-height:1}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:20px;display:inline-block}@media print, screen and (min-width: 25em){#coin-container .coin{max-width:25px}}@media print, screen and (min-width: 40em){#coin-container .coin{max-width:30px}}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10 !important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;-webkit-transition:none;transition:none;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level *{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:initial;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-transition:none;transition:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:inherit;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none !important;animation:none !important;white-space:nowrap}.segment.segment-column{padding-top:4px}.segment.segment-column>.child-container>.segment{display:block;width:100%}.segment.segment-leaf{background-color:transparent !important;min-width:1em;padding:0.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:solid 1px #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:solid 3px #000000}#site>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.won #won-text{text-shadow:0 0.2rem 0.2rem #464646,0.6rem 0.8rem 0.4rem rgba(0,0,0,0.564706)}.text-right{text-align:right}#continue-button{margin-bottom:2px}@media print, screen and (max-width: 24.99875em){#continue-button{margin-bottom:0;padding:0.3em .6em}}@media print, screen and (max-width: 24.99875em){#play-button{margin-bottom:0.5rem}}#help-button{margin:0;padding:0.4em 0.4em;max-width:3em}@media print, screen and (max-width: 39.99875em){#help-button{padding:0.2em 0.2em;max-width:2em}}.line-height-1{line-height:1}body{-ms-scroll-chaining:none;overscroll-behavior:contain;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#site{overflow:visible}div.mainContainer{overflow-x:hidden}.clickable{cursor:pointer}#share-button{overflow:hidden}#share-button svg{cursor:pointer;max-width:1.5rem}svg{color:black}svg .fill-background{fill:white}@-webkit-keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}.jump-animation{-webkit-animation-name:jump-animation;animation-name:jump-animation;-webkit-animation-duration:0.4s;animation-duration:0.4s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.shake .leaf-element{-webkit-animation:shake 0.15s;animation:shake 0.15s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}nav.top-bar{padding:0;margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){nav.top-bar{margin-left:-.9375rem;margin-right:-.9375rem}}nav.top-bar.with-image .background-img{display:none}nav.top-bar .background-img{display:none}nav.top-bar>.grid-container{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar>.grid-container>.grid-padding-x{display:block;padding:0.5rem;margin:0;padding-right:0}nav.top-bar>.grid-container>.grid-padding-x>.small-12{padding:0}nav.top-bar ul>li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}nav.top-bar ul>li.level-counter{margin-top:0.2rem}body.theme-blue{background:#427081;color:#fff}body.theme-blue label{color:#fff}body.theme-blue .toast .message{background:#4d575a}body.theme-blue nav.top-bar,body.theme-blue nav.top-bar.with-image,body.theme-blue nav.top-bar.with-image.solid{background:#4d575a}body.theme-blue .button{background:#4d575a}body.theme-blue .switch input:checked+.slider{background:#d3e7eb}body.theme-blue #level-number-container{background:#427081}body.theme-blue svg{color:#000}body.theme-blue ul.menu li a{color:#fff}body.theme-blue a{color:#d3e7eb}body.theme-blue a.hidden-link{color:#fff}body.theme-blue #site>:not(.won) .segment.locked{background-color:#00000030}body.theme-blue #tutorial-pointer{background:#d3e7eb}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}html,body{min-height:100%;width:100%;height:100%;letter-spacing:1px;-ms-scroll-chaining:none;overscroll-behavior:none}a,a:hover{color:#ffca00}#site{position:relative;max-height:100%;max-width:100%;height:100%;width:100%}.right{float:right}.grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.overlay{left:0;top:0;right:0;bottom:0;background-color:rgba(192,192,192,0.5);-webkit-transform:none;-ms-transform:none;transform:none;z-index:10000}.loader.overlay svg{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small .spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader .spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#000;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.height-100{height:100%}.hidden{display:none}.vertical-middle{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.vertical-bottom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:end;-webkit-align-items:end;-ms-flex-align:end;align-items:end}.horizontal-center{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{width:100%}h1.inline{display:inline-block}h2.inline{display:inline-block}h3.inline{display:inline-block}h4.inline{display:inline-block}h5.inline{display:inline-block}h6.inline{display:inline-block}img.back-button{cursor:pointer;max-height:1.1rem;margin-right:0.2rem;margin-bottom:0.65rem}a.hidden-link{color:inherit}#main-content-container{overflow:auto;width:100%}#main-content-container>.grid-x{overflow:auto;margin-top:0.5rem;margin-bottom:0.5rem}#main-content-container #main-content{padding-top:0;padding-bottom:0} +@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:"small=0em&smedium=25em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;border-radius:0}.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:transparent;line-height:1;cursor:auto}[data-whatinput='mouse'] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block !important}.is-hidden{display:none !important}[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type='submit'],[type='button']{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type='search']{-webkit-box-sizing:border-box;box-sizing:border-box}::-webkit-input-placeholder{color:#cacaca}::-moz-placeholder{color:#cacaca}:-ms-input-placeholder{color:#cacaca}::-ms-input-placeholder{color:#cacaca}::placeholder{color:#cacaca}[type='file'],[type='checkbox'],[type='radio']{margin:0 0 1rem}[type='checkbox']+label,[type='radio']+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type='checkbox']+label[for],[type='radio']+label[for]{cursor:pointer}label>[type='checkbox'],label>[type='radio']{margin-right:.5rem}[type='file']{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:normal;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:1rem;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0 0 0 0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0 0 0 0}.input-group-label,.input-group-field,.input-group-button,.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}@media screen and (min-width: 0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}select:not([multiple]){padding-top:0;padding-bottom:0}.is-invalid-input:not(:focus){border-color:#cc4b37;background-color:#f9ecea}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-moz-placeholder{color:#cc4b37}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::placeholder{color:#cc4b37}.is-invalid-label{color:#cc4b37}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:bold;color:#cc4b37}.form-error.is-visible{display:block}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:80%;line-height:inherit}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;color:inherit;text-rendering:optimizeLegibility}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small{line-height:0;color:#cacaca}h1,.h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h2,.h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h3,.h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h4,.h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h5,.h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h6,.h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print, screen and (min-width: 40em){h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:1.9375rem}h4,.h4{font-size:1.5625rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}}a{line-height:inherit;color:#1779ba;text-decoration:none;cursor:pointer}a:hover,a:focus{color:#1468a0}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}ul,ol,dl{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ul ul,ol ul,ul ol,ol ol{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:bold}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:normal;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ul.no-bullet,ol.no-bullet{margin-left:0;list-style:none}.cite-block,cite{display:block;color:#8a8a8a;font-size:.8125rem}.cite-block:before,cite:before{content:"— "}.code-inline,code{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:inline;max-width:100%;word-wrap:break-word;padding:.125rem .3125rem .0625rem}.code-block{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:block;overflow:auto;white-space:pre;padding:1rem;margin-bottom:1.5rem}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media screen and (min-width: 25em){.smedium-text-left{text-align:left}.smedium-text-right{text-align:right}.smedium-text-center{text-align:center}.smedium-text-justify{text-align:justify}}@media print, screen and (min-width: 40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print, screen and (min-width: 64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none !important}@media print{*{background:transparent !important;color:black !important;-webkit-print-color-adjust:economy;color-adjust:economy;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}.show-for-print{display:block !important}.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^='javascript:']:after,a[href^='#']:after{content:''}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.grid-container{padding-right:.625rem;padding-left:.625rem;max-width:75rem;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.fluid{padding-right:.625rem;padding-left:.625rem;max-width:100%;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container.fluid{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.full{padding-right:0;padding-left:0;max-width:100%;margin-left:auto;margin-right:auto}.grid-x{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.cell{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-height:0px;min-width:0px;width:100%}.cell.auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.cell.shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.auto{width:auto}.grid-x>.shrink{width:auto}.grid-x>.small-shrink,.grid-x>.small-full,.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-x>.smedium-shrink,.grid-x>.smedium-full,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-x>.medium-shrink,.grid-x>.medium-full,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-x>.large-shrink,.grid-x>.large-full,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.small-1{width:8.33333%}.grid-x>.small-2{width:16.66667%}.grid-x>.small-3{width:25%}.grid-x>.small-4{width:33.33333%}.grid-x>.small-5{width:41.66667%}.grid-x>.small-6{width:50%}.grid-x>.small-7{width:58.33333%}.grid-x>.small-8{width:66.66667%}.grid-x>.small-9{width:75%}.grid-x>.small-10{width:83.33333%}.grid-x>.small-11{width:91.66667%}.grid-x>.small-12{width:100%}@media screen and (min-width: 25em){.grid-x>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.smedium-shrink,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.smedium-shrink{width:auto}.grid-x>.smedium-1{width:8.33333%}.grid-x>.smedium-2{width:16.66667%}.grid-x>.smedium-3{width:25%}.grid-x>.smedium-4{width:33.33333%}.grid-x>.smedium-5{width:41.66667%}.grid-x>.smedium-6{width:50%}.grid-x>.smedium-7{width:58.33333%}.grid-x>.smedium-8{width:66.66667%}.grid-x>.smedium-9{width:75%}.grid-x>.smedium-10{width:83.33333%}.grid-x>.smedium-11{width:91.66667%}.grid-x>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.grid-x>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.medium-shrink,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.medium-shrink{width:auto}.grid-x>.medium-1{width:8.33333%}.grid-x>.medium-2{width:16.66667%}.grid-x>.medium-3{width:25%}.grid-x>.medium-4{width:33.33333%}.grid-x>.medium-5{width:41.66667%}.grid-x>.medium-6{width:50%}.grid-x>.medium-7{width:58.33333%}.grid-x>.medium-8{width:66.66667%}.grid-x>.medium-9{width:75%}.grid-x>.medium-10{width:83.33333%}.grid-x>.medium-11{width:91.66667%}.grid-x>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.grid-x>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.large-shrink,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.large-shrink{width:auto}.grid-x>.large-1{width:8.33333%}.grid-x>.large-2{width:16.66667%}.grid-x>.large-3{width:25%}.grid-x>.large-4{width:33.33333%}.grid-x>.large-5{width:41.66667%}.grid-x>.large-6{width:50%}.grid-x>.large-7{width:58.33333%}.grid-x>.large-8{width:66.66667%}.grid-x>.large-9{width:75%}.grid-x>.large-10{width:83.33333%}.grid-x>.large-11{width:91.66667%}.grid-x>.large-12{width:100%}}.grid-margin-x:not(.grid-x)>.cell{width:auto}.grid-margin-y:not(.grid-y)>.cell{height:auto}.grid-margin-x{margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-x{margin-left:-.9375rem;margin-right:-.9375rem}}.grid-margin-x>.cell{width:calc(100% - 1.25rem);margin-left:.625rem;margin-right:.625rem}@media print, screen and (min-width: 40em){.grid-margin-x>.cell{width:calc(100% - 1.875rem);margin-left:.9375rem;margin-right:.9375rem}}.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.small-3{width:calc(25% - 1.25rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.small-6{width:calc(50% - 1.25rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.small-9{width:calc(75% - 1.25rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.small-12{width:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x>.smedium-auto{width:auto}.grid-margin-x>.smedium-shrink{width:auto}.grid-margin-x>.smedium-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.smedium-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.smedium-3{width:calc(25% - 1.25rem)}.grid-margin-x>.smedium-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.smedium-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.smedium-6{width:calc(50% - 1.25rem)}.grid-margin-x>.smedium-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.smedium-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.smedium-9{width:calc(75% - 1.25rem)}.grid-margin-x>.smedium-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.smedium-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.smedium-12{width:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.small-3{width:calc(25% - 1.875rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.small-6{width:calc(50% - 1.875rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.small-9{width:calc(75% - 1.875rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.small-12{width:calc(100% - 1.875rem)}.grid-margin-x>.medium-auto{width:auto}.grid-margin-x>.medium-shrink{width:auto}.grid-margin-x>.medium-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.medium-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.medium-3{width:calc(25% - 1.875rem)}.grid-margin-x>.medium-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.medium-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.medium-6{width:calc(50% - 1.875rem)}.grid-margin-x>.medium-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.medium-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.medium-9{width:calc(75% - 1.875rem)}.grid-margin-x>.medium-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.medium-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.medium-12{width:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x>.large-auto{width:auto}.grid-margin-x>.large-shrink{width:auto}.grid-margin-x>.large-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.large-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.large-3{width:calc(25% - 1.875rem)}.grid-margin-x>.large-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.large-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.large-6{width:calc(50% - 1.875rem)}.grid-margin-x>.large-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.large-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.large-9{width:calc(75% - 1.875rem)}.grid-margin-x>.large-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.large-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.large-12{width:calc(100% - 1.875rem)}}.grid-padding-x .grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-x .grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-container:not(.full)>.grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-container:not(.full)>.grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-padding-x>.cell{padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.grid-padding-x>.cell{padding-right:.9375rem;padding-left:.9375rem}}.small-up-1>.cell{width:100%}.small-up-2>.cell{width:50%}.small-up-3>.cell{width:33.33333%}.small-up-4>.cell{width:25%}.small-up-5>.cell{width:20%}.small-up-6>.cell{width:16.66667%}.small-up-7>.cell{width:14.28571%}.small-up-8>.cell{width:12.5%}@media screen and (min-width: 25em){.smedium-up-1>.cell{width:100%}.smedium-up-2>.cell{width:50%}.smedium-up-3>.cell{width:33.33333%}.smedium-up-4>.cell{width:25%}.smedium-up-5>.cell{width:20%}.smedium-up-6>.cell{width:16.66667%}.smedium-up-7>.cell{width:14.28571%}.smedium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 40em){.medium-up-1>.cell{width:100%}.medium-up-2>.cell{width:50%}.medium-up-3>.cell{width:33.33333%}.medium-up-4>.cell{width:25%}.medium-up-5>.cell{width:20%}.medium-up-6>.cell{width:16.66667%}.medium-up-7>.cell{width:14.28571%}.medium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 64em){.large-up-1>.cell{width:100%}.large-up-2>.cell{width:50%}.large-up-3>.cell{width:33.33333%}.large-up-4>.cell{width:25%}.large-up-5>.cell{width:20%}.large-up-6>.cell{width:16.66667%}.large-up-7>.cell{width:14.28571%}.large-up-8>.cell{width:12.5%}}.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x.smedium-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.smedium-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.smedium-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.smedium-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.smedium-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.smedium-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.smedium-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.smedium-up-8>.cell{width:calc(12.5% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.875rem)}.grid-margin-x.medium-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.medium-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.medium-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.medium-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.medium-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.medium-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.medium-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.medium-up-8>.cell{width:calc(12.5% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x.large-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.large-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.large-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.large-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.large-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.large-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.large-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.large-up-8>.cell{width:calc(12.5% - 1.875rem)}}.small-margin-collapse{margin-right:0;margin-left:0}.small-margin-collapse>.cell{margin-right:0;margin-left:0}.small-margin-collapse>.small-1{width:8.33333%}.small-margin-collapse>.small-2{width:16.66667%}.small-margin-collapse>.small-3{width:25%}.small-margin-collapse>.small-4{width:33.33333%}.small-margin-collapse>.small-5{width:41.66667%}.small-margin-collapse>.small-6{width:50%}.small-margin-collapse>.small-7{width:58.33333%}.small-margin-collapse>.small-8{width:66.66667%}.small-margin-collapse>.small-9{width:75%}.small-margin-collapse>.small-10{width:83.33333%}.small-margin-collapse>.small-11{width:91.66667%}.small-margin-collapse>.small-12{width:100%}@media screen and (min-width: 25em){.small-margin-collapse>.smedium-1{width:8.33333%}.small-margin-collapse>.smedium-2{width:16.66667%}.small-margin-collapse>.smedium-3{width:25%}.small-margin-collapse>.smedium-4{width:33.33333%}.small-margin-collapse>.smedium-5{width:41.66667%}.small-margin-collapse>.smedium-6{width:50%}.small-margin-collapse>.smedium-7{width:58.33333%}.small-margin-collapse>.smedium-8{width:66.66667%}.small-margin-collapse>.smedium-9{width:75%}.small-margin-collapse>.smedium-10{width:83.33333%}.small-margin-collapse>.smedium-11{width:91.66667%}.small-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.small-margin-collapse>.medium-1{width:8.33333%}.small-margin-collapse>.medium-2{width:16.66667%}.small-margin-collapse>.medium-3{width:25%}.small-margin-collapse>.medium-4{width:33.33333%}.small-margin-collapse>.medium-5{width:41.66667%}.small-margin-collapse>.medium-6{width:50%}.small-margin-collapse>.medium-7{width:58.33333%}.small-margin-collapse>.medium-8{width:66.66667%}.small-margin-collapse>.medium-9{width:75%}.small-margin-collapse>.medium-10{width:83.33333%}.small-margin-collapse>.medium-11{width:91.66667%}.small-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.small-margin-collapse>.large-1{width:8.33333%}.small-margin-collapse>.large-2{width:16.66667%}.small-margin-collapse>.large-3{width:25%}.small-margin-collapse>.large-4{width:33.33333%}.small-margin-collapse>.large-5{width:41.66667%}.small-margin-collapse>.large-6{width:50%}.small-margin-collapse>.large-7{width:58.33333%}.small-margin-collapse>.large-8{width:66.66667%}.small-margin-collapse>.large-9{width:75%}.small-margin-collapse>.large-10{width:83.33333%}.small-margin-collapse>.large-11{width:91.66667%}.small-margin-collapse>.large-12{width:100%}}.small-padding-collapse{margin-right:0;margin-left:0}.small-padding-collapse>.cell{padding-right:0;padding-left:0}@media screen and (min-width: 25em){.smedium-margin-collapse{margin-right:0;margin-left:0}.smedium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media screen and (min-width: 25em){.smedium-margin-collapse>.small-1{width:8.33333%}.smedium-margin-collapse>.small-2{width:16.66667%}.smedium-margin-collapse>.small-3{width:25%}.smedium-margin-collapse>.small-4{width:33.33333%}.smedium-margin-collapse>.small-5{width:41.66667%}.smedium-margin-collapse>.small-6{width:50%}.smedium-margin-collapse>.small-7{width:58.33333%}.smedium-margin-collapse>.small-8{width:66.66667%}.smedium-margin-collapse>.small-9{width:75%}.smedium-margin-collapse>.small-10{width:83.33333%}.smedium-margin-collapse>.small-11{width:91.66667%}.smedium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.smedium-1{width:8.33333%}.smedium-margin-collapse>.smedium-2{width:16.66667%}.smedium-margin-collapse>.smedium-3{width:25%}.smedium-margin-collapse>.smedium-4{width:33.33333%}.smedium-margin-collapse>.smedium-5{width:41.66667%}.smedium-margin-collapse>.smedium-6{width:50%}.smedium-margin-collapse>.smedium-7{width:58.33333%}.smedium-margin-collapse>.smedium-8{width:66.66667%}.smedium-margin-collapse>.smedium-9{width:75%}.smedium-margin-collapse>.smedium-10{width:83.33333%}.smedium-margin-collapse>.smedium-11{width:91.66667%}.smedium-margin-collapse>.smedium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.medium-1{width:8.33333%}.smedium-margin-collapse>.medium-2{width:16.66667%}.smedium-margin-collapse>.medium-3{width:25%}.smedium-margin-collapse>.medium-4{width:33.33333%}.smedium-margin-collapse>.medium-5{width:41.66667%}.smedium-margin-collapse>.medium-6{width:50%}.smedium-margin-collapse>.medium-7{width:58.33333%}.smedium-margin-collapse>.medium-8{width:66.66667%}.smedium-margin-collapse>.medium-9{width:75%}.smedium-margin-collapse>.medium-10{width:83.33333%}.smedium-margin-collapse>.medium-11{width:91.66667%}.smedium-margin-collapse>.medium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.large-1{width:8.33333%}.smedium-margin-collapse>.large-2{width:16.66667%}.smedium-margin-collapse>.large-3{width:25%}.smedium-margin-collapse>.large-4{width:33.33333%}.smedium-margin-collapse>.large-5{width:41.66667%}.smedium-margin-collapse>.large-6{width:50%}.smedium-margin-collapse>.large-7{width:58.33333%}.smedium-margin-collapse>.large-8{width:66.66667%}.smedium-margin-collapse>.large-9{width:75%}.smedium-margin-collapse>.large-10{width:83.33333%}.smedium-margin-collapse>.large-11{width:91.66667%}.smedium-margin-collapse>.large-12{width:100%}}@media screen and (min-width: 25em){.smedium-padding-collapse{margin-right:0;margin-left:0}.smedium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse{margin-right:0;margin-left:0}.medium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.small-1{width:8.33333%}.medium-margin-collapse>.small-2{width:16.66667%}.medium-margin-collapse>.small-3{width:25%}.medium-margin-collapse>.small-4{width:33.33333%}.medium-margin-collapse>.small-5{width:41.66667%}.medium-margin-collapse>.small-6{width:50%}.medium-margin-collapse>.small-7{width:58.33333%}.medium-margin-collapse>.small-8{width:66.66667%}.medium-margin-collapse>.small-9{width:75%}.medium-margin-collapse>.small-10{width:83.33333%}.medium-margin-collapse>.small-11{width:91.66667%}.medium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.medium-margin-collapse>.smedium-1{width:8.33333%}.medium-margin-collapse>.smedium-2{width:16.66667%}.medium-margin-collapse>.smedium-3{width:25%}.medium-margin-collapse>.smedium-4{width:33.33333%}.medium-margin-collapse>.smedium-5{width:41.66667%}.medium-margin-collapse>.smedium-6{width:50%}.medium-margin-collapse>.smedium-7{width:58.33333%}.medium-margin-collapse>.smedium-8{width:66.66667%}.medium-margin-collapse>.smedium-9{width:75%}.medium-margin-collapse>.smedium-10{width:83.33333%}.medium-margin-collapse>.smedium-11{width:91.66667%}.medium-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.medium-1{width:8.33333%}.medium-margin-collapse>.medium-2{width:16.66667%}.medium-margin-collapse>.medium-3{width:25%}.medium-margin-collapse>.medium-4{width:33.33333%}.medium-margin-collapse>.medium-5{width:41.66667%}.medium-margin-collapse>.medium-6{width:50%}.medium-margin-collapse>.medium-7{width:58.33333%}.medium-margin-collapse>.medium-8{width:66.66667%}.medium-margin-collapse>.medium-9{width:75%}.medium-margin-collapse>.medium-10{width:83.33333%}.medium-margin-collapse>.medium-11{width:91.66667%}.medium-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.medium-margin-collapse>.large-1{width:8.33333%}.medium-margin-collapse>.large-2{width:16.66667%}.medium-margin-collapse>.large-3{width:25%}.medium-margin-collapse>.large-4{width:33.33333%}.medium-margin-collapse>.large-5{width:41.66667%}.medium-margin-collapse>.large-6{width:50%}.medium-margin-collapse>.large-7{width:58.33333%}.medium-margin-collapse>.large-8{width:66.66667%}.medium-margin-collapse>.large-9{width:75%}.medium-margin-collapse>.large-10{width:83.33333%}.medium-margin-collapse>.large-11{width:91.66667%}.medium-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 40em){.medium-padding-collapse{margin-right:0;margin-left:0}.medium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse{margin-right:0;margin-left:0}.large-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse>.small-1{width:8.33333%}.large-margin-collapse>.small-2{width:16.66667%}.large-margin-collapse>.small-3{width:25%}.large-margin-collapse>.small-4{width:33.33333%}.large-margin-collapse>.small-5{width:41.66667%}.large-margin-collapse>.small-6{width:50%}.large-margin-collapse>.small-7{width:58.33333%}.large-margin-collapse>.small-8{width:66.66667%}.large-margin-collapse>.small-9{width:75%}.large-margin-collapse>.small-10{width:83.33333%}.large-margin-collapse>.small-11{width:91.66667%}.large-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.large-margin-collapse>.smedium-1{width:8.33333%}.large-margin-collapse>.smedium-2{width:16.66667%}.large-margin-collapse>.smedium-3{width:25%}.large-margin-collapse>.smedium-4{width:33.33333%}.large-margin-collapse>.smedium-5{width:41.66667%}.large-margin-collapse>.smedium-6{width:50%}.large-margin-collapse>.smedium-7{width:58.33333%}.large-margin-collapse>.smedium-8{width:66.66667%}.large-margin-collapse>.smedium-9{width:75%}.large-margin-collapse>.smedium-10{width:83.33333%}.large-margin-collapse>.smedium-11{width:91.66667%}.large-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.medium-1{width:8.33333%}.large-margin-collapse>.medium-2{width:16.66667%}.large-margin-collapse>.medium-3{width:25%}.large-margin-collapse>.medium-4{width:33.33333%}.large-margin-collapse>.medium-5{width:41.66667%}.large-margin-collapse>.medium-6{width:50%}.large-margin-collapse>.medium-7{width:58.33333%}.large-margin-collapse>.medium-8{width:66.66667%}.large-margin-collapse>.medium-9{width:75%}.large-margin-collapse>.medium-10{width:83.33333%}.large-margin-collapse>.medium-11{width:91.66667%}.large-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.large-1{width:8.33333%}.large-margin-collapse>.large-2{width:16.66667%}.large-margin-collapse>.large-3{width:25%}.large-margin-collapse>.large-4{width:33.33333%}.large-margin-collapse>.large-5{width:41.66667%}.large-margin-collapse>.large-6{width:50%}.large-margin-collapse>.large-7{width:58.33333%}.large-margin-collapse>.large-8{width:66.66667%}.large-margin-collapse>.large-9{width:75%}.large-margin-collapse>.large-10{width:83.33333%}.large-margin-collapse>.large-11{width:91.66667%}.large-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 64em){.large-padding-collapse{margin-right:0;margin-left:0}.large-padding-collapse>.cell{padding-right:0;padding-left:0}}.small-offset-0{margin-left:0%}.grid-margin-x>.small-offset-0{margin-left:calc(0% + .625rem)}.small-offset-1{margin-left:8.33333%}.grid-margin-x>.small-offset-1{margin-left:calc(8.33333% + .625rem)}.small-offset-2{margin-left:16.66667%}.grid-margin-x>.small-offset-2{margin-left:calc(16.66667% + .625rem)}.small-offset-3{margin-left:25%}.grid-margin-x>.small-offset-3{margin-left:calc(25% + .625rem)}.small-offset-4{margin-left:33.33333%}.grid-margin-x>.small-offset-4{margin-left:calc(33.33333% + .625rem)}.small-offset-5{margin-left:41.66667%}.grid-margin-x>.small-offset-5{margin-left:calc(41.66667% + .625rem)}.small-offset-6{margin-left:50%}.grid-margin-x>.small-offset-6{margin-left:calc(50% + .625rem)}.small-offset-7{margin-left:58.33333%}.grid-margin-x>.small-offset-7{margin-left:calc(58.33333% + .625rem)}.small-offset-8{margin-left:66.66667%}.grid-margin-x>.small-offset-8{margin-left:calc(66.66667% + .625rem)}.small-offset-9{margin-left:75%}.grid-margin-x>.small-offset-9{margin-left:calc(75% + .625rem)}.small-offset-10{margin-left:83.33333%}.grid-margin-x>.small-offset-10{margin-left:calc(83.33333% + .625rem)}.small-offset-11{margin-left:91.66667%}.grid-margin-x>.small-offset-11{margin-left:calc(91.66667% + .625rem)}@media screen and (min-width: 25em){.smedium-offset-0{margin-left:0%}.grid-margin-x>.smedium-offset-0{margin-left:calc(0% + .625rem)}.smedium-offset-1{margin-left:8.33333%}.grid-margin-x>.smedium-offset-1{margin-left:calc(8.33333% + .625rem)}.smedium-offset-2{margin-left:16.66667%}.grid-margin-x>.smedium-offset-2{margin-left:calc(16.66667% + .625rem)}.smedium-offset-3{margin-left:25%}.grid-margin-x>.smedium-offset-3{margin-left:calc(25% + .625rem)}.smedium-offset-4{margin-left:33.33333%}.grid-margin-x>.smedium-offset-4{margin-left:calc(33.33333% + .625rem)}.smedium-offset-5{margin-left:41.66667%}.grid-margin-x>.smedium-offset-5{margin-left:calc(41.66667% + .625rem)}.smedium-offset-6{margin-left:50%}.grid-margin-x>.smedium-offset-6{margin-left:calc(50% + .625rem)}.smedium-offset-7{margin-left:58.33333%}.grid-margin-x>.smedium-offset-7{margin-left:calc(58.33333% + .625rem)}.smedium-offset-8{margin-left:66.66667%}.grid-margin-x>.smedium-offset-8{margin-left:calc(66.66667% + .625rem)}.smedium-offset-9{margin-left:75%}.grid-margin-x>.smedium-offset-9{margin-left:calc(75% + .625rem)}.smedium-offset-10{margin-left:83.33333%}.grid-margin-x>.smedium-offset-10{margin-left:calc(83.33333% + .625rem)}.smedium-offset-11{margin-left:91.66667%}.grid-margin-x>.smedium-offset-11{margin-left:calc(91.66667% + .625rem)}}@media print, screen and (min-width: 40em){.medium-offset-0{margin-left:0%}.grid-margin-x>.medium-offset-0{margin-left:calc(0% + .9375rem)}.medium-offset-1{margin-left:8.33333%}.grid-margin-x>.medium-offset-1{margin-left:calc(8.33333% + .9375rem)}.medium-offset-2{margin-left:16.66667%}.grid-margin-x>.medium-offset-2{margin-left:calc(16.66667% + .9375rem)}.medium-offset-3{margin-left:25%}.grid-margin-x>.medium-offset-3{margin-left:calc(25% + .9375rem)}.medium-offset-4{margin-left:33.33333%}.grid-margin-x>.medium-offset-4{margin-left:calc(33.33333% + .9375rem)}.medium-offset-5{margin-left:41.66667%}.grid-margin-x>.medium-offset-5{margin-left:calc(41.66667% + .9375rem)}.medium-offset-6{margin-left:50%}.grid-margin-x>.medium-offset-6{margin-left:calc(50% + .9375rem)}.medium-offset-7{margin-left:58.33333%}.grid-margin-x>.medium-offset-7{margin-left:calc(58.33333% + .9375rem)}.medium-offset-8{margin-left:66.66667%}.grid-margin-x>.medium-offset-8{margin-left:calc(66.66667% + .9375rem)}.medium-offset-9{margin-left:75%}.grid-margin-x>.medium-offset-9{margin-left:calc(75% + .9375rem)}.medium-offset-10{margin-left:83.33333%}.grid-margin-x>.medium-offset-10{margin-left:calc(83.33333% + .9375rem)}.medium-offset-11{margin-left:91.66667%}.grid-margin-x>.medium-offset-11{margin-left:calc(91.66667% + .9375rem)}}@media print, screen and (min-width: 64em){.large-offset-0{margin-left:0%}.grid-margin-x>.large-offset-0{margin-left:calc(0% + .9375rem)}.large-offset-1{margin-left:8.33333%}.grid-margin-x>.large-offset-1{margin-left:calc(8.33333% + .9375rem)}.large-offset-2{margin-left:16.66667%}.grid-margin-x>.large-offset-2{margin-left:calc(16.66667% + .9375rem)}.large-offset-3{margin-left:25%}.grid-margin-x>.large-offset-3{margin-left:calc(25% + .9375rem)}.large-offset-4{margin-left:33.33333%}.grid-margin-x>.large-offset-4{margin-left:calc(33.33333% + .9375rem)}.large-offset-5{margin-left:41.66667%}.grid-margin-x>.large-offset-5{margin-left:calc(41.66667% + .9375rem)}.large-offset-6{margin-left:50%}.grid-margin-x>.large-offset-6{margin-left:calc(50% + .9375rem)}.large-offset-7{margin-left:58.33333%}.grid-margin-x>.large-offset-7{margin-left:calc(58.33333% + .9375rem)}.large-offset-8{margin-left:66.66667%}.grid-margin-x>.large-offset-8{margin-left:calc(66.66667% + .9375rem)}.large-offset-9{margin-left:75%}.grid-margin-x>.large-offset-9{margin-left:calc(75% + .9375rem)}.large-offset-10{margin-left:83.33333%}.grid-margin-x>.large-offset-10{margin-left:calc(83.33333% + .9375rem)}.large-offset-11{margin-left:91.66667%}.grid-margin-x>.large-offset-11{margin-left:calc(91.66667% + .9375rem)}}.grid-y{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.grid-y>.cell{height:auto;max-height:none}.grid-y>.auto{height:auto}.grid-y>.shrink{height:auto}.grid-y>.small-shrink,.grid-y>.small-full,.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-y>.smedium-shrink,.grid-y>.smedium-full,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-y>.medium-shrink,.grid-y>.medium-full,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-y>.large-shrink,.grid-y>.large-full,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.small-1{height:8.33333%}.grid-y>.small-2{height:16.66667%}.grid-y>.small-3{height:25%}.grid-y>.small-4{height:33.33333%}.grid-y>.small-5{height:41.66667%}.grid-y>.small-6{height:50%}.grid-y>.small-7{height:58.33333%}.grid-y>.small-8{height:66.66667%}.grid-y>.small-9{height:75%}.grid-y>.small-10{height:83.33333%}.grid-y>.small-11{height:91.66667%}.grid-y>.small-12{height:100%}@media screen and (min-width: 25em){.grid-y>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.smedium-shrink,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.smedium-shrink{height:auto}.grid-y>.smedium-1{height:8.33333%}.grid-y>.smedium-2{height:16.66667%}.grid-y>.smedium-3{height:25%}.grid-y>.smedium-4{height:33.33333%}.grid-y>.smedium-5{height:41.66667%}.grid-y>.smedium-6{height:50%}.grid-y>.smedium-7{height:58.33333%}.grid-y>.smedium-8{height:66.66667%}.grid-y>.smedium-9{height:75%}.grid-y>.smedium-10{height:83.33333%}.grid-y>.smedium-11{height:91.66667%}.grid-y>.smedium-12{height:100%}}@media print, screen and (min-width: 40em){.grid-y>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.medium-shrink,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.medium-shrink{height:auto}.grid-y>.medium-1{height:8.33333%}.grid-y>.medium-2{height:16.66667%}.grid-y>.medium-3{height:25%}.grid-y>.medium-4{height:33.33333%}.grid-y>.medium-5{height:41.66667%}.grid-y>.medium-6{height:50%}.grid-y>.medium-7{height:58.33333%}.grid-y>.medium-8{height:66.66667%}.grid-y>.medium-9{height:75%}.grid-y>.medium-10{height:83.33333%}.grid-y>.medium-11{height:91.66667%}.grid-y>.medium-12{height:100%}}@media print, screen and (min-width: 64em){.grid-y>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.large-shrink,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.large-shrink{height:auto}.grid-y>.large-1{height:8.33333%}.grid-y>.large-2{height:16.66667%}.grid-y>.large-3{height:25%}.grid-y>.large-4{height:33.33333%}.grid-y>.large-5{height:41.66667%}.grid-y>.large-6{height:50%}.grid-y>.large-7{height:58.33333%}.grid-y>.large-8{height:66.66667%}.grid-y>.large-9{height:75%}.grid-y>.large-10{height:83.33333%}.grid-y>.large-11{height:91.66667%}.grid-y>.large-12{height:100%}}.grid-padding-y .grid-padding-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-y .grid-padding-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-padding-y>.cell{padding-top:.625rem;padding-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-padding-y>.cell{padding-top:.9375rem;padding-bottom:.9375rem}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .grid-frame{width:100%}.cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media screen and (min-width: 25em){.smedium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .smedium-grid-frame{width:100%}.smedium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.smedium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.smedium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.smedium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 40em){.medium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .medium-grid-frame{width:100%}.medium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.medium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.medium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 64em){.large-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .large-grid-frame{width:100%}.large-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.large-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.large-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}.grid-y.grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}@media screen and (min-width: 25em){.grid-y.smedium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 40em){.grid-y.medium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 64em){.grid-y.large-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}.cell .grid-y.grid-frame{height:100%}@media screen and (min-width: 25em){.cell .grid-y.smedium-grid-frame{height:100%}}@media print, screen and (min-width: 40em){.cell .grid-y.medium-grid-frame{height:100%}}@media print, screen and (min-width: 64em){.cell .grid-y.large-grid-frame{height:100%}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}@media screen and (min-width: 25em){.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media screen and (min-width: 25em){.grid-margin-y.smedium-grid-frame{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y.medium-grid-frame{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y.large-grid-frame{height:calc(100vh + 1.875rem)}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:0.85em 1em;border:1px solid transparent;border-radius:0;-webkit-transition:background-color 0.25s ease-out,color 0.25s ease-out;transition:background-color 0.25s ease-out,color 0.25s ease-out;font-family:inherit;font-size:0.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer}[data-whatinput='mouse'] .button{outline:0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button,.button.disabled,.button[disabled],.button.disabled:hover,.button[disabled]:hover,.button.disabled:focus,.button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button:hover,.button:focus{background-color:#14679e;color:#fefefe}.button.primary,.button.primary.disabled,.button.primary[disabled],.button.primary.disabled:hover,.button.primary[disabled]:hover,.button.primary.disabled:focus,.button.primary[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.primary:hover,.button.primary:focus{background-color:#126195;color:#fefefe}.button.secondary,.button.secondary.disabled,.button.secondary[disabled],.button.secondary.disabled:hover,.button.secondary[disabled]:hover,.button.secondary.disabled:focus,.button.secondary[disabled]:focus{background-color:#767676;color:#fefefe}.button.secondary:hover,.button.secondary:focus{background-color:#5e5e5e;color:#fefefe}.button.success,.button.success.disabled,.button.success[disabled],.button.success.disabled:hover,.button.success[disabled]:hover,.button.success.disabled:focus,.button.success[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button.success:hover,.button.success:focus{background-color:#22bb5b;color:#0a0a0a}.button.warning,.button.warning.disabled,.button.warning[disabled],.button.warning.disabled:hover,.button.warning[disabled]:hover,.button.warning.disabled:focus,.button.warning[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button.warning:hover,.button.warning:focus{background-color:#cc8b00;color:#0a0a0a}.button.alert,.button.alert.disabled,.button.alert[disabled],.button.alert.disabled:hover,.button.alert[disabled]:hover,.button.alert.disabled:focus,.button.alert[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button.alert:hover,.button.alert:focus{background-color:#a53b2a;color:#fefefe}.button.hollow,.button.hollow:hover,.button.hollow:focus,.button.hollow.disabled,.button.hollow.disabled:hover,.button.hollow.disabled:focus,.button.hollow[disabled],.button.hollow[disabled]:hover,.button.hollow[disabled]:focus{background-color:transparent}.button.hollow,.button.hollow.disabled,.button.hollow[disabled],.button.hollow.disabled:hover,.button.hollow[disabled]:hover,.button.hollow.disabled:focus,.button.hollow[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow:hover,.button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary,.button.hollow.primary.disabled,.button.hollow.primary[disabled],.button.hollow.primary.disabled:hover,.button.hollow.primary[disabled]:hover,.button.hollow.primary.disabled:focus,.button.hollow.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:hover,.button.hollow.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.secondary,.button.hollow.secondary.disabled,.button.hollow.secondary[disabled],.button.hollow.secondary.disabled:hover,.button.hollow.secondary[disabled]:hover,.button.hollow.secondary.disabled:focus,.button.hollow.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button.hollow.secondary:hover,.button.hollow.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.success,.button.hollow.success.disabled,.button.hollow.success[disabled],.button.hollow.success.disabled:hover,.button.hollow.success[disabled]:hover,.button.hollow.success.disabled:focus,.button.hollow.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:hover,.button.hollow.success:focus{border-color:#157539;color:#157539}.button.hollow.warning,.button.hollow.warning.disabled,.button.hollow.warning[disabled],.button.hollow.warning.disabled:hover,.button.hollow.warning[disabled]:hover,.button.hollow.warning.disabled:focus,.button.hollow.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:hover,.button.hollow.warning:focus{border-color:#805700;color:#805700}.button.hollow.alert,.button.hollow.alert.disabled,.button.hollow.alert[disabled],.button.hollow.alert.disabled:hover,.button.hollow.alert[disabled]:hover,.button.hollow.alert.disabled:focus,.button.hollow.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button.hollow.alert:hover,.button.hollow.alert:focus{border-color:#67251a;color:#67251a}.button.clear,.button.clear:hover,.button.clear:focus,.button.clear.disabled,.button.clear.disabled:hover,.button.clear.disabled:focus,.button.clear[disabled],.button.clear[disabled]:hover,.button.clear[disabled]:focus{border-color:transparent;background-color:transparent}.button.clear,.button.clear.disabled,.button.clear[disabled],.button.clear.disabled:hover,.button.clear[disabled]:hover,.button.clear.disabled:focus,.button.clear[disabled]:focus{color:#1779ba}.button.clear:hover,.button.clear:focus{color:#0c3d5d}.button.clear.primary,.button.clear.primary.disabled,.button.clear.primary[disabled],.button.clear.primary.disabled:hover,.button.clear.primary[disabled]:hover,.button.clear.primary.disabled:focus,.button.clear.primary[disabled]:focus{color:#1779ba}.button.clear.primary:hover,.button.clear.primary:focus{color:#0c3d5d}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary[disabled],.button.clear.secondary.disabled:hover,.button.clear.secondary[disabled]:hover,.button.clear.secondary.disabled:focus,.button.clear.secondary[disabled]:focus{color:#767676}.button.clear.secondary:hover,.button.clear.secondary:focus{color:#3b3b3b}.button.clear.success,.button.clear.success.disabled,.button.clear.success[disabled],.button.clear.success.disabled:hover,.button.clear.success[disabled]:hover,.button.clear.success.disabled:focus,.button.clear.success[disabled]:focus{color:#3adb76}.button.clear.success:hover,.button.clear.success:focus{color:#157539}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning[disabled],.button.clear.warning.disabled:hover,.button.clear.warning[disabled]:hover,.button.clear.warning.disabled:focus,.button.clear.warning[disabled]:focus{color:#ffae00}.button.clear.warning:hover,.button.clear.warning:focus{color:#805700}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert[disabled],.button.clear.alert.disabled:hover,.button.clear.alert[disabled]:hover,.button.clear.alert.disabled:focus,.button.clear.alert[disabled]:focus{color:#cc4b37}.button.clear.alert:hover,.button.clear.alert:focus{color:#67251a}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.dropdown::after{display:block;width:0;height:0;border:inset .4em;content:'';border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:0.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow::after,.button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.primary::after,.button.dropdown.clear.primary::after{border-top-color:#1779ba}.button.dropdown.hollow.secondary::after,.button.dropdown.clear.secondary::after{border-top-color:#767676}.button.dropdown.hollow.success::after,.button.dropdown.clear.success::after{border-top-color:#3adb76}.button.dropdown.hollow.warning::after,.button.dropdown.clear.warning::after{border-top-color:#ffae00}.button.dropdown.hollow.alert::after,.button.dropdown.clear.alert::after{border-top-color:#cc4b37}.button.arrow-only::after{top:-0.1em;float:none;margin-left:0}a.button:hover,a.button:focus{text-decoration:none}.button-group{margin-bottom:1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.button-group::before,.button-group::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.button-group::after{clear:both}.button-group::before,.button-group::after{display:none}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:0.9rem;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}.button-group.primary .button,.button-group.primary .button.disabled,.button-group.primary .button[disabled],.button-group.primary .button.disabled:hover,.button-group.primary .button[disabled]:hover,.button-group.primary .button.disabled:focus,.button-group.primary .button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button-group.primary .button:hover,.button-group.primary .button:focus{background-color:#126195;color:#fefefe}.button-group.secondary .button,.button-group.secondary .button.disabled,.button-group.secondary .button[disabled],.button-group.secondary .button.disabled:hover,.button-group.secondary .button[disabled]:hover,.button-group.secondary .button.disabled:focus,.button-group.secondary .button[disabled]:focus{background-color:#767676;color:#fefefe}.button-group.secondary .button:hover,.button-group.secondary .button:focus{background-color:#5e5e5e;color:#fefefe}.button-group.success .button,.button-group.success .button.disabled,.button-group.success .button[disabled],.button-group.success .button.disabled:hover,.button-group.success .button[disabled]:hover,.button-group.success .button.disabled:focus,.button-group.success .button[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:hover,.button-group.success .button:focus{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button,.button-group.warning .button.disabled,.button-group.warning .button[disabled],.button-group.warning .button.disabled:hover,.button-group.warning .button[disabled]:hover,.button-group.warning .button.disabled:focus,.button-group.warning .button[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:hover,.button-group.warning .button:focus{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button,.button-group.alert .button.disabled,.button-group.alert .button[disabled],.button-group.alert .button.disabled:hover,.button-group.alert .button[disabled]:hover,.button-group.alert .button.disabled:focus,.button-group.alert .button[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button-group.alert .button:hover,.button-group.alert .button:focus{background-color:#a53b2a;color:#fefefe}.button-group.hollow .button,.button-group.hollow .button:hover,.button-group.hollow .button:focus,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:hover,.button-group.hollow .button[disabled]:focus{background-color:transparent}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button[disabled],.button-group.hollow .button.disabled:hover,.button-group.hollow .button[disabled]:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button:hover,.button-group.hollow .button:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.primary .button,.button-group.hollow.primary .button.disabled,.button-group.hollow.primary .button[disabled],.button-group.hollow.primary .button.disabled:hover,.button-group.hollow.primary .button[disabled]:hover,.button-group.hollow.primary .button.disabled:focus,.button-group.hollow.primary .button[disabled]:focus,.button-group.hollow .button.primary,.button-group.hollow .button.primary.disabled,.button-group.hollow .button.primary[disabled],.button-group.hollow .button.primary.disabled:hover,.button-group.hollow .button.primary[disabled]:hover,.button-group.hollow .button.primary.disabled:focus,.button-group.hollow .button.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow.primary .button:hover,.button-group.hollow.primary .button:focus,.button-group.hollow .button.primary:hover,.button-group.hollow .button.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.secondary .button,.button-group.hollow.secondary .button.disabled,.button-group.hollow.secondary .button[disabled],.button-group.hollow.secondary .button.disabled:hover,.button-group.hollow.secondary .button[disabled]:hover,.button-group.hollow.secondary .button.disabled:focus,.button-group.hollow.secondary .button[disabled]:focus,.button-group.hollow .button.secondary,.button-group.hollow .button.secondary.disabled,.button-group.hollow .button.secondary[disabled],.button-group.hollow .button.secondary.disabled:hover,.button-group.hollow .button.secondary[disabled]:hover,.button-group.hollow .button.secondary.disabled:focus,.button-group.hollow .button.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button-group.hollow.secondary .button:hover,.button-group.hollow.secondary .button:focus,.button-group.hollow .button.secondary:hover,.button-group.hollow .button.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button-group.hollow.success .button,.button-group.hollow.success .button.disabled,.button-group.hollow.success .button[disabled],.button-group.hollow.success .button.disabled:hover,.button-group.hollow.success .button[disabled]:hover,.button-group.hollow.success .button.disabled:focus,.button-group.hollow.success .button[disabled]:focus,.button-group.hollow .button.success,.button-group.hollow .button.success.disabled,.button-group.hollow .button.success[disabled],.button-group.hollow .button.success.disabled:hover,.button-group.hollow .button.success[disabled]:hover,.button-group.hollow .button.success.disabled:focus,.button-group.hollow .button.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button-group.hollow.success .button:hover,.button-group.hollow.success .button:focus,.button-group.hollow .button.success:hover,.button-group.hollow .button.success:focus{border-color:#157539;color:#157539}.button-group.hollow.warning .button,.button-group.hollow.warning .button.disabled,.button-group.hollow.warning .button[disabled],.button-group.hollow.warning .button.disabled:hover,.button-group.hollow.warning .button[disabled]:hover,.button-group.hollow.warning .button.disabled:focus,.button-group.hollow.warning .button[disabled]:focus,.button-group.hollow .button.warning,.button-group.hollow .button.warning.disabled,.button-group.hollow .button.warning[disabled],.button-group.hollow .button.warning.disabled:hover,.button-group.hollow .button.warning[disabled]:hover,.button-group.hollow .button.warning.disabled:focus,.button-group.hollow .button.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button-group.hollow.warning .button:hover,.button-group.hollow.warning .button:focus,.button-group.hollow .button.warning:hover,.button-group.hollow .button.warning:focus{border-color:#805700;color:#805700}.button-group.hollow.alert .button,.button-group.hollow.alert .button.disabled,.button-group.hollow.alert .button[disabled],.button-group.hollow.alert .button.disabled:hover,.button-group.hollow.alert .button[disabled]:hover,.button-group.hollow.alert .button.disabled:focus,.button-group.hollow.alert .button[disabled]:focus,.button-group.hollow .button.alert,.button-group.hollow .button.alert.disabled,.button-group.hollow .button.alert[disabled],.button-group.hollow .button.alert.disabled:hover,.button-group.hollow .button.alert[disabled]:hover,.button-group.hollow .button.alert.disabled:focus,.button-group.hollow .button.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button-group.hollow.alert .button:hover,.button-group.hollow.alert .button:focus,.button-group.hollow .button.alert:hover,.button-group.hollow .button.alert:focus{border-color:#67251a;color:#67251a}.button-group.clear .button,.button-group.clear .button:hover,.button-group.clear .button:focus,.button-group.clear .button.disabled,.button-group.clear .button.disabled:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:hover,.button-group.clear .button[disabled]:focus{border-color:transparent;background-color:transparent}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button[disabled],.button-group.clear .button.disabled:hover,.button-group.clear .button[disabled]:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled]:focus{color:#1779ba}.button-group.clear .button:hover,.button-group.clear .button:focus{color:#0c3d5d}.button-group.clear.primary .button,.button-group.clear.primary .button.disabled,.button-group.clear.primary .button[disabled],.button-group.clear.primary .button.disabled:hover,.button-group.clear.primary .button[disabled]:hover,.button-group.clear.primary .button.disabled:focus,.button-group.clear.primary .button[disabled]:focus,.button-group.clear .button.primary,.button-group.clear .button.primary.disabled,.button-group.clear .button.primary[disabled],.button-group.clear .button.primary.disabled:hover,.button-group.clear .button.primary[disabled]:hover,.button-group.clear .button.primary.disabled:focus,.button-group.clear .button.primary[disabled]:focus{color:#1779ba}.button-group.clear.primary .button:hover,.button-group.clear.primary .button:focus,.button-group.clear .button.primary:hover,.button-group.clear .button.primary:focus{color:#0c3d5d}.button-group.clear.secondary .button,.button-group.clear.secondary .button.disabled,.button-group.clear.secondary .button[disabled],.button-group.clear.secondary .button.disabled:hover,.button-group.clear.secondary .button[disabled]:hover,.button-group.clear.secondary .button.disabled:focus,.button-group.clear.secondary .button[disabled]:focus,.button-group.clear .button.secondary,.button-group.clear .button.secondary.disabled,.button-group.clear .button.secondary[disabled],.button-group.clear .button.secondary.disabled:hover,.button-group.clear .button.secondary[disabled]:hover,.button-group.clear .button.secondary.disabled:focus,.button-group.clear .button.secondary[disabled]:focus{color:#767676}.button-group.clear.secondary .button:hover,.button-group.clear.secondary .button:focus,.button-group.clear .button.secondary:hover,.button-group.clear .button.secondary:focus{color:#3b3b3b}.button-group.clear.success .button,.button-group.clear.success .button.disabled,.button-group.clear.success .button[disabled],.button-group.clear.success .button.disabled:hover,.button-group.clear.success .button[disabled]:hover,.button-group.clear.success .button.disabled:focus,.button-group.clear.success .button[disabled]:focus,.button-group.clear .button.success,.button-group.clear .button.success.disabled,.button-group.clear .button.success[disabled],.button-group.clear .button.success.disabled:hover,.button-group.clear .button.success[disabled]:hover,.button-group.clear .button.success.disabled:focus,.button-group.clear .button.success[disabled]:focus{color:#3adb76}.button-group.clear.success .button:hover,.button-group.clear.success .button:focus,.button-group.clear .button.success:hover,.button-group.clear .button.success:focus{color:#157539}.button-group.clear.warning .button,.button-group.clear.warning .button.disabled,.button-group.clear.warning .button[disabled],.button-group.clear.warning .button.disabled:hover,.button-group.clear.warning .button[disabled]:hover,.button-group.clear.warning .button.disabled:focus,.button-group.clear.warning .button[disabled]:focus,.button-group.clear .button.warning,.button-group.clear .button.warning.disabled,.button-group.clear .button.warning[disabled],.button-group.clear .button.warning.disabled:hover,.button-group.clear .button.warning[disabled]:hover,.button-group.clear .button.warning.disabled:focus,.button-group.clear .button.warning[disabled]:focus{color:#ffae00}.button-group.clear.warning .button:hover,.button-group.clear.warning .button:focus,.button-group.clear .button.warning:hover,.button-group.clear .button.warning:focus{color:#805700}.button-group.clear.alert .button,.button-group.clear.alert .button.disabled,.button-group.clear.alert .button[disabled],.button-group.clear.alert .button.disabled:hover,.button-group.clear.alert .button[disabled]:hover,.button-group.clear.alert .button.disabled:focus,.button-group.clear.alert .button[disabled]:focus,.button-group.clear .button.alert,.button-group.clear .button.alert.disabled,.button-group.clear .button.alert[disabled],.button-group.clear .button.alert.disabled:hover,.button-group.clear .button.alert[disabled]:hover,.button-group.clear .button.alert.disabled:focus,.button-group.clear .button.alert[disabled]:focus{color:#cc4b37}.button-group.clear.alert .button:hover,.button-group.clear.alert .button:focus,.button-group.clear .button.alert:hover,.button-group.clear .button.alert:focus{color:#67251a}.button-group.no-gaps .button{margin-right:-.0625rem}.button-group.no-gaps .button+.button{border-left-color:transparent}.button-group.stacked,.button-group.stacked-for-small,.button-group.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked-for-medium .button:last-child{margin-bottom:0}.button-group.stacked.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked-for-medium.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}@media print, screen and (min-width: 40em){.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (min-width: 64em){.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (max-width: 24.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media print, screen and (max-width: 63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;z-index:10;color:#8a8a8a;cursor:pointer}[data-whatinput='mouse'] .close-button{outline:0}.close-button:hover,.close-button:focus{color:#0a0a0a}.close-button.small{right:0.66rem;top:0.33em;font-size:1.5em;line-height:1}.close-button.medium,.close-button{right:1rem;top:0.5rem;font-size:2em;line-height:1}.label{display:inline-block;padding:0.33333rem 0.5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#1779ba;color:#fefefe}.label.primary{background:#1779ba;color:#fefefe}.label.secondary{background:#767676;color:#fefefe}.label.success{background:#3adb76;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.alert{background:#cc4b37;color:#fefefe}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#cc4b37}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);margin:0;font-size:0.75rem;font-weight:bold;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.slider-fill.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider-handle{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#1779ba;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput='mouse'] .slider-handle{outline:0}.slider-handle:hover{background-color:#14679e}.slider-handle.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:bold;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);border-radius:0;background:#fefefe;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;content:''}input:checked ~ .switch-paddle{background:#1779ba}input:checked ~ .switch-paddle::after{left:2.25rem}input:disabled ~ .switch-paddle{cursor:not-allowed;opacity:.5}[data-whatinput='mouse'] input:focus ~ .switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked ~ .switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked ~ .switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked ~ .switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}thead,tbody,tfoot{border:1px solid #f1f1f1;background-color:#fefefe}caption{padding:.5rem .625rem .625rem;font-weight:bold}thead{background:#f8f8f8;color:#0a0a0a}tfoot{background:#f1f1f1;color:#0a0a0a}thead tr,tfoot tr{background:transparent}thead th,thead td,tfoot th,tfoot td{padding:.5rem .625rem .625rem;font-weight:bold;text-align:left}tbody th,tbody td{padding:.5rem .625rem .625rem}tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media print, screen and (max-width: 63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack tr,table.stack th,table.stack td{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#1779ba;color:#fefefe}.badge.primary{background:#1779ba;color:#fefefe}.badge.secondary{background:#767676;color:#fefefe}.badge.success{background:#3adb76;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.alert{background:#cc4b37;color:#fefefe}.breadcrumbs{margin:0 0 1rem 0;list-style:none}.breadcrumbs::before,.breadcrumbs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.breadcrumbs::after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child)::after{position:relative;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#1779ba}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.callout{position:relative;margin:0 0 1rem 0;padding:1rem;border:1px solid rgba(10,10,10,0.25);border-radius:0;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#d7ecfa;color:#0a0a0a}.callout.secondary{background-color:#eaeaea;color:#0a0a0a}.callout.success{background-color:#e1faea;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.alert{background-color:#f7e4e1;color:#0a0a0a}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:0;background:#fefefe;-webkit-box-shadow:none;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;padding:1rem}.card-section>:last-child{margin-bottom:0}.card-image{min-height:1px}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.pagination{margin-left:0;margin-bottom:1rem}.pagination::before,.pagination::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:last-child,.pagination li:first-child{display:inline-block}@media print, screen and (min-width: 40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:0.5rem;content:"«"}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:0.5rem;content:"»"}.has-tip{position:relative;display:inline-block;border-bottom:dotted 1px #8a8a8a;font-weight:bold;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;bottom:100%}.tooltip.bottom.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0 0 0 0}.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#1779ba}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0 0 0 0}.accordion-title:hover,.accordion-title:focus{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-0.5rem;content:"+"}.is-active>.accordion-title::before{content:"–"}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.media-object{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.media-object img{max-width:none}@media print, screen and (max-width: 24.99875em){.media-object.stack-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.media-object-section{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}@media print, screen and (max-width: 24.99875em){.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.stack-for-small .media-object-section img{width:100%}}.media-object-section.main-section{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.orbit{position:relative}.orbit-container{position:relative;height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%;position:absolute}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{position:absolute;bottom:0;width:100%;margin-bottom:0;padding:1rem;background-color:rgba(10,10,10,0.5);color:#fefefe}.orbit-previous,.orbit-next{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:10;padding:1rem;color:#fefefe}[data-whatinput='mouse'] .orbit-previous,[data-whatinput='mouse'] .orbit-next{outline:0}.orbit-previous:hover,.orbit-next:hover,.orbit-previous:active,.orbit-next:active,.orbit-previous:focus,.orbit-next:focus{background-color:rgba(10,10,10,0.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput='mouse'] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button:hover{background-color:#8a8a8a}.orbit-bullets button.is-active{background-color:#8a8a8a}.responsive-embed,.flex-video{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.responsive-embed iframe,.responsive-embed object,.responsive-embed embed,.responsive-embed video,.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{position:absolute;top:0;left:0;width:100%;height:100%}.responsive-embed.widescreen,.flex-video.widescreen{padding-bottom:56.25%}.tabs{margin:0;border:1px solid #e6e6e6;background:#fefefe;list-style-type:none}.tabs::before,.tabs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary{background:#1779ba}.tabs.primary>li>a{color:#fefefe}.tabs.primary>li>a:hover,.tabs.primary>li>a:focus{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#1779ba}[data-whatinput='mouse'] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fefefe;color:#1468a0}.tabs-title>a:focus,.tabs-title>a[aria-selected='true']{background:#e6e6e6;color:#1779ba}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;-webkit-transition:all 0.5s ease;transition:all 0.5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(10,10,10,0.2);box-shadow:0 0 0 1px rgba(10,10,10,0.2);line-height:0}a.thumbnail{-webkit-transition:-webkit-box-shadow 200ms ease-out;transition:-webkit-box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out}a.thumbnail:hover,a.thumbnail:focus{-webkit-box-shadow:0 0 6px 1px rgba(23,121,186,0.5);box-shadow:0 0 6px 1px rgba(23,121,186,0.5)}a.thumbnail image{-webkit-box-shadow:none;box-shadow:none}.menu{padding:0;margin:0;list-style:none;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}[data-whatinput='mouse'] .menu li{outline:0}.menu a,.menu .button{line-height:1;text-decoration:none;display:block;padding:0.7rem 1rem}.menu input,.menu select,.menu a,.menu button{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.simple{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media screen and (min-width: 25em){.menu.smedium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.smedium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.smedium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.smedium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 40em){.menu.medium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.medium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.medium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.medium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 64em){.menu.large-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.large-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.large-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.large-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-top a,.menu.icon-right a,.menu.icon-bottom a,.menu.icon-left a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-left li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-left li a img,.menu.icon-left li a i,.menu.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-right li a img,.menu.icon-right li a i,.menu.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-top li a img,.menu.icon-top li a i,.menu.icon-top li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-bottom li a img,.menu.icon-bottom li a i,.menu.icon-bottom li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#1779ba;color:#fefefe}.menu .active>a{background:#1779ba;color:#fefefe}.menu.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu.align-right li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu.align-center li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu .menu-text{padding:0.7rem 1rem;font-weight:bold;line-height:1;color:inherit}.menu-centered>.menu{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;-webkit-box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;-webkit-box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;-webkit-box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;-webkit-box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.accordion-menu li{width:100%}.accordion-menu a{padding:0.7rem 1rem}.accordion-menu .is-accordion-submenu a{padding:0.7rem 1rem}.accordion-menu .nested.is-accordion-submenu{margin-right:0;margin-left:1rem}.accordion-menu.align-right .nested.is-accordion-submenu{margin-right:1rem;margin-left:0}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{position:relative}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.accordion-menu.align-left .is-accordion-submenu-parent>a::after{right:1rem;left:auto}.accordion-menu.align-right .is-accordion-submenu-parent>a::after{right:auto;left:1rem}.accordion-menu .is-accordion-submenu-parent[aria-expanded='true']>a::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.is-accordion-submenu-parent{position:relative}.has-submenu-toggle>a{margin-right:40px}.submenu-toggle{position:absolute;top:0;right:0;width:40px;height:40px;cursor:pointer}.submenu-toggle::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;top:0;bottom:0;margin:auto}.submenu-toggle[aria-expanded='true']::after{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.submenu-toggle-text{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{-webkit-transition:height 0.5s;transition:height 0.5s}.drilldown a{padding:0.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;-webkit-transition:-webkit-transform 0.15s linear;transition:-webkit-transform 0.15s linear;transition:transform 0.15s linear;transition:transform 0.15s linear, -webkit-transform 0.15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:0.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:0.75rem}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput='mouse'] .dropdown.menu a{outline:0}.dropdown.menu>li>a{padding:0.7rem 1rem}.dropdown.menu>li.is-active>a{background:rgba(0,0,0,0);color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}@media screen and (min-width: 25em){.dropdown.menu.smedium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.smedium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.smedium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.smedium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.smedium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.smedium-vertical>li>a::after{right:14px}.dropdown.menu.smedium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.smedium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.dropdown .is-dropdown-submenu a{padding:0.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;-webkit-transition:opacity .5s ease,visibility .5s ease;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,0.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-absolute{position:absolute;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-left.has-transition-push{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push{-webkit-box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-right.has-transition-push{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push{-webkit-box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-top.has-transition-push{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push{-webkit-box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-bottom.has-transition-push{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push{-webkit-box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25)}.off-canvas-content{-webkit-transform:none;-ms-transform:none;transform:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}.off-canvas-content.has-transition-overlap,.off-canvas-content.has-transition-push{-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.off-canvas-content.has-transition-push{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content .off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}@media screen and (min-width: 25em){.position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-smedium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-smedium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-smedium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-smedium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 40em){.position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 64em){.position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large ~ .off-canvas-content{margin-bottom:250px}}@media screen and (min-width: 25em){.off-canvas.in-canvas-for-smedium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-smedium.position-left,.off-canvas.in-canvas-for-smedium.position-right,.off-canvas.in-canvas-for-smedium.position-top,.off-canvas.in-canvas-for-smedium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-smedium .close-button{display:none}}@media print, screen and (min-width: 40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top,.off-canvas.in-canvas-for-medium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print, screen and (min-width: 64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top,.off-canvas.in-canvas-for-large.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}html.is-reveal-open{position:fixed;width:100%;overflow-y:hidden}html.is-reveal-open.zf-has-scroll{overflow-y:scroll}html.is-reveal-open body{overflow-y:hidden}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:rgba(10,10,10,0.45);overflow-y:auto}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput='mouse'] .reveal{outline:0}@media print, screen and (min-width: 40em){.reveal{min-height:0}}.reveal .column{min-width:0}.reveal>:last-child{margin-bottom:0}@media print, screen and (min-width: 40em){.reveal{width:600px;max-width:75rem}}.reveal.collapse{padding:0}@media print, screen and (min-width: 40em){.reveal.tiny{width:30%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.small{width:50%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}@media print, screen and (max-width: 24.99875em){.reveal{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.sticky-container{position:relative}.sticky{position:relative;z-index:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.sticky.is-stuck{position:fixed;z-index:5;width:100%}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:bold}.top-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media print, screen and (min-width: 40em){.top-bar{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.top-bar .top-bar-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;margin-left:auto}}@media screen and (max-width: 39.99875em){.top-bar.stacked-for-smedium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-smedium .top-bar-left,.top-bar.stacked-for-smedium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 63.99875em){.top-bar.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 74.99875em){.top-bar.stacked-for-large{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}.top-bar-title{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:0.5rem 1rem 0.5rem 0}.top-bar-left,.top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.float-left{float:left !important}.float-right{float:right !important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::before,.clearfix::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.clearfix::after{clear:both}.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.align-left.vertical.menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right.vertical.menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.vertical.menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.align-self-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.align-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.align-self-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.align-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.align-self-middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.align-self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.align-center-middle{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.small-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.small-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.small-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.small-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.small-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.small-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}@media screen and (min-width: 25em){.smedium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.smedium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.smedium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.smedium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.smedium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.smedium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 40em){.medium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.medium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.medium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.medium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.medium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.medium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 64em){.large-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.large-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.large-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.large-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.large-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.large-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}.flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media screen and (min-width: 25em){.smedium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.smedium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.smedium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.smedium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.smedium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.smedium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.smedium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.smedium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 40em){.medium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.medium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.medium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.medium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.medium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.medium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.medium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 64em){.large-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.large-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.large-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.large-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.large-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.large-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.large-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.hide{display:none !important}.invisible{visibility:hidden}@media print, screen and (max-width: 24.99875em){.hide-for-small-only{display:none !important}}@media screen and (max-width: 0em), screen and (min-width: 25em){.show-for-small-only{display:none !important}}@media screen and (min-width: 25em){.hide-for-smedium{display:none !important}}@media screen and (max-width: 24.99875em){.show-for-smedium{display:none !important}}@media screen and (min-width: 25em) and (max-width: 39.99875em){.hide-for-smedium-only{display:none !important}}@media screen and (max-width: 24.99875em), screen and (min-width: 40em){.show-for-smedium-only{display:none !important}}@media print, screen and (min-width: 40em){.hide-for-medium{display:none !important}}@media screen and (max-width: 39.99875em){.show-for-medium{display:none !important}}@media print, screen and (min-width: 40em) and (max-width: 63.99875em){.hide-for-medium-only{display:none !important}}@media screen and (max-width: 39.99875em), screen and (min-width: 64em){.show-for-medium-only{display:none !important}}@media print, screen and (min-width: 64em){.hide-for-large{display:none !important}}@media screen and (max-width: 63.99875em){.show-for-large{display:none !important}}@media print, screen and (min-width: 64em) and (max-width: 74.99875em){.hide-for-large-only{display:none !important}}@media screen and (max-width: 63.99875em), screen and (min-width: 75em){.show-for-large-only{display:none !important}}.show-for-sr,.show-on-focus{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.show-on-focus:active,.show-on-focus:focus{position:static !important;width:auto !important;height:auto !important;overflow:visible !important;clip:auto !important;white-space:normal !important}.show-for-landscape,.hide-for-portrait{display:block !important}@media screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:block !important}}@media screen and (orientation: portrait){.show-for-landscape,.hide-for-portrait{display:none !important}}.hide-for-landscape,.show-for-portrait{display:none !important}@media screen and (orientation: landscape){.hide-for-landscape,.show-for-portrait{display:none !important}}@media screen and (orientation: portrait){.hide-for-landscape,.show-for-portrait{display:block !important}}#toast-container{z-index:10001;text-align:center;position:absolute;height:100vh !important;width:100%;overflow:visible !important;padding:8.5vh 0 0 0;pointer-events:none}#toast-container div.toast{position:relative;width:100%;pointer-events:none;-webkit-transition:opacity 0.25s;transition:opacity 0.25s}#toast-container div.toast.toast-template{visibility:hidden}#toast-container div.toast span.message{pointer-events:auto;font-size:0.8rem;border-radius:25px;letter-spacing:0;z-index:10001;max-width:100%;display:inline-block;-webkit-box-shadow:2px 2px 10px rgba(0,0,0,0.28);box-shadow:2px 2px 10px rgba(0,0,0,0.28);border:1px solid #626262;background-color:#6b6b6b;padding:.3em .6em;text-align:center;color:white}#toast-container div.toast span.message:hover{opacity:.4;cursor:pointer}#toast-container div.toast span.message:before,#toast-container div.toast span.message:after{display:block;content:""}.background{position:fixed;z-index:1000000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(55,55,55,0.6)}.background .modal{position:relative;top:50%;margin:auto;width:80%;border-radius:2px;background-color:#fefefe;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);padding:0.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:80%;max-width:1024px}@media print, screen and (max-width: 63.99875em){.background .modal.small-margin{width:90%}}@media print, screen and (max-width: 24.99875em){.background .modal.small-margin{width:95%}}.background .modal.max-small{max-width:0}.background .modal.max-smedium{max-width:400px}.background .modal.max-medium{max-width:640px}.background .modal.max-large{max-width:1024px}.background .modal.max-xlarge{max-width:1200px}.background .modal.max-xxlarge{max-width:1440px}.background .modal .title{font-weight:bold;padding-bottom:0.5rem}.background .modal .content-container{overflow-y:auto;max-height:100%}.background .modal .content-container .loader{position:static;-webkit-transform:none;-ms-transform:none;transform:none}.background .modal .close{text-align:right;float:right;font-size:28px;font-weight:bold;line-height:1}.background .modal .close:hover,.background .modal .close:focus{text-decoration:none;cursor:pointer}.background .modal .modal-button-container{padding-top:0.5rem}.background .modal .modal-button-container .button{margin-left:0.2rem;margin-bottom:0 !important;padding:0.6em 0.8em}@media print, screen and (max-width: 24.99875em){.background .modal .modal-button-container .button{margin-left:0.1rem;padding:0.3em 0.5em}}.background .modal .choose-dialog-value-row{line-height:1;padding-top:0.5em;padding-bottom:0.5em;width:100%;cursor:pointer;background:rgba(150,150,150,0.15);display:inline-block;margin-top:0.3rem;margin-bottom:0.3rem;padding-left:0.5rem}.background .modal.no-title .title{display:none}label{position:relative}label [type='text'],label [type='password'],label [type='date'],label [type='datetime'],label [type='datetime-local'],label [type='month'],label [type='week'],label [type='email'],label [type='number'],label [type='search'],label [type='tel'],label [type='time'],label [type='url'],label [type='color'],label textarea,label input[type='text'],label input:not([type]){display:block;width:100%;height:2.4375rem;padding:0.5rem;-webkit-box-shadow:none;box-shadow:none;font-size:1rem;font-weight:normal;line-height:1.5;border:none;border-bottom:solid 1px #626262;outline:0;margin:0 0 15px}label [type='text']:invalid,label [type='password']:invalid,label [type='date']:invalid,label [type='datetime']:invalid,label [type='datetime-local']:invalid,label [type='month']:invalid,label [type='week']:invalid,label [type='email']:invalid,label [type='number']:invalid,label [type='search']:invalid,label [type='tel']:invalid,label [type='time']:invalid,label [type='url']:invalid,label [type='color']:invalid,label textarea:invalid,label input[type='text']:invalid,label input:not([type]):invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:disabled,label [type='password']:disabled,label [type='date']:disabled,label [type='datetime']:disabled,label [type='datetime-local']:disabled,label [type='month']:disabled,label [type='week']:disabled,label [type='email']:disabled,label [type='number']:disabled,label [type='search']:disabled,label [type='tel']:disabled,label [type='time']:disabled,label [type='url']:disabled,label [type='color']:disabled,label textarea:disabled,label input[type='text']:disabled,label input:not([type]):disabled{background-color:#e6e6e6}label [type='text']:focus,label [type='password']:focus,label [type='date']:focus,label [type='datetime']:focus,label [type='datetime-local']:focus,label [type='month']:focus,label [type='week']:focus,label [type='email']:focus,label [type='number']:focus,label [type='search']:focus,label [type='tel']:focus,label [type='time']:focus,label [type='url']:focus,label [type='color']:focus,label textarea:focus,label input[type='text']:focus,label input:not([type]):focus{border:none;border-bottom:solid 1px #626262;-webkit-box-shadow:none;box-shadow:none}label [type='text']:focus:invalid,label [type='password']:focus:invalid,label [type='date']:focus:invalid,label [type='datetime']:focus:invalid,label [type='datetime-local']:focus:invalid,label [type='month']:focus:invalid,label [type='week']:focus:invalid,label [type='email']:focus:invalid,label [type='number']:focus:invalid,label [type='search']:focus:invalid,label [type='tel']:focus:invalid,label [type='time']:focus:invalid,label [type='url']:focus:invalid,label [type='color']:focus:invalid,label textarea:focus:invalid,label input[type='text']:focus:invalid,label input:not([type]):focus:invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:focus:disabled,label [type='password']:focus:disabled,label [type='date']:focus:disabled,label [type='datetime']:focus:disabled,label [type='datetime-local']:focus:disabled,label [type='month']:focus:disabled,label [type='week']:focus:disabled,label [type='email']:focus:disabled,label [type='number']:focus:disabled,label [type='search']:focus:disabled,label [type='tel']:focus:disabled,label [type='time']:focus:disabled,label [type='url']:focus:disabled,label [type='color']:focus:disabled,label textarea:focus:disabled,label input[type='text']:focus:disabled,label input:not([type]):focus:disabled{background-color:#e6e6e6}label [type='text']:focus ~ span,label [type='text'].notEmpty:not(:focus) ~ span,label [type='text']:not(:empty) ~ span,label [type='password']:focus ~ span,label [type='password'].notEmpty:not(:focus) ~ span,label [type='password']:not(:empty) ~ span,label [type='date']:focus ~ span,label [type='date'].notEmpty:not(:focus) ~ span,label [type='date']:not(:empty) ~ span,label [type='datetime']:focus ~ span,label [type='datetime'].notEmpty:not(:focus) ~ span,label [type='datetime']:not(:empty) ~ span,label [type='datetime-local']:focus ~ span,label [type='datetime-local'].notEmpty:not(:focus) ~ span,label [type='datetime-local']:not(:empty) ~ span,label [type='month']:focus ~ span,label [type='month'].notEmpty:not(:focus) ~ span,label [type='month']:not(:empty) ~ span,label [type='week']:focus ~ span,label [type='week'].notEmpty:not(:focus) ~ span,label [type='week']:not(:empty) ~ span,label [type='email']:focus ~ span,label [type='email'].notEmpty:not(:focus) ~ span,label [type='email']:not(:empty) ~ span,label [type='number']:focus ~ span,label [type='number'].notEmpty:not(:focus) ~ span,label [type='number']:not(:empty) ~ span,label [type='search']:focus ~ span,label [type='search'].notEmpty:not(:focus) ~ span,label [type='search']:not(:empty) ~ span,label [type='tel']:focus ~ span,label [type='tel'].notEmpty:not(:focus) ~ span,label [type='tel']:not(:empty) ~ span,label [type='time']:focus ~ span,label [type='time'].notEmpty:not(:focus) ~ span,label [type='time']:not(:empty) ~ span,label [type='url']:focus ~ span,label [type='url'].notEmpty:not(:focus) ~ span,label [type='url']:not(:empty) ~ span,label [type='color']:focus ~ span,label [type='color'].notEmpty:not(:focus) ~ span,label [type='color']:not(:empty) ~ span,label textarea:focus ~ span,label textarea.notEmpty:not(:focus) ~ span,label textarea:not(:empty) ~ span,label input[type='text']:focus ~ span,label input[type='text'].notEmpty:not(:focus) ~ span,label input[type='text']:not(:empty) ~ span,label input:not([type]):focus ~ span,label input:not([type]).notEmpty:not(:focus) ~ span,label input:not([type]):not(:empty) ~ span{top:-11px;left:0;bottom:0;font-size:11px;opacity:1;color:black}label [type='text'] ~ span,label [type='password'] ~ span,label [type='date'] ~ span,label [type='datetime'] ~ span,label [type='datetime-local'] ~ span,label [type='month'] ~ span,label [type='week'] ~ span,label [type='email'] ~ span,label [type='number'] ~ span,label [type='search'] ~ span,label [type='tel'] ~ span,label [type='time'] ~ span,label [type='url'] ~ span,label [type='color'] ~ span,label textarea ~ span,label input[type='text'] ~ span,label input:not([type]) ~ span{position:absolute;pointer-events:none;left:10px;bottom:10px;top:7px;-webkit-transition:0.2s ease all;transition:0.2s ease all;color:#626262}label textarea{height:10rem;border-top-right-radius:3px;border-top-left-radius:3px}label [type="checkbox"].before-text{margin-bottom:0}input[type=number]{-moz-appearance:textfield}input[type=number] ::-webkit-inner-spin-button,input[type=number] ::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}nav.top-bar{z-index:1;white-space:nowrap;position:relative;background:#000;color:#fff;stroke:#fff;padding:0}nav.top-bar:not(.with-image){margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem)}@media print, screen and (min-width: 40em){nav.top-bar:not(.with-image){margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem)}}nav.top-bar .background-img{display:none}nav.top-bar>span>span>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}nav.top-bar>span .back-button{cursor:pointer;text-align:left}nav.top-bar>span .back-button svg{width:0.5rem;height:100%;vertical-align:bottom}nav.top-bar>span .back-button.hidden{visibility:hidden;display:initial}nav.top-bar>span .top-bar-title{margin-left:0.5rem}nav.top-bar>span #navbar-close-listener-container #navbar-close-listener{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:8999}nav.top-bar>span #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar>span #responsive-menu-toggle .menu-icon{vertical-align:-webkit-baseline-middle}nav.top-bar>span #responsive-menu{display:block;-webkit-transition-duration:0.5s;transition-duration:0.5s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}nav.top-bar>span #responsive-menu.visible .hidden-menu{right:0}nav.top-bar>span #responsive-menu .hidden-menu{position:fixed;-webkit-transform:none;-ms-transform:none;transform:none;display:inline-block;z-index:9000;border:1px solid #1e1c1c;padding:4.5rem 1.65rem 0rem 2.75rem;text-align:left;background:#000;margin-top:-1rem;right:-1000%}nav.top-bar>span #responsive-menu .hidden-menu li{font-size:1.15rem}nav.top-bar>span #responsive-menu .hidden-menu li.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu{top:auto}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>li,nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>.close-listener{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#ffffff transparent transparent;right:5px;left:auto;margin-top:-3px}nav.top-bar>span #responsive-menu .hidden-menu li a{white-space:nowrap}nav.top-bar>span #responsive-menu .hidden-menu li a img{display:none}nav.top-bar>span #responsive-menu .hidden-menu li a img+span{display:inherit}@media print, screen and (min-width: 40em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:none}}@media print, screen and (min-width: 25em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:none}}@media print, screen and (min-width: 64em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:none}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.smedium.hidden{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.medium.hidden{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.large.hidden{display:none}}nav.top-bar>span #responsive-menu .hidden-menu li.never{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.never.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.always{display:none}nav.top-bar>span .navbar-menu{background:initial;width:auto;z-index:9000}nav.top-bar>span .navbar-menu a img+span{display:none}nav.top-bar>span .navbar-menu li{position:relative;z-index:9000}nav.top-bar>span .navbar-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span .navbar-menu li.hidden{display:none}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu li.smedium{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu li li{display:table-cell}nav.top-bar>span .navbar-menu li.medium{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span .navbar-menu li.large{display:none}}nav.top-bar>span .navbar-menu li.never{display:none}nav.top-bar>span .navbar-menu .menu li,nav.top-bar>span .navbar-menu.menu li{z-index:100}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{width:100%}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.236rem}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.236rem}}nav.top-bar>span .navbar-menu .menu li.img a,nav.top-bar>span .navbar-menu.menu li.img a{padding-top:0;padding-bottom:0}nav.top-bar>span .navbar-menu .menu li.img a img,nav.top-bar>span .navbar-menu.menu li.img a img{vertical-align:inherit;max-height:1.8rem}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu{min-width:0}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu li,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu li{display:inherit}nav.top-bar>span .navbar-menu .menu>li.opens-right>a,nav.top-bar>span .navbar-menu.menu>li.opens-right>a{margin-right:0.5rem}nav.top-bar>span .navbar-menu .menu>li.opens-right>a:after,nav.top-bar>span .navbar-menu.menu>li.opens-right>a:after{right:0.1rem}nav.top-bar>span .submenu{background:#000}nav.top-bar.with-image{background:rgba(0,0,0,0);-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image *{-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image .background-img{display:initial;margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem);min-width:1.5625rem}@media print, screen and (min-width: 40em){nav.top-bar.with-image .background-img{margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem);min-width:2.34375rem}}nav.top-bar.with-image>span{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar.with-image>span>*{position:relative}nav.top-bar.with-image>span #responsive-menu-toggle{z-index:9100}nav.top-bar.with-image>span .navbar-menu{background:initial}nav.top-bar.with-image>span .submenu{background:#000}nav.top-bar.with-image.color-black{color:#000;stroke:#000}nav.top-bar.with-image.color-black #responsive-menu .hidden-menu{background:#fff;border-color:#7F7F7F}nav.top-bar.with-image.color-black #responsive-menu-toggle .menu-icon::after{background:#000;-webkit-box-shadow:0 7px 0 #000,0 14px 0 #000;box-shadow:0 7px 0 #000,0 14px 0 #000}nav.top-bar.with-image.color-black .submenu{background:#fff}nav.top-bar.with-image.color-white{color:#fff;stroke:#fff}nav.top-bar.with-image.color-white #responsive-menu .hidden-menu{background:#000;border-color:#1e1c1c}nav.top-bar.with-image.color-white #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar.with-image.color-white .submenu{background:#000}nav.top-bar.with-image.solid{background:#000}nav.top-bar.with-image.solid>span #responsive-menu .hidden-menu{border-color:#7F7F7F}nav.top-bar.with-image.solid>span .navbar-menu{background:inherit}nav.top-bar.with-image.solid.color-black{background:#fff}nav.top-bar.with-image.solid.color-white{background:#000}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{margin-right:0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a::after,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{right:0.1rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) ul a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>ul a{width:100%}.menu.is-accordion-submenu{margin-left:0.7rem}.menu{-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top;-webkit-transition:0.25s;transition:0.25s}#responsive-menu-toggle button{vertical-align:initial}.dropdown.menu>li.is-accordion-submenu-parent>ul.is-dropdown-submenu{left:auto;right:0}#navbar-fragment{width:100%}.logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.logo .logo-img{margin-left:1rem;margin-right:0.5rem;max-width:2.35rem}.tab-fragment .tab-names .tab-button{display:inline-block;border:1px solid #E6E6E6;border-top-left-radius:3px;border-top-right-radius:3px;background-color:#E6E6E6;padding:0.3rem}.tab-fragment .tab-names .tab-button.active{border-bottom:0;background-color:initial}.tab-fragment .tab-content{border:1px solid #E6E6E6;border-top:0;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.tab-fragment .tab-content .tab-site{display:none}.tab-fragment .tab-content .tab-site.active{display:initial}.tab-fragment .tab-button-template,.tab-fragment .tab-site-template{display:none}.tab-fragment .border-bottom{border-bottom:1px solid #E6E6E6}.alphabetic-list{height:100%;position:relative}.alphabetic-list .alphabetic-list-container{height:100%;overflow:auto}.alphabetic-list .alphabetic-list-sidealphabet{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{cursor:pointer;height:3.8%;display:block;text-align:center}@media print, screen and (max-width: 24.99875em){.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{font-size:0.8em}}.window-container{position:fixed;background:white;padding:0;border:1px solid #b1b1b1;border-radius:3px;cursor:-webkit-grab;cursor:grab;-webkit-transition:none;transition:none;min-width:10rem;min-height:3rem;-webkit-box-sizing:content-box;box-sizing:content-box;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.window-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.window-container.active-window{z-index:1100}.window-container .window-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.window-container .window-resize.edge{width:4px;height:4px}.window-container .window-resize.edge.nw{cursor:nw-resize}.window-container .window-resize.edge.ne{cursor:ne-resize}.window-container .window-resize.edge.sw{cursor:sw-resize}.window-container .window-resize.edge.se{cursor:se-resize}.window-container .window-resize.bottom,.window-container .window-resize.top{cursor:ns-resize;height:4px}.window-container .window-resize.left,.window-container .window-resize.right{cursor:ew-resize;width:4px}.window-container #title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0;padding-bottom:0.5rem;font-size:1rem;letter-spacing:0.2rem;font-weight:bold}.window-container #title-buttons .title-button{max-height:1rem;cursor:pointer;outline:none;display:inline-block}.window-container.moving{cursor:-webkit-grabbing;cursor:grabbing}.window-container.minimized{padding:0.2rem;width:0 !important;height:0 !important;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.window-container.minimized .window{display:none}.window-container.minimized .window-resize{display:none}.window-container.minimized #title{border:0;margin:0;height:100%}.window-container.minimized #title-buttons .title-button.hide-minimized{display:none}.window-container.maximized{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.maximized .window-resize{display:none}.window-container.maximized #title-buttons .title-button.hide-maximized{display:none}.window-container.popup{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.popup .window-resize{display:none}.window-container.popup #title-buttons .title-button.hide-popup{display:none}.window-container .window{overflow:auto;cursor:initial;position:relative}.image-selection{border:1px solid black;border-radius:5px;height:100%}.image-selection.highlight{background:rgba(173,216,230,0.4)}.image-selection>.flex-container{height:100%}.image-selection .image-selection-category-container{overflow-y:auto}.image-selection .image-selection-category-container .image-selection-category .image-selection-category-name{display:block}.image-selection .image-selection-preview{width:20%;min-width:4rem}.image-selection .image-selection-preview .image-selection-image-container{display:inline-block;height:100%;width:100%}.image-selection .image-selection-image-container{display:inline-block;width:4rem;cursor:pointer;padding:0.15rem}.image-selection .image-selection-image-container .image-selection-image{width:100%;height:calc(100% - 1.5rem);display:block;-o-object-fit:contain;object-fit:contain}.image-selection .image-selection-image-container .image-selection-image-name{width:100%;height:1.5rem;display:block;text-align:center;text-overflow:ellipsis;overflow:hidden}.max-height-100{max-height:100%}.overflow-hidden{overflow:hidden}body:not(.access-admin) .access-admin{display:none}body:not(.access-loggedIn) .access-loggedIn{display:none}body:not(.access-loggedOut) .access-loggedOut{display:none}body:not(.access-online) .access-online{display:none}body:not(.access-offline) .access-offline{display:none}body:not(.access-default) .access-default{display:none}.share-icon{width:1.5rem;max-width:1.5rem;margin:0.1rem}.share-icon svg{width:1.5rem;max-width:1.5rem}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{min-height:100%;width:100%;height:100%;letter-spacing:1px}.max-height{height:100%;min-height:100%}body{margin:0;padding:0;height:100%;width:100%;font-family:"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;font-weight:400;line-height:1.5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background:#fefefe;color:#0a0a0a}footer{border-top:#d8d8d8 solid 1px;text-align:center}.top-bar .top-bar-title strong{vertical-align:middle;display:inline-block}nav.top-bar{color:#FFF;font-size:20px;-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);padding:0.6rem;display:block}button.button,a.button{border-radius:2px}.fill-me{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.fill-me.vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.fill-me .grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flex-center{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.flex-center>*{max-height:100%}.menu a,.dropdown.menu a{padding:.4rem .5rem}svg path{fill:currentColor}div.mainContainer{position:relative;max-height:100%;max-width:100%;overflow:auto;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin:0.5rem}div.mainContainer>.row,div.mainContainer #main-content,div.mainContainer #site{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0}.inline-block{display:inline-block}.right{float:right}#logo-img{max-height:2.2rem}a{text-decoration:none;cursor:pointer;color:inherit}a.hidden-link{text-decoration:none;color:inherit}label{cursor:pointer}.align-right{text-align:right}.view-panel{display:none}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small #spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader #spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#b71c1a;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@-webkit-keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}#print-content{display:none}.action-button{max-height:1.7rem;margin-left:0.4rem;margin-right:0.4rem}.action-button:hover{background:#e8e8e8}.vcenter-container{width:100%;height:100%;display:table}.vcenter-container .vcenter{vertical-align:middle;display:table-cell;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.max-width{width:100%}input,button{letter-spacing:1px !important}.no-padding{padding:0;border:0}.center{text-align:center}@media print{nav,.mainContainer,footer,#styles{display:none !important}#print-content{display:block !important}}.overflow-y-auto{overflow-y:auto !important}.row.no-after:after{content:initial}.margin-bottom{margin-bottom:1rem}@media print, screen and (min-width: 25em){.margin-bottom{margin-bottom:2rem}}@media print, screen and (min-width: 40em){.margin-bottom{margin-bottom:3rem}}@media print, screen and (min-width: 64em){.margin-bottom{margin-bottom:4rem}}@media screen and (min-width: 75em){.margin-bottom{margin-bottom:5rem}}.font-small{font-size:0.7em}.border-bottom{border-bottom:1px solid #cacaca}.border-right{border-right:1px solid #cacaca}.border-left{border-left:1px solid #cacaca}img.logo{vertical-align:inherit;display:inline-block;height:auto;max-width:1.1rem;margin-right:2px}.align-center{text-align:center}hr.separator{margin:1rem 0}.button-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.button-line .button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-left:1px;margin-right:1px;padding:0.5rem 0.77rem}@media print, screen and (max-width: 24.99875em){.small-small{font-size:small}}select{border:0;padding:0.3rem 0.3rem}.hidden{display:none}.no-transition{-webkit-transition:none !important;transition:none !important}img.action-image{max-height:1.4rem;cursor:pointer}img.back-button{max-height:0.6rem;margin-right:0.2rem;cursor:pointer;vertical-align:inherit}.no-margin-bottom{margin-bottom:0}.settings-container{border:1px solid black;border-radius:2px;padding:0.3rem}@media print, screen and (min-width: 40em){.settings-container #settings-fragments-container{border-left:1px solid #cacaca}}.settings-container #settings-fragments-container #settings-fragments>*{display:none}.settings-container #settings-fragments-container #settings-fragments>*.active{display:block}.switch{position:relative;display:inline-block;height:initial}@media print, screen and (max-width: 24.99875em){.switch{font-size:0.6em}}@media print, screen and (max-width: 39.99875em){.switch{font-size:0.7em}}.switch input{display:none}.switch input:checked+.slider:before{-webkit-transform:translateX(1.5em);-ms-transform:translateX(1.5em);transform:translateX(1.5em)}.switch .slider{display:inline-block;position:relative;cursor:pointer;width:3em;height:1.5em;border-radius:1.5em;background-color:#ccc;-webkit-transition:.4s;transition:.4s;margin-bottom:0;margin-top:0}.switch .slider:before{position:absolute;content:"";height:1.1em;width:1.1em;left:0.15em;bottom:0.15em;background-color:white;-webkit-transition:.4s;transition:.4s;border-radius:50%}.switch img,.switch svg{width:1.4em;display:inline;vertical-align:initial}.switch img path,.switch svg path{stroke-color:inherit}label{font-size:1em !important}.setting-row:not(.hidden){line-height:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0.5rem 0.4rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;cursor:pointer;background:rgba(195,195,195,0.13)}.setting-row:not(.hidden)>*{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.setting-row:not(.hidden) input[type=checkbox]{margin:0}.zf-green{color:#68b604}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:left}input[type=checkBox].form-control{height:24px;height:1.5rem;width:100%}[type=submit]{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:39px;height:2.4375rem;padding:8px;padding:.5rem;border:1px solid #cacaca;margin:0 0 16px;margin:0 0 1rem;font-family:inherit;font-size:16px;font-size:1rem;color:#0a0a0a;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);border-radius:0;-webkit-transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:box-shadow .5s, border-color .25s ease-in-out;transition:box-shadow .5s, border-color .25s ease-in-out, -webkit-box-shadow .5s;-webkit-appearance:none;-moz-appearance:none}form ul li{color:red;font-size:12.8px;font-size:.8rem}.button-dropdown:after{border-color:#000 transparent transparent;border-width:.4em;border-style:solid;content:"";position:absolute;top:.4em;display:block;height:0;width:0;right:1em}.button-dropdown{position:relative;display:block;padding-right:2em}.button-dropdown.open:after{border-color:transparent transparent #000;top:0}a.ui-datepicker-next,a.ui-datepicker-prev{height:100% !important}div.container a.navbar-brand>img{display:inline;margin-right:4px}ul.menu.plain li.active a{background-color:#ededed;color:#000}ul.menu.plain li a{color:#000}ul.menu.plain li a:hover{color:#525252}ul.submenu{border-top:1px solid #bcbcbc;border-bottom:1px solid #bcbcbc;margin-left:10px}#cookie-compliance{line-height:1.2;font-size:0.8rem;width:100%;margin:0 0;padding:0.3rem 0}#cookie-compliance #close-cookie-msg{float:right;margin-bottom:0;margin-right:3px;padding:0.4rem 0.8rem}.menu-container .button{text-align:center;width:100%}.height-5{height:5%}.max-height-5{max-height:5%}.width-5{width:5%}.max-width-5{max-width:5%}.height-10{height:10%}.max-height-10{max-height:10%}.width-10{width:10%}.max-width-10{max-width:10%}.height-15{height:15%}.max-height-15{max-height:15%}.width-15{width:15%}.max-width-15{max-width:15%}.height-20{height:20%}.max-height-20{max-height:20%}.width-20{width:20%}.max-width-20{max-width:20%}.height-25{height:25%}.max-height-25{max-height:25%}.width-25{width:25%}.max-width-25{max-width:25%}.height-30{height:30%}.max-height-30{max-height:30%}.width-30{width:30%}.max-width-30{max-width:30%}.height-35{height:35%}.max-height-35{max-height:35%}.width-35{width:35%}.max-width-35{max-width:35%}.height-40{height:40%}.max-height-40{max-height:40%}.width-40{width:40%}.max-width-40{max-width:40%}.height-45{height:45%}.max-height-45{max-height:45%}.width-45{width:45%}.max-width-45{max-width:45%}.height-50{height:50%}.max-height-50{max-height:50%}.width-50{width:50%}.max-width-50{max-width:50%}.height-55{height:55%}.max-height-55{max-height:55%}.width-55{width:55%}.max-width-55{max-width:55%}.height-60{height:60%}.max-height-60{max-height:60%}.width-60{width:60%}.max-width-60{max-width:60%}.height-65{height:65%}.max-height-65{max-height:65%}.width-65{width:65%}.max-width-65{max-width:65%}.height-70{height:70%}.max-height-70{max-height:70%}.width-70{width:70%}.max-width-70{max-width:70%}.height-75{height:75%}.max-height-75{max-height:75%}.width-75{width:75%}.max-width-75{max-width:75%}.height-80{height:80%}.max-height-80{max-height:80%}.width-80{width:80%}.max-width-80{max-width:80%}.height-85{height:85%}.max-height-85{max-height:85%}.width-85{width:85%}.max-width-85{max-width:85%}.height-90{height:90%}.max-height-90{max-height:90%}.width-90{width:90%}.max-width-90{max-width:90%}.height-95{height:95%}.max-height-95{max-height:95%}.width-95{width:95%}.max-width-95{max-width:95%}.height-100{height:100%}.max-height-100{max-height:100%}.width-100{width:100%}.max-width-100{max-width:100%}.text-right{text-align:right}*{-webkit-transition:.25s ease-out, color .25s ease-out;transition:.25s ease-out, color .25s ease-out}body.red{background:#fff;color:#000}body.red #cookie-compliance{background-color:#870015;color:#fff}body.red #cookie-compliance a.link{color:#ff3d00;border-bottom-color:#ff3d00}body.red #cookie-compliance a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red a.link{text-decoration:none;color:#ff3d00;border-bottom:none}body.red a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red .loader #spinner{stroke:#b71c1a}body.red nav.top-bar{color:#fff;background:red}body.red .top-bar ul{background:red !important}body.red .top-bar ul a{color:#fff}body.red button.button,body.red a.button{background-color:red}body.red button.button.disabled,body.red button.button.disabled:hover,body.red button.button.disabled:focus,body.red button.button:hover,body.red a.button.disabled,body.red a.button.disabled:hover,body.red a.button.disabled:focus,body.red a.button:hover{background-color:red}body.red .switch input:checked+.slider{background-color:red}body.red .switch input:focus+.slider{-webkit-box-shadow:0 0 1px red;box-shadow:0 0 1px red}body.red label{color:#000}body.red .background .modal{background-color:#fefefe}body.red svg .fill-color,body.red svg.fill-color{fill:currentColor}body.red svg .fill-background,body.red svg.fill-background{fill:#fefefe}body.red label [type='text'],body.red label [type='password'],body.red label [type='date'],body.red label [type='datetime'],body.red label [type='datetime-local'],body.red label [type='month'],body.red label [type='week'],body.red label [type='email'],body.red label [type='number'],body.red label [type='search'],body.red label [type='tel'],body.red label [type='time'],body.red label [type='url'],body.red label [type='color'],body.red label textarea,body.red label input[type=text],body.red label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.red label [type='text']:focus,body.red label [type='password']:focus,body.red label [type='date']:focus,body.red label [type='datetime']:focus,body.red label [type='datetime-local']:focus,body.red label [type='month']:focus,body.red label [type='week']:focus,body.red label [type='email']:focus,body.red label [type='number']:focus,body.red label [type='search']:focus,body.red label [type='tel']:focus,body.red label [type='time']:focus,body.red label [type='url']:focus,body.red label [type='color']:focus,body.red label textarea:focus,body.red label input[type=text]:focus,body.red label input:not([type]):focus{border-bottom:solid #000}body.red label [type='text']:focus ~ span,body.red label [type='text'].notEmpty:not(:focus) ~ span,body.red label [type='password']:focus ~ span,body.red label [type='password'].notEmpty:not(:focus) ~ span,body.red label [type='date']:focus ~ span,body.red label [type='date'].notEmpty:not(:focus) ~ span,body.red label [type='datetime']:focus ~ span,body.red label [type='datetime'].notEmpty:not(:focus) ~ span,body.red label [type='datetime-local']:focus ~ span,body.red label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.red label [type='month']:focus ~ span,body.red label [type='month'].notEmpty:not(:focus) ~ span,body.red label [type='week']:focus ~ span,body.red label [type='week'].notEmpty:not(:focus) ~ span,body.red label [type='email']:focus ~ span,body.red label [type='email'].notEmpty:not(:focus) ~ span,body.red label [type='number']:focus ~ span,body.red label [type='number'].notEmpty:not(:focus) ~ span,body.red label [type='search']:focus ~ span,body.red label [type='search'].notEmpty:not(:focus) ~ span,body.red label [type='tel']:focus ~ span,body.red label [type='tel'].notEmpty:not(:focus) ~ span,body.red label [type='time']:focus ~ span,body.red label [type='time'].notEmpty:not(:focus) ~ span,body.red label [type='url']:focus ~ span,body.red label [type='url'].notEmpty:not(:focus) ~ span,body.red label [type='color']:focus ~ span,body.red label [type='color'].notEmpty:not(:focus) ~ span,body.red label textarea:focus ~ span,body.red label textarea.notEmpty:not(:focus) ~ span,body.red label input[type=text]:focus ~ span,body.red label input[type=text].notEmpty:not(:focus) ~ span,body.red label input:not([type]):focus ~ span,body.red label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.red label [type='text'] ~ span,body.red label [type='password'] ~ span,body.red label [type='date'] ~ span,body.red label [type='datetime'] ~ span,body.red label [type='datetime-local'] ~ span,body.red label [type='month'] ~ span,body.red label [type='week'] ~ span,body.red label [type='email'] ~ span,body.red label [type='number'] ~ span,body.red label [type='search'] ~ span,body.red label [type='tel'] ~ span,body.red label [type='time'] ~ span,body.red label [type='url'] ~ span,body.red label [type='color'] ~ span,body.red label textarea ~ span,body.red label input[type=text] ~ span,body.red label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.red label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.red input.notEmpty:invalid{background-color:rgba(255,0,0,0.65)}body.blue{background:#fff;color:#000}body.blue #cookie-compliance{background-color:#1a3062;color:#fff}body.blue #cookie-compliance a.link{color:#546cfe;border-bottom-color:#546cfe}body.blue #cookie-compliance a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue a.link{text-decoration:none;color:#546cfe;border-bottom:none}body.blue a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue .loader #spinner{stroke:#673AB7}body.blue nav.top-bar{color:#fff;background:#2c58ae}body.blue .top-bar ul{background:#2c58ae !important}body.blue .top-bar ul a{color:#fff}body.blue button.button,body.blue a.button{background-color:#2c58ae}body.blue button.button.disabled,body.blue button.button.disabled:hover,body.blue button.button.disabled:focus,body.blue button.button:hover,body.blue a.button.disabled,body.blue a.button.disabled:hover,body.blue a.button.disabled:focus,body.blue a.button:hover{background-color:#2c58ae}body.blue .switch input:checked+.slider{background-color:#2c58ae}body.blue .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #2c58ae;box-shadow:0 0 1px #2c58ae}body.blue label{color:#000}body.blue .background .modal{background-color:#fefefe}body.blue svg .fill-color,body.blue svg.fill-color{fill:currentColor}body.blue svg .fill-background,body.blue svg.fill-background{fill:#fefefe}body.blue label [type='text'],body.blue label [type='password'],body.blue label [type='date'],body.blue label [type='datetime'],body.blue label [type='datetime-local'],body.blue label [type='month'],body.blue label [type='week'],body.blue label [type='email'],body.blue label [type='number'],body.blue label [type='search'],body.blue label [type='tel'],body.blue label [type='time'],body.blue label [type='url'],body.blue label [type='color'],body.blue label textarea,body.blue label input[type=text],body.blue label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.blue label [type='text']:focus,body.blue label [type='password']:focus,body.blue label [type='date']:focus,body.blue label [type='datetime']:focus,body.blue label [type='datetime-local']:focus,body.blue label [type='month']:focus,body.blue label [type='week']:focus,body.blue label [type='email']:focus,body.blue label [type='number']:focus,body.blue label [type='search']:focus,body.blue label [type='tel']:focus,body.blue label [type='time']:focus,body.blue label [type='url']:focus,body.blue label [type='color']:focus,body.blue label textarea:focus,body.blue label input[type=text]:focus,body.blue label input:not([type]):focus{border-bottom:solid #000}body.blue label [type='text']:focus ~ span,body.blue label [type='text'].notEmpty:not(:focus) ~ span,body.blue label [type='password']:focus ~ span,body.blue label [type='password'].notEmpty:not(:focus) ~ span,body.blue label [type='date']:focus ~ span,body.blue label [type='date'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime']:focus ~ span,body.blue label [type='datetime'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime-local']:focus ~ span,body.blue label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.blue label [type='month']:focus ~ span,body.blue label [type='month'].notEmpty:not(:focus) ~ span,body.blue label [type='week']:focus ~ span,body.blue label [type='week'].notEmpty:not(:focus) ~ span,body.blue label [type='email']:focus ~ span,body.blue label [type='email'].notEmpty:not(:focus) ~ span,body.blue label [type='number']:focus ~ span,body.blue label [type='number'].notEmpty:not(:focus) ~ span,body.blue label [type='search']:focus ~ span,body.blue label [type='search'].notEmpty:not(:focus) ~ span,body.blue label [type='tel']:focus ~ span,body.blue label [type='tel'].notEmpty:not(:focus) ~ span,body.blue label [type='time']:focus ~ span,body.blue label [type='time'].notEmpty:not(:focus) ~ span,body.blue label [type='url']:focus ~ span,body.blue label [type='url'].notEmpty:not(:focus) ~ span,body.blue label [type='color']:focus ~ span,body.blue label [type='color'].notEmpty:not(:focus) ~ span,body.blue label textarea:focus ~ span,body.blue label textarea.notEmpty:not(:focus) ~ span,body.blue label input[type=text]:focus ~ span,body.blue label input[type=text].notEmpty:not(:focus) ~ span,body.blue label input:not([type]):focus ~ span,body.blue label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.blue label [type='text'] ~ span,body.blue label [type='password'] ~ span,body.blue label [type='date'] ~ span,body.blue label [type='datetime'] ~ span,body.blue label [type='datetime-local'] ~ span,body.blue label [type='month'] ~ span,body.blue label [type='week'] ~ span,body.blue label [type='email'] ~ span,body.blue label [type='number'] ~ span,body.blue label [type='search'] ~ span,body.blue label [type='tel'] ~ span,body.blue label [type='time'] ~ span,body.blue label [type='url'] ~ span,body.blue label [type='color'] ~ span,body.blue label textarea ~ span,body.blue label input[type=text] ~ span,body.blue label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.blue label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.blue input.notEmpty:invalid{background-color:rgba(44,88,174,0.65)}body.green{background:#fff;color:#000}body.green #cookie-compliance{background-color:#003613;color:#fff}body.green #cookie-compliance a.link{color:#009829;border-bottom-color:#009829}body.green #cookie-compliance a.link:hover{color:#009829;border-bottom-color:#009829}body.green a.link{text-decoration:none;color:#009829;border-bottom:none}body.green a.link:hover{color:#009829;border-bottom-color:#009829}body.green .loader #spinner{stroke:green}body.green nav.top-bar{color:#fff;background:green}body.green .top-bar ul{background:green !important}body.green .top-bar ul a{color:#fff}body.green button.button,body.green a.button{background-color:green}body.green button.button.disabled,body.green button.button.disabled:hover,body.green button.button.disabled:focus,body.green button.button:hover,body.green a.button.disabled,body.green a.button.disabled:hover,body.green a.button.disabled:focus,body.green a.button:hover{background-color:green}body.green .switch input:checked+.slider{background-color:green}body.green .switch input:focus+.slider{-webkit-box-shadow:0 0 1px green;box-shadow:0 0 1px green}body.green label{color:#000}body.green .background .modal{background-color:#fefefe}body.green svg .fill-color,body.green svg.fill-color{fill:currentColor}body.green svg .fill-background,body.green svg.fill-background{fill:#fefefe}body.green label [type='text'],body.green label [type='password'],body.green label [type='date'],body.green label [type='datetime'],body.green label [type='datetime-local'],body.green label [type='month'],body.green label [type='week'],body.green label [type='email'],body.green label [type='number'],body.green label [type='search'],body.green label [type='tel'],body.green label [type='time'],body.green label [type='url'],body.green label [type='color'],body.green label textarea,body.green label input[type=text],body.green label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.green label [type='text']:focus,body.green label [type='password']:focus,body.green label [type='date']:focus,body.green label [type='datetime']:focus,body.green label [type='datetime-local']:focus,body.green label [type='month']:focus,body.green label [type='week']:focus,body.green label [type='email']:focus,body.green label [type='number']:focus,body.green label [type='search']:focus,body.green label [type='tel']:focus,body.green label [type='time']:focus,body.green label [type='url']:focus,body.green label [type='color']:focus,body.green label textarea:focus,body.green label input[type=text]:focus,body.green label input:not([type]):focus{border-bottom:solid #000}body.green label [type='text']:focus ~ span,body.green label [type='text'].notEmpty:not(:focus) ~ span,body.green label [type='password']:focus ~ span,body.green label [type='password'].notEmpty:not(:focus) ~ span,body.green label [type='date']:focus ~ span,body.green label [type='date'].notEmpty:not(:focus) ~ span,body.green label [type='datetime']:focus ~ span,body.green label [type='datetime'].notEmpty:not(:focus) ~ span,body.green label [type='datetime-local']:focus ~ span,body.green label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.green label [type='month']:focus ~ span,body.green label [type='month'].notEmpty:not(:focus) ~ span,body.green label [type='week']:focus ~ span,body.green label [type='week'].notEmpty:not(:focus) ~ span,body.green label [type='email']:focus ~ span,body.green label [type='email'].notEmpty:not(:focus) ~ span,body.green label [type='number']:focus ~ span,body.green label [type='number'].notEmpty:not(:focus) ~ span,body.green label [type='search']:focus ~ span,body.green label [type='search'].notEmpty:not(:focus) ~ span,body.green label [type='tel']:focus ~ span,body.green label [type='tel'].notEmpty:not(:focus) ~ span,body.green label [type='time']:focus ~ span,body.green label [type='time'].notEmpty:not(:focus) ~ span,body.green label [type='url']:focus ~ span,body.green label [type='url'].notEmpty:not(:focus) ~ span,body.green label [type='color']:focus ~ span,body.green label [type='color'].notEmpty:not(:focus) ~ span,body.green label textarea:focus ~ span,body.green label textarea.notEmpty:not(:focus) ~ span,body.green label input[type=text]:focus ~ span,body.green label input[type=text].notEmpty:not(:focus) ~ span,body.green label input:not([type]):focus ~ span,body.green label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.green label [type='text'] ~ span,body.green label [type='password'] ~ span,body.green label [type='date'] ~ span,body.green label [type='datetime'] ~ span,body.green label [type='datetime-local'] ~ span,body.green label [type='month'] ~ span,body.green label [type='week'] ~ span,body.green label [type='email'] ~ span,body.green label [type='number'] ~ span,body.green label [type='search'] ~ span,body.green label [type='tel'] ~ span,body.green label [type='time'] ~ span,body.green label [type='url'] ~ span,body.green label [type='color'] ~ span,body.green label textarea ~ span,body.green label input[type=text] ~ span,body.green label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.green label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.green input.notEmpty:invalid{background-color:rgba(0,128,0,0.65)}body.pink{background:#fff;color:#000}body.pink #cookie-compliance{background-color:#70374a;color:#fff}body.pink #cookie-compliance a.link{color:#fe64af;border-bottom-color:#fe64af}body.pink #cookie-compliance a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink a.link{text-decoration:none;color:#fe64af;border-bottom:none}body.pink a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink .loader #spinner{stroke:hotpink}body.pink nav.top-bar{color:#fff;background:hotpink}body.pink .top-bar ul{background:hotpink !important}body.pink .top-bar ul a{color:#fff}body.pink button.button,body.pink a.button{background-color:hotpink}body.pink button.button.disabled,body.pink button.button.disabled:hover,body.pink button.button.disabled:focus,body.pink button.button:hover,body.pink a.button.disabled,body.pink a.button.disabled:hover,body.pink a.button.disabled:focus,body.pink a.button:hover{background-color:hotpink}body.pink .switch input:checked+.slider{background-color:hotpink}body.pink .switch input:focus+.slider{-webkit-box-shadow:0 0 1px hotpink;box-shadow:0 0 1px hotpink}body.pink label{color:#000}body.pink .background .modal{background-color:#fefefe}body.pink svg .fill-color,body.pink svg.fill-color{fill:currentColor}body.pink svg .fill-background,body.pink svg.fill-background{fill:#fefefe}body.pink label [type='text'],body.pink label [type='password'],body.pink label [type='date'],body.pink label [type='datetime'],body.pink label [type='datetime-local'],body.pink label [type='month'],body.pink label [type='week'],body.pink label [type='email'],body.pink label [type='number'],body.pink label [type='search'],body.pink label [type='tel'],body.pink label [type='time'],body.pink label [type='url'],body.pink label [type='color'],body.pink label textarea,body.pink label input[type=text],body.pink label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.pink label [type='text']:focus,body.pink label [type='password']:focus,body.pink label [type='date']:focus,body.pink label [type='datetime']:focus,body.pink label [type='datetime-local']:focus,body.pink label [type='month']:focus,body.pink label [type='week']:focus,body.pink label [type='email']:focus,body.pink label [type='number']:focus,body.pink label [type='search']:focus,body.pink label [type='tel']:focus,body.pink label [type='time']:focus,body.pink label [type='url']:focus,body.pink label [type='color']:focus,body.pink label textarea:focus,body.pink label input[type=text]:focus,body.pink label input:not([type]):focus{border-bottom:solid #000}body.pink label [type='text']:focus ~ span,body.pink label [type='text'].notEmpty:not(:focus) ~ span,body.pink label [type='password']:focus ~ span,body.pink label [type='password'].notEmpty:not(:focus) ~ span,body.pink label [type='date']:focus ~ span,body.pink label [type='date'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime']:focus ~ span,body.pink label [type='datetime'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime-local']:focus ~ span,body.pink label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.pink label [type='month']:focus ~ span,body.pink label [type='month'].notEmpty:not(:focus) ~ span,body.pink label [type='week']:focus ~ span,body.pink label [type='week'].notEmpty:not(:focus) ~ span,body.pink label [type='email']:focus ~ span,body.pink label [type='email'].notEmpty:not(:focus) ~ span,body.pink label [type='number']:focus ~ span,body.pink label [type='number'].notEmpty:not(:focus) ~ span,body.pink label [type='search']:focus ~ span,body.pink label [type='search'].notEmpty:not(:focus) ~ span,body.pink label [type='tel']:focus ~ span,body.pink label [type='tel'].notEmpty:not(:focus) ~ span,body.pink label [type='time']:focus ~ span,body.pink label [type='time'].notEmpty:not(:focus) ~ span,body.pink label [type='url']:focus ~ span,body.pink label [type='url'].notEmpty:not(:focus) ~ span,body.pink label [type='color']:focus ~ span,body.pink label [type='color'].notEmpty:not(:focus) ~ span,body.pink label textarea:focus ~ span,body.pink label textarea.notEmpty:not(:focus) ~ span,body.pink label input[type=text]:focus ~ span,body.pink label input[type=text].notEmpty:not(:focus) ~ span,body.pink label input:not([type]):focus ~ span,body.pink label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.pink label [type='text'] ~ span,body.pink label [type='password'] ~ span,body.pink label [type='date'] ~ span,body.pink label [type='datetime'] ~ span,body.pink label [type='datetime-local'] ~ span,body.pink label [type='month'] ~ span,body.pink label [type='week'] ~ span,body.pink label [type='email'] ~ span,body.pink label [type='number'] ~ span,body.pink label [type='search'] ~ span,body.pink label [type='tel'] ~ span,body.pink label [type='time'] ~ span,body.pink label [type='url'] ~ span,body.pink label [type='color'] ~ span,body.pink label textarea ~ span,body.pink label input[type=text] ~ span,body.pink label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.pink label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.pink input.notEmpty:invalid{background-color:rgba(255,105,180,0.65)}body.black{background:#fff;color:#000}body.black #cookie-compliance{background-color:#353535;color:#fff}body.black #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.black #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.black a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.black a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.black .loader #spinner{stroke:#000}body.black nav.top-bar{color:#fff;background:#000}body.black .top-bar ul{background:#000 !important}body.black .top-bar ul a{color:#fff}body.black button.button,body.black a.button{background-color:#000}body.black button.button.disabled,body.black button.button.disabled:hover,body.black button.button.disabled:focus,body.black button.button:hover,body.black a.button.disabled,body.black a.button.disabled:hover,body.black a.button.disabled:focus,body.black a.button:hover{background-color:#000}body.black .switch input:checked+.slider{background-color:#000}body.black .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.black label{color:#000}body.black .background .modal{background-color:#fefefe}body.black svg .fill-color,body.black svg.fill-color{fill:currentColor}body.black svg .fill-background,body.black svg.fill-background{fill:#fefefe}body.black label [type='text'],body.black label [type='password'],body.black label [type='date'],body.black label [type='datetime'],body.black label [type='datetime-local'],body.black label [type='month'],body.black label [type='week'],body.black label [type='email'],body.black label [type='number'],body.black label [type='search'],body.black label [type='tel'],body.black label [type='time'],body.black label [type='url'],body.black label [type='color'],body.black label textarea,body.black label input[type=text],body.black label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.black label [type='text']:focus,body.black label [type='password']:focus,body.black label [type='date']:focus,body.black label [type='datetime']:focus,body.black label [type='datetime-local']:focus,body.black label [type='month']:focus,body.black label [type='week']:focus,body.black label [type='email']:focus,body.black label [type='number']:focus,body.black label [type='search']:focus,body.black label [type='tel']:focus,body.black label [type='time']:focus,body.black label [type='url']:focus,body.black label [type='color']:focus,body.black label textarea:focus,body.black label input[type=text]:focus,body.black label input:not([type]):focus{border-bottom:solid #000}body.black label [type='text']:focus ~ span,body.black label [type='text'].notEmpty:not(:focus) ~ span,body.black label [type='password']:focus ~ span,body.black label [type='password'].notEmpty:not(:focus) ~ span,body.black label [type='date']:focus ~ span,body.black label [type='date'].notEmpty:not(:focus) ~ span,body.black label [type='datetime']:focus ~ span,body.black label [type='datetime'].notEmpty:not(:focus) ~ span,body.black label [type='datetime-local']:focus ~ span,body.black label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.black label [type='month']:focus ~ span,body.black label [type='month'].notEmpty:not(:focus) ~ span,body.black label [type='week']:focus ~ span,body.black label [type='week'].notEmpty:not(:focus) ~ span,body.black label [type='email']:focus ~ span,body.black label [type='email'].notEmpty:not(:focus) ~ span,body.black label [type='number']:focus ~ span,body.black label [type='number'].notEmpty:not(:focus) ~ span,body.black label [type='search']:focus ~ span,body.black label [type='search'].notEmpty:not(:focus) ~ span,body.black label [type='tel']:focus ~ span,body.black label [type='tel'].notEmpty:not(:focus) ~ span,body.black label [type='time']:focus ~ span,body.black label [type='time'].notEmpty:not(:focus) ~ span,body.black label [type='url']:focus ~ span,body.black label [type='url'].notEmpty:not(:focus) ~ span,body.black label [type='color']:focus ~ span,body.black label [type='color'].notEmpty:not(:focus) ~ span,body.black label textarea:focus ~ span,body.black label textarea.notEmpty:not(:focus) ~ span,body.black label input[type=text]:focus ~ span,body.black label input[type=text].notEmpty:not(:focus) ~ span,body.black label input:not([type]):focus ~ span,body.black label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.black label [type='text'] ~ span,body.black label [type='password'] ~ span,body.black label [type='date'] ~ span,body.black label [type='datetime'] ~ span,body.black label [type='datetime-local'] ~ span,body.black label [type='month'] ~ span,body.black label [type='week'] ~ span,body.black label [type='email'] ~ span,body.black label [type='number'] ~ span,body.black label [type='search'] ~ span,body.black label [type='tel'] ~ span,body.black label [type='time'] ~ span,body.black label [type='url'] ~ span,body.black label [type='color'] ~ span,body.black label textarea ~ span,body.black label input[type=text] ~ span,body.black label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.black label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.black input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.default{background:rgba(0,0,0,0);color:#000}body.default #cookie-compliance{background-color:#353535;color:#fff}body.default #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.default #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.default a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.default a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.default .loader #spinner{stroke:#000}body.default nav.top-bar{color:#fff;background:#000}body.default .top-bar ul{background:#000 !important}body.default .top-bar ul a{color:#fff}body.default button.button,body.default a.button{background-color:#000}body.default button.button.disabled,body.default button.button.disabled:hover,body.default button.button.disabled:focus,body.default button.button:hover,body.default a.button.disabled,body.default a.button.disabled:hover,body.default a.button.disabled:focus,body.default a.button:hover{background-color:#000}body.default .switch input:checked+.slider{background-color:#000}body.default .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.default label{color:#000}body.default .background .modal{background-color:#fefefe}body.default svg .fill-color,body.default svg.fill-color{fill:currentColor}body.default svg .fill-background,body.default svg.fill-background{fill:#fefefe}body.default label [type='text'],body.default label [type='password'],body.default label [type='date'],body.default label [type='datetime'],body.default label [type='datetime-local'],body.default label [type='month'],body.default label [type='week'],body.default label [type='email'],body.default label [type='number'],body.default label [type='search'],body.default label [type='tel'],body.default label [type='time'],body.default label [type='url'],body.default label [type='color'],body.default label textarea,body.default label input[type=text],body.default label input:not([type]){border-bottom:solid #000;background:rgba(0,0,0,0);color:#000}body.default label [type='text']:focus,body.default label [type='password']:focus,body.default label [type='date']:focus,body.default label [type='datetime']:focus,body.default label [type='datetime-local']:focus,body.default label [type='month']:focus,body.default label [type='week']:focus,body.default label [type='email']:focus,body.default label [type='number']:focus,body.default label [type='search']:focus,body.default label [type='tel']:focus,body.default label [type='time']:focus,body.default label [type='url']:focus,body.default label [type='color']:focus,body.default label textarea:focus,body.default label input[type=text]:focus,body.default label input:not([type]):focus{border-bottom:solid #000}body.default label [type='text']:focus ~ span,body.default label [type='text'].notEmpty:not(:focus) ~ span,body.default label [type='password']:focus ~ span,body.default label [type='password'].notEmpty:not(:focus) ~ span,body.default label [type='date']:focus ~ span,body.default label [type='date'].notEmpty:not(:focus) ~ span,body.default label [type='datetime']:focus ~ span,body.default label [type='datetime'].notEmpty:not(:focus) ~ span,body.default label [type='datetime-local']:focus ~ span,body.default label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.default label [type='month']:focus ~ span,body.default label [type='month'].notEmpty:not(:focus) ~ span,body.default label [type='week']:focus ~ span,body.default label [type='week'].notEmpty:not(:focus) ~ span,body.default label [type='email']:focus ~ span,body.default label [type='email'].notEmpty:not(:focus) ~ span,body.default label [type='number']:focus ~ span,body.default label [type='number'].notEmpty:not(:focus) ~ span,body.default label [type='search']:focus ~ span,body.default label [type='search'].notEmpty:not(:focus) ~ span,body.default label [type='tel']:focus ~ span,body.default label [type='tel'].notEmpty:not(:focus) ~ span,body.default label [type='time']:focus ~ span,body.default label [type='time'].notEmpty:not(:focus) ~ span,body.default label [type='url']:focus ~ span,body.default label [type='url'].notEmpty:not(:focus) ~ span,body.default label [type='color']:focus ~ span,body.default label [type='color'].notEmpty:not(:focus) ~ span,body.default label textarea:focus ~ span,body.default label textarea.notEmpty:not(:focus) ~ span,body.default label input[type=text]:focus ~ span,body.default label input[type=text].notEmpty:not(:focus) ~ span,body.default label input:not([type]):focus ~ span,body.default label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.default label [type='text'] ~ span,body.default label [type='password'] ~ span,body.default label [type='date'] ~ span,body.default label [type='datetime'] ~ span,body.default label [type='datetime-local'] ~ span,body.default label [type='month'] ~ span,body.default label [type='week'] ~ span,body.default label [type='email'] ~ span,body.default label [type='number'] ~ span,body.default label [type='search'] ~ span,body.default label [type='tel'] ~ span,body.default label [type='time'] ~ span,body.default label [type='url'] ~ span,body.default label [type='color'] ~ span,body.default label textarea ~ span,body.default label input[type=text] ~ span,body.default label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.default label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.default input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.dark{background:#000;color:#fff}body.dark #cookie-compliance{background-color:#4b4b4b;color:#fff}body.dark #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.dark #cookie-compliance a.link:hover{color:#fff;border-bottom-color:#fff}body.dark a.link{text-decoration:none;color:#fff;border-bottom:1px solid #fff}body.dark a.link:hover{color:#fff;border-bottom-color:#fff}body.dark .loader #spinner{stroke:#fff}body.dark nav.top-bar{color:#fff;background:#373737}body.dark .top-bar ul{background:#373737 !important}body.dark .top-bar ul a{color:#fff}body.dark button.button,body.dark a.button{background-color:#373737}body.dark button.button.disabled,body.dark button.button.disabled:hover,body.dark button.button.disabled:focus,body.dark button.button:hover,body.dark a.button.disabled,body.dark a.button.disabled:hover,body.dark a.button.disabled:focus,body.dark a.button:hover{background-color:#373737}body.dark .switch input:checked+.slider{background-color:#373737}body.dark .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #373737;box-shadow:0 0 1px #373737}body.dark label{color:#fff}body.dark .background .modal{background-color:#fefefe}body.dark svg .fill-color,body.dark svg.fill-color{fill:currentColor}body.dark svg .fill-background,body.dark svg.fill-background{fill:#fefefe}body.dark label [type='text'],body.dark label [type='password'],body.dark label [type='date'],body.dark label [type='datetime'],body.dark label [type='datetime-local'],body.dark label [type='month'],body.dark label [type='week'],body.dark label [type='email'],body.dark label [type='number'],body.dark label [type='search'],body.dark label [type='tel'],body.dark label [type='time'],body.dark label [type='url'],body.dark label [type='color'],body.dark label textarea,body.dark label input[type=text],body.dark label input:not([type]){border-bottom:solid #fff;background:#000;color:#fff}body.dark label [type='text']:focus,body.dark label [type='password']:focus,body.dark label [type='date']:focus,body.dark label [type='datetime']:focus,body.dark label [type='datetime-local']:focus,body.dark label [type='month']:focus,body.dark label [type='week']:focus,body.dark label [type='email']:focus,body.dark label [type='number']:focus,body.dark label [type='search']:focus,body.dark label [type='tel']:focus,body.dark label [type='time']:focus,body.dark label [type='url']:focus,body.dark label [type='color']:focus,body.dark label textarea:focus,body.dark label input[type=text]:focus,body.dark label input:not([type]):focus{border-bottom:solid #fff}body.dark label [type='text']:focus ~ span,body.dark label [type='text'].notEmpty:not(:focus) ~ span,body.dark label [type='password']:focus ~ span,body.dark label [type='password'].notEmpty:not(:focus) ~ span,body.dark label [type='date']:focus ~ span,body.dark label [type='date'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime']:focus ~ span,body.dark label [type='datetime'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime-local']:focus ~ span,body.dark label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.dark label [type='month']:focus ~ span,body.dark label [type='month'].notEmpty:not(:focus) ~ span,body.dark label [type='week']:focus ~ span,body.dark label [type='week'].notEmpty:not(:focus) ~ span,body.dark label [type='email']:focus ~ span,body.dark label [type='email'].notEmpty:not(:focus) ~ span,body.dark label [type='number']:focus ~ span,body.dark label [type='number'].notEmpty:not(:focus) ~ span,body.dark label [type='search']:focus ~ span,body.dark label [type='search'].notEmpty:not(:focus) ~ span,body.dark label [type='tel']:focus ~ span,body.dark label [type='tel'].notEmpty:not(:focus) ~ span,body.dark label [type='time']:focus ~ span,body.dark label [type='time'].notEmpty:not(:focus) ~ span,body.dark label [type='url']:focus ~ span,body.dark label [type='url'].notEmpty:not(:focus) ~ span,body.dark label [type='color']:focus ~ span,body.dark label [type='color'].notEmpty:not(:focus) ~ span,body.dark label textarea:focus ~ span,body.dark label textarea.notEmpty:not(:focus) ~ span,body.dark label input[type=text]:focus ~ span,body.dark label input[type=text].notEmpty:not(:focus) ~ span,body.dark label input:not([type]):focus ~ span,body.dark label input:not([type]).notEmpty:not(:focus) ~ span{color:#fff}body.dark label [type='text'] ~ span,body.dark label [type='password'] ~ span,body.dark label [type='date'] ~ span,body.dark label [type='datetime'] ~ span,body.dark label [type='datetime-local'] ~ span,body.dark label [type='month'] ~ span,body.dark label [type='week'] ~ span,body.dark label [type='email'] ~ span,body.dark label [type='number'] ~ span,body.dark label [type='search'] ~ span,body.dark label [type='tel'] ~ span,body.dark label [type='time'] ~ span,body.dark label [type='url'] ~ span,body.dark label [type='color'] ~ span,body.dark label textarea ~ span,body.dark label input[type=text] ~ span,body.dark label input:not([type]) ~ span{color:rgba(255,255,255,0.65)}body.dark label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.dark input.notEmpty:invalid{background-color:rgba(55,55,55,0.65)}@-webkit-keyframes tutorialPointer{0%{top:25%}100%{top:75%}}@keyframes tutorialPointer{0%{top:25%}100%{top:75%}}.tutorial-blanket{display:none;position:fixed;top:0;bottom:0;left:0;right:0;z-index:9001;background:rgba(55,55,55,0.51)}.tutorial .tutorial-blanket{display:block}.tutorial .tutorial-text{color:white;font-size:1.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:none !important;transition:none !important}.tutorial .tutorial-text *{-webkit-transition:none !important;transition:none !important}.tutorial.step-1 #level .segment-row{position:inherit}.tutorial.step-1 #level .segment-parent:nth-child(3),.tutorial.step-1 #level .segment-parent:nth-child(3).rotating{z-index:9900 !important}.tutorial.step-1 .tutorial-text .step-1{display:initial;z-index:9900 !important;position:relative}.tutorial.step-2 #level{z-index:9900 !important}.tutorial.step-2 .tutorial-text .step-2{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .tutorial-text .step-3{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .top-bar{z-index:9900 !important}.tutorial.step-3 .help-action{margin-top:0;padding-top:10px;position:relative;overflow:visible;margin-right:10px;-webkit-box-shadow:0 0 10px 5px #fff;box-shadow:0 0 10px 5px #fff}.tutorial.step-4 .tutorial-text .step-4{display:initial;z-index:9900 !important;position:relative}.tutorial.step-4 #level .segment-row{position:inherit}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating{z-index:9900 !important}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2 #tutorial-pointer,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}#tutorial-site{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#tutorial-site #tutorial-1,#tutorial-site #tutorial-2,#tutorial-site #tutorial-3{text-align:center;margin-top:0.7rem;margin-bottom:0.5rem}#tutorial-site #tutorial-2 .help-action{width:100%;margin-bottom:0.3rem}#tutorial-site #tutorial-3 .tutorial-wrapper{position:relative}#tutorial-site #tutorial-3 .tutorial-wrapper #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}body.red #tutorial-pointer{background:red}body.red #level-number-container.in-main-menu{background:#fff;border-color:#000}body.red .segment.segment-parent{border-color:#555}body.red .segment.segment-parent.layer-2{border-color:#000}body.red #site>:not(.won) .segment.locked{cursor:default;border-color:#870015;background-color:red !important}body.red #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.blue #tutorial-pointer{background:#2c58ae}body.blue #level-number-container.in-main-menu{background:#fff;border-color:#000}body.blue .segment.segment-parent{border-color:#555}body.blue .segment.segment-parent.layer-2{border-color:#000}body.blue #site>:not(.won) .segment.locked{cursor:default;border-color:#1a3062;background-color:#2c58ae !important}body.blue #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.green #tutorial-pointer{background:green}body.green #level-number-container.in-main-menu{background:#fff;border-color:#000}body.green .segment.segment-parent{border-color:#555}body.green .segment.segment-parent.layer-2{border-color:#000}body.green #site>:not(.won) .segment.locked{cursor:default;border-color:#003613;background-color:green !important}body.green #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.pink #tutorial-pointer{background:hotpink}body.pink #level-number-container.in-main-menu{background:#fff;border-color:#000}body.pink .segment.segment-parent{border-color:#555}body.pink .segment.segment-parent.layer-2{border-color:#000}body.pink #site>:not(.won) .segment.locked{cursor:default;border-color:#70374a;background-color:hotpink !important}body.pink #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.black #tutorial-pointer{background:#000}body.black #level-number-container.in-main-menu{background:#fff;border-color:#000}body.black .segment.segment-parent{border-color:#555}body.black .segment.segment-parent.layer-2{border-color:#000}body.black #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.default #tutorial-pointer{background:#000}body.default #level-number-container.in-main-menu{background:rgba(0,0,0,0);border-color:#000}body.default .segment.segment-parent{border-color:#555}body.default .segment.segment-parent.layer-2{border-color:#000}body.default #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.dark #tutorial-pointer{background:#373737}body.dark #level-number-container.in-main-menu{background:#000;border-color:#fff}body.dark .segment.segment-parent{border-color:#9b9b9b}body.dark .segment.segment-parent.layer-2{border-color:#fff}body.dark #site>:not(.won) .segment.locked{cursor:default;border-color:#4b4b4b;background-color:#373737 !important}body.dark #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#000}body.default{background:#0f0f49;color:white}body.default *{color:white}body.default #level-number-container.in-main-menu{background:#fff !important}body.default .segment.segment-parent:not(.layer-2){border-color:#005d07;background:rgba(109,255,127,0.2) !important}body.default #site>:not(.won) .segment.locked{background-color:transparent !important;border-color:#42ff4a !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.dark .switch input:checked+.slider{border-color:black}body.dark .switch .slider{border:solid 1px white;background-color:inherit;padding:1px;margin-bottom:0;margin-top:0}body.dark #site>:not(.won) .segment.locked.layer-2{border-color:#565656}body.dark .modal{background-color:#fefefe;border:1px solid white;border-radius:2px}body.black #site>:not(.won) .segment.locked{background-color:#9d9d9d !important;border-color:#6e6e6e !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.black #logo{border:1px solid grey;border-radius:50%}.no-transition{-webkit-transition:none !important;transition:none !important}.no-transition *{-webkit-transition:none !important;transition:none !important}nav.top-bar.title-bar{padding:0.3rem 0.6rem 0}#logo{max-width:2rem;-webkit-transition:none;transition:none}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.relative-level-number{position:relative}.relative-level-number #level-number-container{top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}#level-number-container,.level-counter{z-index:1;position:absolute;left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);border:3px solid white;border-radius:50%;display:table-cell;height:40px;width:40px;text-align:center;vertical-align:middle}#level-number-container.level-counter,.level-counter.level-counter{position:fixed !important;font-size:1.8rem}#level-number-container.level-counter.num-10,.level-counter.level-counter.num-10{font-size:1.3rem}#level-number-container.level-counter.num-100,.level-counter.level-counter.num-100{font-size:0.9rem}#level-number-container.level-counter.num-1000,.level-counter.level-counter.num-1000{font-size:0.65rem}#level-number-container.in-main-menu,.level-counter.in-main-menu{background:white;border-color:black;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container a,.level-counter a{width:initial !important}#level-number-container #level-number,#level-number-container a,.level-counter #level-number,.level-counter a{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-weight:bold}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}@media print, screen and (max-width: 24.99875em){.coin-counter{font-size:1rem}}.coin-counter :after{background-image:url(img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{line-height:1}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:20px;display:inline-block}@media print, screen and (min-width: 25em){#coin-container .coin{max-width:25px}}@media print, screen and (min-width: 40em){#coin-container .coin{max-width:30px}}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10 !important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;-webkit-transition:none;transition:none;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level *{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:initial;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-transition:none;transition:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:inherit;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none !important;animation:none !important;white-space:nowrap}.segment.segment-column{padding-top:4px}.segment.segment-column>.child-container>.segment{display:block;width:100%}.segment.segment-leaf{background-color:transparent !important;min-width:1em;padding:0.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:solid 1px #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:solid 3px #000000}#site>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.won #won-text{text-shadow:0 0.2rem 0.2rem #464646,0.6rem 0.8rem 0.4rem rgba(0,0,0,0.564706)}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.text-right{text-align:right}#continue-button{margin-bottom:2px}@media print, screen and (max-width: 24.99875em){#continue-button{margin-bottom:0;padding:0.3em .6em}}@media print, screen and (max-width: 24.99875em){#play-button{margin-bottom:0.5rem}}#help-button{margin:0;padding:0.4em 0.4em;max-width:3em}@media print, screen and (max-width: 39.99875em){#help-button{padding:0.2em 0.2em;max-width:2em}}.line-height-1{line-height:1}body{-ms-scroll-chaining:none;overscroll-behavior:contain;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#site{overflow:visible}div.mainContainer{overflow-x:hidden}.clickable{cursor:pointer}#share-button{overflow:hidden}#share-button svg{cursor:pointer;max-width:1.5rem}svg{color:black}svg .fill-background{fill:white}@-webkit-keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}.jump-animation{-webkit-animation-name:jump-animation;animation-name:jump-animation;-webkit-animation-duration:0.4s;animation-duration:0.4s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-delay:inherit;animation-delay:inherit}@-webkit-keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.shake .leaf-element{-webkit-animation:shake 0.15s;animation:shake 0.15s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}nav.top-bar{padding:0;margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){nav.top-bar{margin-left:-.9375rem;margin-right:-.9375rem}}nav.top-bar.with-image .background-img{display:none}nav.top-bar .background-img{display:none}nav.top-bar>.grid-container{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar>.grid-container>.grid-padding-x{display:block;padding:0.5rem;margin:0;padding-right:0}nav.top-bar>.grid-container>.grid-padding-x>.small-12{padding:0}nav.top-bar ul>li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}nav.top-bar ul>li.level-counter{margin-top:0.2rem}body.theme-blue{background:repeating-linear-gradient(300deg, #427081, #427081 9%, rgba(66,112,129,0.95) 13.5%, rgba(66,112,129,0.95) 21.5%, #427081 26%);color:#fff}body.theme-blue label{color:#fff}body.theme-blue .toast .message{background:#4d575a}body.theme-blue nav.top-bar,body.theme-blue nav.top-bar.with-image,body.theme-blue nav.top-bar.with-image.solid{background:#4d575a}body.theme-blue .button{background:#4d575a}body.theme-blue .switch input:checked+.slider{background:#d3e7eb}body.theme-blue #level-number-container{background:#427081}body.theme-blue svg{color:#000}body.theme-blue ul.menu li a{color:#fff}body.theme-blue a{color:#d3e7eb}body.theme-blue a.hidden-link{color:#fff}body.theme-blue #site>:not(.won) .segment.locked{background-color:#00000030}body.theme-blue #tutorial-pointer{background:#d3e7eb}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}html,body{min-height:100%;width:100%;height:100%;letter-spacing:1px;-ms-scroll-chaining:none;overscroll-behavior:none}a,a:hover{color:#ffca00}#site{position:relative;max-height:100%;max-width:100%;height:100%;width:100%}.right{float:right}.grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.overlay{left:0;top:0;right:0;bottom:0;background-color:rgba(192,192,192,0.5);-webkit-transform:none;-ms-transform:none;transform:none;z-index:10000}.loader.overlay svg{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small .spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader .spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#000;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.height-100{height:100%}.hidden{display:none}.vertical-middle{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.vertical-bottom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:end;-webkit-align-items:end;-ms-flex-align:end;align-items:end}.horizontal-center{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{width:100%}h1.inline{display:inline-block}h2.inline{display:inline-block}h3.inline{display:inline-block}h4.inline{display:inline-block}h5.inline{display:inline-block}h6.inline{display:inline-block}img.back-button{cursor:pointer;max-height:1.1rem;margin-right:0.2rem;margin-bottom:0.65rem}a.hidden-link{color:inherit}#main-content-container{overflow:auto;width:100%}#main-content-container>.grid-x{overflow:auto;margin-top:0.5rem;margin-bottom:0.5rem}#main-content-container #main-content{padding-top:0;padding-bottom:0} /*# sourceURL=webpack://./node_modules/foundation-sites/scss/util/_breakpoint.scss */ /*# sourceURL=webpack://./node_modules/foundation-sites/scss/components/_reveal.scss */ @@ -71,6 +71,7 @@ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_tabbedFragment.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_alphabeticList.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_abstractWindow.scss */ +/*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_imageSelectionElement.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_index.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites-user-management/src/client/scss/_rights.scss */ /*# sourceURL=webpack://./src/client/sass/lib/_share.scss */ @@ -86,4 +87,4 @@ /*# sourceURL=webpack://./src/client/sass/_navbarOverride.scss */ /*# sourceURL=webpack://./src/client/sass/_themeBlue.scss */ /*# sourceURL=webpack://./src/client/sass/index.scss */ -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fYnJlYWtwb2ludC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19yZXZlYWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdmVuZG9yL25vcm1hbGl6ZS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9fZ2xvYmFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX2ZvdW5kYXRpb25TZXR0aW5ncy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX3RleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fdW5pdC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2xhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19oZWxwLXRleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19maWVsZHNldC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19lcnJvci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy90eXBvZ3JhcGh5L19iYXNlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX2hlbHBlcnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdHlwb2dyYXBoeS9fYWxpZ25tZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX3ByaW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NsYXNzZXMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZ3V0dGVycy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NlbGwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fbWF0aC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19sYXlvdXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fY29sbGFwc2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fcG9zaXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZnJhbWUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnV0dG9uLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jbG9zZS1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbGFiZWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zd2l0Y2guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fY29sb3Iuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fY2FsbG91dC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdG9vbHRpcC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVkaWEtb2JqZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX29yYml0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFicy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190aHVtYm5haWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVudS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19tZW51LWljb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZHJpbGxkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fb2ZmLWNhbnZhcy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zdGlja3kuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGl0bGUtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZmxvYXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fZmxleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19mbGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fdG9hc3Quc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fZGlhbG9nLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3NldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Zvcm0uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fbmF2YmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX3RhYmJlZEZyYWdtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2FscGhhYmV0aWNMaXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Fic3RyYWN0V2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy11c2VyLW1hbmFnZW1lbnQvc3JjL2NsaWVudC9zY3NzL19yaWdodHMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3NoYXJlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19jb3JlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19jb3JlU2V0dGluZ3Muc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3NldHRpbmdzU2l0ZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3RoZW1lLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3R1dG9yaWFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3dvcmRyb3RhdG9yVGhlbWUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy93b3JkUm90YXRvci5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL19hbmltYXRpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX25hdmJhck92ZXJyaWRlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3RoZW1lQmx1ZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2luZGV4LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0xRLDJDQ25JTixpREFDRSxVQUFXLENBQ1gsU0FBVSxDQUNWLGFBQWMsQ0FDZixDQ2hERCwyRUFBQSxDQUE0RSxLQVMxRSxnQkFBaUIsQ0FDakIsNkJBQThCLENBQy9CLEtBUUMsUUFBUyxDQUNWLEdBTUMsYUFBYyxDQUNkLGVBQWdCLENBQ2pCLEdBU0MsOEJBQXVCLENBQXZCLHNCQUF1QixDQUN2QixRQUFTLENBQ1QsZ0JBQWlCLENBQ2xCLElBTUMsZ0NBQWlDLENBQ2pDLGFBQWMsQ0FDZixFQVFDLDRCQUE2QixDQUM5QixZQU1DLGtCQUFtQixDQUNuQix5QkFBMEIsQ0FDMUIsd0NBQWlCLENBQWpCLGdDQUFpQyxDQUNsQyxTQU1DLGtCQUFtQixDQUNwQixjQVFDLGdDQUFpQyxDQUNqQyxhQUFjLENBQ2YsTUFLQyxhQUFjLENBQ2YsUUFPQyxhQUFjLENBQ2Qs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QUlDLHdCVFdnQixDU1ZoQixrQlQyWCtCLENTMVhoQyxtQkFJQyxZQUFhLENBQ2QsaUJBR0MsV0FBWSxDQUNaLHFCQUFzQixDQUN2Qix1QkFFQyxhQUFjLENBQ2QsZ0JBQWlCLENBQ2xCLDhCQ3JDQyxvQlY4QmtCLENVN0JsQix3QkFBK0QsQ0FFL0QseURBQ0UsYVYwQmdCLENVM0JsQixnREFDRSxhVjBCZ0IsQ1UzQmxCLG9EQUNFLGFWMEJnQixDVTNCbEIscURBQ0UsYVYwQmdCLENVM0JsQiwyQ0FDRSxhVjBCZ0IsQ1V6QmpCLGtCQTBCQyxhVkRnQixDVUVqQixZQXJCSCxZQUFhLENBQ2IsaUJBQWdDLENBQ2hDLGtCUDhCdUQsQ081QnZELGdCUDRCdUQsQ08zQnZELGdCVjZCdUIsQ1U1QnZCLGFWYW9CLENVTXBCLHVCQUlJLGFBQWMsQ0FDZixvRUNnS0QsUUFBUyxDQUNULFNBQVUsQ0FDWCxFQUlDLGtCWHpGMEIsQ1cyRjFCLGlCQUFrQixDQUNsQixlWDdGc0IsQ1c4RnRCLGlDWDVGeUMsQ1c2RjFDLEtBS0MsaUJBQWtCLENBQ2xCLG1CQUFvQixDQUNyQixTQUtDLGdCWG5McUIsQ1dvTHJCLG1CQUFvQixDYnRMdEIsTWEyTEUsYVhuSGlCLENXb0hqQixtQkFBb0IsQ0FDckIsMENBU0MsOERYMU1xRSxDVzJNckUsaUJYdkpzQixDV3dKdEIsa0JYdk15QixDV3dNekIsYVh2SmtCLENXd0psQixpQ1huSXNDLENXeUh4QyxrSEFhSSxhQUFjLENBQ2QsYVh4TmUsQ1d5TmhCLE9BWU8sZ0JSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksaUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksbUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksa0JSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksbUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksY1IzTjZDLENRdU83QyxlWHBMVyxDVzRMWCxZQUFhLENBT2IsbUJYbE1pQixDSm9DckIsMkNlK0hBLE9BSUksY1IzTjZDLENRdU5qRCxPQUlJLGdCUjNONkMsQ1F1TmpELE9BSUksbUJSM042QyxDUXVOakQsT0FJSSxtQlIzTjZDLENRdU5qRCxPQUlJLGlCUjNONkMsQ1F1TmpELE9BSUksY1IzTjZDLENRd1BoRCxDYnhSUCxFYStSRSxtQkFBb0IsQ0FDcEIsYVhqUm9CLENXa1JwQixvQlg1S3lCLENXOEt6QixjQUFlLENBTGpCLGdCQVNJLGFYbkwyRCxDVzBLL0QsTUFnQkksUUFBUyxDYmpVYixHYXVVRSxVQUFXLENBRVgsZVJ0UnFELENRdVJyRCxRQUFTLENBQ1QsbUJYL0x5QixDV2lNekIsWUFBYSxDQUNiLGNBQWUsQ0FDZiwrQlh0U2lCLENXdVNqQixhQUFjLENBQ2YsU0FNQyxrQlh6TjBCLENXME4xQiwyQlh4TXlCLENXeU16QixlWDVOc0IsQ1c2TnZCLEdBSUMsaUJBQWtCLENBQ25CLEdBSUMsbUJYbE5zQixDV21OdEIsb0JYck5rQixDV3NObkIsR0FJQyxtQlh4TnNCLENXeU52Qix3QkFLRyxtQlg3TjJCLENXOE4zQixlQUFnQixDQUNqQixHQUtELGtCWG5PeUIsQ1drTzNCLE1BSUksbUJYcE84QixDV3FPOUIsZ0JYclVtQixDV3NVcEIsV0FLRCxlWGxRMEIsQ1dtUTFCLG9DUjlVcUQsQ1ErVXJELDZCWHpWaUIsQ1dzVm5CLHdCQU1JLGVYeFFvQixDV3lRcEIsYVg1VmEsQ1c2VmQsaUJBY0QsZ0NYMVdXLENXMldYLFdBQVksQ0FDWixvQkFBcUIsQ0FDdEIsT0FJQyxRQUFTLENBQ1YsSUFXQyxRQUFTLENBQ1Qsd0JSalhTLENRbVhULHdCWG5ZZ0IsQ1dxWWhCLHdEWHpVbUUsQ1cwVW5FLGFYbllXLENXd1laLFdDbFZDLGdCWjBFeUIsQ1l6RXpCLG1CWjBFNEIsQ1l4RTVCLGtCWmhEeUIsQ1lpRHpCLGVabUVz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SHJGSSxrQkdxRkwsQ0hyRksscUJHcUZMLENIckZLLGlCR3FGTCxDSHJGSyxhR3FGTCxDQUFDLGNIL0VHLFVHd0NDLENBQUksZ0JIcENILFVHb0NELENBQUkseVBIcEJGLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksb0NuQnNIa0IscVJtQnZINUIsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CZ0h5Qyx1UW1CbEhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLDJDbkJnSHlDLHlQbUJsSGxDLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsK01BWTJDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLGlCSDlCZ0IsY0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLFVJc0RmLENBQW1ELG9DdkJvQ25CLHNCbUI5R2Isa0JHa0R0QixDSGxEc0Isb0JHa0R0QixDSGxEc0IsZ0JHa0R0QixDSGxEc0IsWUdrRHRCLENBQUMsVUF2Q0ksQ0FBSSwrUEhOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsd0JIdkN1QixVR0FuQixDQUFJLG1CSFNVLGNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxvQkp0RGxDLGVJc0RqQixDQUFtRCxvQkp0RGxDLGVJc0RqQixDQUFtRCxvQkp0RGxDLFVJc0RqQixDQUFtRCxDSm5EdEQsMkNuQmtGeUMscUJtQnpHcEIsa0JHa0RyQixDSGxEcUIsb0JHa0RyQixDSGxEcUIsZ0JHa0RyQixDSGxEcUIsWUdrRHJCLENBQUMsVUF2Q0ksQ0FBSSxrUEhOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsdUJIdkNzQixVR0FsQixDQUFJLGtCSFNTLGNJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFVJc0RoQixDQUFtRCxDSm5EdEQsMkNuQmtGeUMsb0JtQnpHckIsa0JHa0RwQixDSGxEb0Isb0JHa0RwQixDSGxEb0IsZ0JHa0RwQixDSGxEb0IsWUdrRHBCLENBQUMsVUF2Q0ksQ0FBSSxxT0hOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsc0JIdkNxQixVR0FqQixDQUFJLGlCSFNRLGNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxVSXNEZixDQUFtRCxDSm5EdEQsa0NBSzhCLFVBQzFCLENBQUksa0NBSXNCLFdBQ3pCLENBQUksZUE4QkEsb0JDdkdvQixDQUFpQyxxQkFBakMsQ0FBaUMsMkNwQmdKckIsZW1CekNoQyxxQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQyxDRHNJbEUscUJBM0JRLDBCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxvQkFBakMsQ0FBaUMsMkNwQnVJbkIscUJtQnJDckMsMkJHN0J1QyxDQUFnRCxvQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQyxDRDJHMUQscUJBckNBLFVHN0JHLENBQUksdUJIaUNMLFVHakNDLENBQUksd0JIeUNGLDhCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0QseUJIYW5GLCtCR2JtQyxDQUFnRCx5QkhhbkYsK0JHYm1DLENBQWdELHlCSGFuRiwwQkdibUMsQ0FBZ0Qsb0N0QnVFeEQsNkJtQnRFekIsVUc3QkwsQ0FBSSwrQkhpQ0csVUdqQ1AsQ0FBSSwwQkh5Q0EsOEJHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwyQkhhakYsK0JHYmlDLENBQWdELDJCSGFqRiwrQkdiaUMsQ0FBZ0QsMkJIYWpGLDBCR2JpQyxDQUFnRCxDSGU3RiwyQ25CbUQyQyxxQm1CakV2QyxVRzdCRyxDQUFJLHVCSGlDTCxVR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELDRCSENsRixVRzdCSixDQUFJLDhCSGlDRSxVR2pDTixDQUFJLHlCSHlDRCwrQkdibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMkJHYmtDLENBQWdELENIZTdGLDJDbkJtRDJDLDJCbUJqRWpDLFVHN0JILENBQUksNkJIaUNDLFVHakNMLENBQUksd0JIeUNGLCtCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QsQ0hlN0YsZ0NBaURjLHFCQzlJaUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLGdDbUJGN0Isc0JDOUlpQixDQUFpQyxxQkFBakMsQ0FBaUMsQ0RnSmhFLDJDQUxZLHFCQzNJbUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLDJDbUJML0Isc0JDM0ltQixDQUFpQyxxQkFBakMsQ0FBaUMsQ0RzSmhFLHNCQUdNLHFCQ3pKeUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLHNCbUJTckMsc0JDekp5QixDQUFpQyxxQkFBakMsQ0FBaUMsQ0QySmhFLGtCSzNKTSxVRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFdEaUhELENBQW1ELG9DdkJvQ25CLG9Cd0JySi9CLFVEaUhELENBQW1ELG9CQ2pIbEQsU0RpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsU0RpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELGVEaUhELENBQW1ELG9CQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELDJDeEI4STZDLG1Cd0JoSnJDLFVEaUhELENBQW1ELG1CQ2pIbEQsU0RpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsU0RpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELGVEaUhELENBQW1ELG1CQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELDJDeEI4STZDLGtCd0JoSnJDLFVEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELGdDQUZRLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYsK0JGOEV1QyxDQUFnRCxnQ0U5RXZGLHlCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYsK0JGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwyQkY4RXVDLENBQWdELG9DdEJ1RXhELGtDd0JySi9CLDBCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYsK0JGOEV1QyxDQUFnRCxrQ0U5RXZGLHlCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYsK0JGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2RiwyQkY4RXVDLENBQWdELENFNUUvRiwyQ3hCOEk2QyxnQ3dCaEpyQywyQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwwQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsNEJGOEV1QyxDQUFnRCxpQ0U5RXZGLDJCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsZ0NGOEV1QyxDQUFnRCxpQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsZ0NGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2Riw0QkY4RXVDLENBQWdELENFNUUvRiwyQ3hCOEk2QyxnQ3dCaEpyQywyQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwwQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsNEJGOEV1QyxDQUFnRCxDRTVFL0YsdUJMcU15QixjTTlNSyxDQUFDLGFBQUQsQ0FBQyw2QkFHckIsY0FFc0IsQ0FBQyxhQUFELENBQUMsZ0NBc0JkLGNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxVRjZGYixDQUFtRCxvQ3ZCb0NuQixrQ3lCaklsQixjRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsVUY2RmYsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUI1SHpCLGNGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxVRjZGZCxDQUFtRCxDRTNGaEQsMkN6QjBIbUMsZ0N5QjVIMUIsY0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLFVGNkZiLENBQW1ELENFM0ZoRCx3Qk51TGdCLGNNN0tJLENBQUMsYUFBRCxDQUFDLDhCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxvQ3pCZ0hJLHlCbUJrRFosY005TUcsQ0FBQyxhQUFELENBQUMsK0JBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLENBRTdCLG9DekJxSm1DLGtDeUIxSXBCLGNGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsb0N5QmpJbEIsY0Y2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELHFDRTdGcEMsZUY2RmYsQ0FBbUQscUNFN0ZwQyxlRjZGZixDQUFtRCxxQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCxvQ3pCK0g2QixtQ3lCMUluQixjRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsb0NFdEdyQyxlRnNHZCxDQUFtRCxvQ0V0R3JDLGVGc0dkLENBQW1ELG9DRXRHckMsVUZzR2QsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLGtDeUIxSXBCLGNGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsMEJtQndEWCxjTTdLRSxDQUFDLGFBQUQsQ0FBQyxnQ0FHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsQ0FFL0IsMkN6QnlHeUMsd0JtQnVEbkIsY005TUksQ0FBQyxhQUFELENBQUMsOEJBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLENBRTdCLDJDekJnSnlDLGlDeUJySTFCLGNGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3RDLGVGc0diLENBQW1ELGtDRXRHdEMsZUZzR2IsQ0FBbUQsa0NFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsbUN5QmpJbEIsY0Y2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGcEMsZUY2RmYsQ0FBbUQsb0NFN0ZwQyxlRjZGZixDQUFtRCxvQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxrQ3lCNUh6QixjRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsVUY2RmQsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUI1SDFCLGNGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxVRjZGYixDQUFtRCxDRTNGaEQsMkN6QjBIbUMseUJtQjZEbEIsY003S0csQ0FBQyxhQUFELENBQUMsK0JBR3JCLGVBRXdCLENBQUMsY0FBRCxDQUFDLENBRS9CLDJDekJ5R3lDLHVCbUJ1RHBCLGNNOU1LLENBQUMsYUFBRCxDQUFDLDZCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QiwyQ3pCZ0p5QyxnQ3lCckkxQixjRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLGtDeUJqSWxCLGNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsZUY2RmYsQ0FBbUQsbUNFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsMkN6QjBIbUMsaUN5QnJJekIsY0ZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGtDRXRHckMsZUZzR2QsQ0FBbUQsa0NFdEdyQyxlRnNHZCxDQUFtRCxrQ0V0R3JDLFVGc0dkLENBQW1ELENFcEdoRCwyQ3pCbUltQyxnQ3lCNUgxQixjRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsVUY2RmIsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLHdCbUI2RG5CLGNNN0tJLENBQUMsYUFBRCxDQUFDLDhCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxDQUUvQixnQk5vTGMsY092TVcsQ0FBQywrQlAyTUssOEJPM01OLENBQUMsZ0JQdU1aLG9CT3ZNVyxDQUFDLCtCUDJNSyxvQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssK0JPM01OLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHFDTzNNUCxDQUFDLG9DMUJpSVMsa0JtQnNFbkIsY092TVMsQ0FBQyxpQ1AyTU8sOEJPM01SLENBQUMsa0JQdU1WLG9CT3ZNUyxDQUFDLGlDUDJNTyxvQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixlT3ZNUyxDQUFDLGlDUDJNTywrQk8zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLGVPdk1TLENBQUMsaUNQMk1PLCtCTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYsZU92TVMsQ0FBQyxpQ1AyTU8sK0JPM01SLENBQUMsbUJQdU1ULHFCT3ZNUSxDQUFDLGtDUDJNUSxxQ08zTVQsQ0FBQyxtQlB1TVQscUJPdk1RLENBQUMsa0NQMk1RLHFDTzNNVCxDQUFDLENQNk0xQiwyQ25CakZ5QyxpQm1CMkUxQixjT3ZNVSxDQUFDLGdDUDJNTSwrQk8zTVAsQ0FBQyxpQlB1TVgsb0JPdk1VLENBQUMsZ0NQMk1NLHFDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLGVPdk1VLENBQUMsZ0NQMk1NLGdDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgsZU92TVUsQ0FBQyxnQ1AyTU0sZ0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxlT3ZNVSxDQUFDLGdDUDJNTSxnQ08zTVAsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHNDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8sc0NPM01SLENBQUMsQ1A2TTFCLDJDbkJqRnlDLGdCbUIyRTNCLGNPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGdCUHVNWixvQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssZ0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSyxnQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLGdDTzNNTixDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxDUDZNMUIsUUF6SnFCLG1CRXRFakIsQ0ZzRWlCLG9CRXRFakIsQ0ZzRWlCLG1CRXRFakIsQ0ZzRWlCLFlFdEVqQixDQUFJLDJCQUZVLENBRVYsNEJBRlUsQ0FFViwrQkFGVSxDQUVWLDJCQUZVLENBRVYsdUJBRlUsQ0FBTSxjRnFQcEIsV0c5SU0sQ0FBSSxlQUNJLENBQUksY0hpSmxCLFdHdk1DLENBQUksZ0JIMk1ILFdHM01ELENBQUkseVBIeU5GLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksb0NuQnZIa0IscVJtQnNINUIsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CN0h5Qyx1UW1CMkhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLDJDbkI3SHlDLHlQbUIySGxDLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsK01BVzJDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLGlCSDhNVSxlSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFdJdExULENBQW1ELG9DdkJvQ25CLHNCbUI4SG5CLGtCRzFMaEIsQ0gwTGdCLG9CRzFMaEIsQ0gwTGdCLGdCRzFMaEIsQ0gwTGdCLFlHMUxoQixDQUFDLFdBdkNJLENBQUksK1BIc09rQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyx3QkhxTWlCLFdHNU9iLENBQUksbUJIcVBJLGVJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsVUl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxVSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLFVJdExWLENBQW1ELG9CSnNMeEMsZ0JJdExYLENBQW1ELG9CSnNMeEMsZ0JJdExYLENBQW1ELG9CSnNMeEMsV0l0TFgsQ0FBbUQsQ0p5THBELDJDbkIxSnVDLHFCbUJtSTFCLGtCRzFMZixDSDBMZSxvQkcxTGYsQ0gwTGUsZ0JHMUxmLENIMExlLFlHMUxmLENBQUMsV0F2Q0ksQ0FBSSxrUEhzT2tDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLHVCSHFNZ0IsV0c1T1osQ0FBSSxrQkhxUEcsZUl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxVSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFVJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsVUl0TFQsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxXSXRMVixDQUFtRCxDSnlMcEQsMkNuQjFKdUMsb0JtQm1JM0Isa0JHMUxkLENIMExjLG9CRzFMZCxDSDBMYyxnQkcxTGQsQ0gwTGMsWUcxTGQsQ0FBQyxXQXZDSSxDQUFJLHFPSHNPa0Msa0JHL0wzQyxDSCtMMkMscUJHL0wzQyxDSCtMMkMsaUJHL0wzQyxDSCtMMkMsYUcvTDNDLENBQUMsc0JIcU1lLFdHNU9YLENBQUksaUJIcVBFLGVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsV0l0TFQsQ0FBbUQsQ0p5THBELGdDQVNZLG1CQ25UZSxDQUFpQyxzQkFBakMsQ0FBaUMsMkNwQmdKckIsZ0NtQm1LM0Isb0JDblRlLENBQWlDLHVCQUFqQyxDQUFpQyxDRHFUOUQsc0JBR00sbUJDeFR1QixDQUFpQyxzQkFBakMsQ0FBaUMsMkNwQmdKckIsc0JtQndLbkMsb0JDeFR1QixDQUFpQyx1QkFBakMsQ0FBaUMsQ0QwVDlELGVBbk5TLG1CQ3ZHb0IsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMsb0JDdkdvQixDQUFpQyx1QkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwyQkc3QnVDLENBQWdELGtCRnJFaEUsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDRCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxzQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxXRzdCRyxDQUFJLHVCSGlDTCxXR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFdHN0JMLENBQUksK0JIaUNHLFdHakNQLENBQUksMEJIeUNBLCtCR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsZ0NHYmlDLENBQWdELDJCSGFqRiwyQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCw0QkhDbEYsV0c3QkosQ0FBSSw4QkhpQ0UsV0dqQ04sQ0FBSSx5Qkh5Q0QsZ0NHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCwwQkhhbEYsaUNH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QUksQ0FDYiwyQ25CelB1QyxnQ21CdVBmLFdBQ2YsQ0FBSSxDQUNiLDJDbkJ6UHVDLCtCbUJ1UGhCLFdBQ2QsQ0FBSSxDQUNiLGVBbFNPLG1CQ3ZHb0IsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMsb0JDdkdvQixDQUFpQyx1QkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwyQkc3QnVDLENBQWdELGtCRnJFaEUsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDRCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxzQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxXRzdCRyxDQUFJLHVCSGlDTCxXR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFdHN0JMLENBQUksK0JIaUNHLFdHakNQLENBQUksMEJIeUNBLCtCR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsZ0NHYmlDLENBQWdELDJCSGFqRiwyQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCw0QkhDbEYsV0c3QkosQ0FBSSw4QkhpQ0UsV0dqQ04sQ0FBSSx5Qkh5Q0QsZ0NHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCwwQkhhbEYsaUNHYmtDLENBQWdELDBCSGFsRixpQ0dia0MsQ0FBZ0QsMEJIYWxGLDRCR2JrQyxDQUFnRCxDSGU3RiwyQ25CbUQyQywyQm1CakVqQyxXRzdCSCxDQUFJLDZCSGlDQyxXR2pDTCxDQUFJLHdCSHlDRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsNEJHYm1DLENBQWdELENIZTdGLDBCQWtUd0IsNEJRNVliLENBQTJCLG9DM0JrSkQsMEJtQjBQYiw0QlE1WWIsQ0FBMkIsQ1I4WXRDLDJDbkJqUTJDLDBCbUIrUG5CLDZCUTVZYixDQUEyQixDUjhZdEMsMkNu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QSxjQUNSLGFBR1UsQ0FBQSxpQkFDSyxDQUFBLGdCQUNELENBQUEsbUN0RHNKZCxhQUNVLENBQUEsV0FDQSxDQUFBLG9CQUdHLENBSEgseUJBR0csQ0FISCxZQUdHLENBQUUsMkJBQ1osQ0FEWSxlQUNaLENBRFksZ0JBQ1osQ0FEWSxPQUNQLENBQUUsaUJBSVYsVUFDUSxDQUFBLFlBQ1Isc0J1RHBMOEMsQ3ZEb0w5QyxrQ3VEcEw4QyxDdkRvTDlDLG1CdURwTDhDLEN2RG9MOUMsMEJ1RHBMOEMsQ0FBQSxhQ3dFN0Msb0JEdkVnRCxDQ3VFaEQsZ0NEdkVnRCxDQ3VFaEQsaUJEdkVnRCxDQ3VFaEQsd0JEdkVnRCxDQUFBLGNDdUVoRCx1QkR0RVUsQ0NzRVYsOEJEdEVVLENDc0VWLG9CRHRFVSxDQ3NFVixzQkR0RVUsQ0FBQSxlQ3NFVix3QkRyRVcsQ0NxRVgscUNEckVXLENDcUVYLHFCRHJFVyxDQ3FFWCw2QkRyRVcsQ0FBQSxjQ3FFWCxvQ0RwRVUsQ0NvRVYsd0JEcEVVLENDb0VWLDRCRHBFVSxDQUFBLCtCQzZFUSxzQkRqRjJCLENDaUYzQixrQ0RqRjJCLENDaUYzQixtQkRqRjJCLENDaUYzQiwwQkRqRjJCLENBQUEsZ0NDaUYzQixvQkRoRjhCLENDZ0Y5QixnQ0RoRjhCLENDZ0Y5QixpQkRoRjhCLENDZ0Y5Qix3QkRoRjhCLENBQUEsaUNDZ0Y5Qix1QkQvRVIsQ0MrRVEsOEJEL0VSLENDK0VRLG9CRC9FUixDQytFUSxzQkQvRVIsQ0FBQSxXQ2lGTCx1QkR2RUEsQ0N1RUEsOEJEdkVBLENDdUVBLG9CRHZFQSxDQ3VFQSxzQkR2RUEsQ0FBQSxnQkNnRkosNkJEaEZJLENDZ0ZKLHlCRGhGSSxDQ2dGSixxQkRoRkksQ0FBQSxjQzhFTCxxQkQ3RVEsQ0M2RVIsNEJEN0VRLENDNkVSLGtCRDdFUSxDQzZFUixvQkQ3RVEsQ0FBQSxtQkMrRVAsMkJEL0VPLENDK0VQLHVCRC9FTyxDQytFUCxtQkQvRU8sQ0FBQSxjQzZFUix3QkQ1RVEsQ0M0RVIsMEJENUVRLENDNEVSLHFCRDVFUSxDQzRFUixrQkQ1RVEsQ0FBQSxtQkM4RVAseUJEOUVPLENDOEVQLDBCRDlFTyxDQzhFUCxpQkQ5RU8sQ0FBQSxlQzRFUix5QkQzRVMsQ0MyRVQsMkJEM0VTLENDMkVULHNCRDNFUyxDQzJFVCxtQkQzRVMsQ0FBQSxvQkM2RVIsMEJEN0VRLENDNkVSLDJCRDdFUSxDQzZFUixrQkQ3RVEsQ0FBQSxxQkNpRlIsdUJEOUZTLENDOEZULDhCRDlGUyxDQzhGVCxvQkQ5RlMsQ0M4RlQsc0JEOUZTLENBQUEsd0JBWUYsQ0FaRSwwQkFZRixDQVpFLHFCQVlGLENBWkUsa0JBWUYsQ0FBQSw0QkN3Rk8sQ0R4RlAseUJDd0ZPLENEeEZQLG9CQ3dGTyxDQUFBLGVBQ2hCLDJCRDNCRCxDQzJCQyxlRDNCRCxDQzJCQyxnQkQzQkQsQ0MyQkMsT0QzQkksQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxvQzdEd0V5QixpQjZEdkVwQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxDQUFDLDJDN0RtRThCLGdCNkRsRTFDLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLENBQUMsMkM3RG1FOEIsZTZEbEUxQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsQ0FBQyxnQkE1RmhCLG1CRFlTLENDWlQsb0JEWVMsQ0NaVCxtQkRZUyxDQ1pULFlEWVMsQ0FBQSxpQkNWUixrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsaUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLG1CQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxjQUNQLDZCRFZNLENDVU4sNEJEVk0sQ0NVTiwwQkRWTSxDQ1VOLHNCRFZNLENDVU4sa0JEVk0sQ0FBQSxzQkNhTCw2QkRaYSxDQ1liLDZCRFphLENDWWIsa0NEWmEsQ0NZYiw4QkRaYSxDQ1liLDBCRFphLENBQUEsaUJDWWIsMkJEWFEsQ0NXUiw0QkRYUSxDQ1dSLDZCRFhRLENDV1IseUJEWFEsQ0NXUixxQkRYUSxDQUFBLHlCQ1dSLDJCRFZnQixDQ1VoQiw2QkRWZ0IsQ0NVaEIscUNEVmdCLENDVWhCLGlDRFZnQixDQ1VoQiw2QkRWZ0IsQ0FBQSxvQzVENkpzQix3QjZEekloQyxtQkRmQyxDQ2VELG9CRGZDLENDZUQsbUJEZkMsQ0NlRCxZRGZDLENBQUEseUJDaUJBLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx5QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsMkJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHNCQUNQLDZCRHJDRixDQ3FDRSw0QkRyQ0YsQ0NxQ0UsMEJEckNGLENDcUNFLHNCRHJDRixDQ3FDRSxrQkRyQ0YsQ0FBQSw4QkN3Q0csNkJEdkNLLENDdUNMLDZCRHZDSyxDQ3VDTCxrQ0R2Q0ssQ0N1Q0wsOEJEdkNLLENDdUNMLDBCRHZDSyxDQUFBLHlCQ3VDTCwyQkR0Q0EsQ0NzQ0EsNEJEdENBLENDc0NBLDZCRHRDQSxDQ3NDQSx5QkR0Q0EsQ0NzQ0EscUJEdENBLENBQUEsaUNDc0NBLDJCRHJDUSxDQ3FDUiw2QkRyQ1EsQ0NxQ1IscUNEckNRLENDcUNSLGlDRHJDUSxDQ3FDUiw2QkRyQ1EsQ0FBQSxDQUFjLDJDNUR3SmMsdUI2RHBJdEMsbUJEZkMsQ0NlRCxvQkRmQyxDQ2VELG1CRGZDLENDZUQsWURmQyxDQUFBLHdCQ2lCQSxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsd0JBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLDBCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxxQkFDUCw2QkRyQ0YsQ0NxQ0UsNEJEckNGLENDcUNFLDBCRHJDRixDQ3FDRSxzQkRyQ0YsQ0NxQ0Usa0JEckNGLENBQUEsNkJDd0NHLDZCRHZDSyxDQ3VDTCw2QkR2Q0ssQ0N1Q0wsa0NEdkNLLENDdUNMLDhCRHZDSyxDQ3VDTCwwQkR2Q0ssQ0FBQSx3QkN1Q0wsMkJEdENBLENDc0NBLDRCRHRDQSxDQ3NDQSw2QkR0Q0EsQ0NzQ0EseUJEdENBLENDc0NBLHFCRHRDQSxDQUFBLGdDQ3NDQSwyQkRyQ1EsQ0NxQ1IsNkJEckNRLENDcUNSLHFDRHJDUSxDQ3FDUixpQ0RyQ1EsQ0NxQ1IsNkJEckNRLENBQUEsQ0FBYywyQzVEd0pjLHNCNkRwSXRDLG1CRGZDLENDZUQsb0JEZkMsQ0NlRCxtQkRmQyxDQ2VELFlEZkMsQ0FBQSx1QkNpQkEsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHVCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx5QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsb0JBQ1AsNkJEckNGLENDcUNFLDRCRHJDRixDQ3FDRSwwQkRyQ0YsQ0NxQ0Usc0JEckNGLENDcUNFLGtCRHJDRixDQUFBLDRCQ3dDRyw2QkR2Q0ssQ0N1Q0wsNkJEdkNLLENDdUNMLGtDRHZDSyxDQ3VDTCw4QkR2Q0ssQ0N1Q0wsMEJEdkNLLENBQUEsdUJDdUNMLDJCRHRDQSxDQ3NDQSw0QkR0Q0EsQ0NzQ0EsNkJEdENBLENDc0NBLHlCRHRDQSxDQ3NDQSxxQkR0Q0EsQ0FBQSwrQkNzQ0EsMkJEckNRLENDcUNSLDZCRHJDUSxDQ3FDUixxQ0RyQ1EsQ0NxQ1IsaUNEckNRLENDcUNSLDZCRHJD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QURSLDhCQUNRLENBRFIsb0JBQ1EsQ0FEUixzQkFDUSxDQUFBLFdBQ2xCLFVBR1EsQ0FBQSxVQUlMLG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxVQURULG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxnQlg4TFYsY1d6TE8sQ0FBQSxpQkFDSSxDQUFBLG1CQUNFLENBQUEscUJBQ0MsQ0FBQSxjWHRDaEIsYVcwQ1EsQ0FBQSx3QkFDUixhQUdXLENBQUEsVUFDSCxDQUFBLGdDQUVMLGFBQ1UsQ0FBQSxpQkFDRSxDQUFBLG9CQUNHLENBQUEsc0NBR2pCLGFBQ2EsQ0FBRSxnQkFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBicmVha3BvaW50c1xuLy8vL1xuXG4vLy8gQSBsaXN0IG9mIG5hbWVkIGJyZWFrcG9pbnRzLiBZb3UgY2FuIHVzZSB0aGVzZSB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBxdWlja2x5IGNyZWF0ZSBtZWRpYSBxdWVyaWVzLlxuLy8vIEB0eXBlIE1hcFxuJGJyZWFrcG9pbnRzOiAoXG4gIHNtYWxsOiAwLFxuICBtZWRpdW06IDY0MHB4LFxuICBsYXJnZTogMTAyNHB4LFxuICB4bGFyZ2U6IDEyMDBweCxcbiAgeHhsYXJnZTogMTQ0MHB4LFxuKSAhZGVmYXVsdDtcblxuLy8vIEEgbGlzdCBvZiBuYW1lZCBIaURQSSBicmVha3BvaW50cy4gWW91IGNhbiB1c2UgdGhlc2Ugd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gcXVpY2tseSBjcmVhdGUgbWVkaWEgcXVlcmllcyBmb3IgcmVzb2x1dGlvbnMuXG4vLy8gVmFsdWVzIG11c3QgcmVwcmVzZW50IHRoZSBkZXZpY2UgcGl4ZWxzIC8gd2ViIHBpeGVscyByYXRpb24gYW5kIGJlIHVuaXRsZXNzIG9yIGluIERQUFguXG4vLy8gQHR5cGUgTWFwXG4kYnJlYWtwb2ludHMtaGlkcGk6IChcbiAgaGlkcGktMTogMSxcbiAgaGlkcGktMS01OiAxLjUsXG4gIGhpZHBpLTI6IDIsXG4gIHJldGluYTogMixcbiAgaGlkcGktMzogM1xuKSAhZGVmYXVsdDtcblxuLy8vIFRoZSBsYXJnZXN0IG5hbWVkIGJyZWFrcG9pbnQgaW4gd2hpY2ggdG8gaW5jbHVkZSBwcmludCBhcyBhIG1lZGlhIHR5cGVcbi8vLyBAdHlwZSBLZXl3b3JkXG4kcHJpbnQtYnJlYWtwb2ludDogbGFyZ2UgIWRlZmF1bHQ7XG5cbiQtemYtemVyby1icmVha3BvaW50OiBzbWFsbCAhZGVmYXVsdDtcblxuJC16Zi1icmVha3BvaW50cy1rZXlzOiBtYXAtdG8tbGlzdCgkYnJlYWtwb2ludHMsICdrZXlzJyk7XG5cbkBpZiBudGgobWFwLXZhbHVlcygkYnJlYWtwb2ludHMpLCAxKSAhPSAwIHtcbiAgQGVycm9yICdUaGUgZmlyc3Qga2V5IGluIHRoZSAkYnJlYWtwb2ludHMgbWFwIG11c3QgaGF2ZSBhIHZhbHVlIG9mIFwiMFwiLic7XG59XG5AZWxzZSB7XG4gICQtemYtemVyby1icmVha3BvaW50OiBudGgobWFwLWtleXMoJGJyZWFrcG9pbnRzKSwgMSk7XG59XG5cbi8vLyBBbGwgb2YgdGhlIG5hbWVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIG91dHB1dCBhcyBjbGFzc2VzIGluIHlvdXIgQ1NTLCBsaWtlIGAuc21hbGwtMTJgLCBgLm1lZGl1bS02YCwgYW5kIHNvIG9uLiBFYWNoIHZhbHVlIGluIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgaW4gdGhlIGAkYnJlYWtwb2ludHNgIG1hcC5cbi8vLyBAdHlwZSBMaXN0XG4kYnJlYWtwb2ludC1jbGFzc2VzOiAoc21hbGwgbWVkaXVtIGxhcmdlKSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyBhIG1lZGlhIHF1ZXJ5IHN0cmluZyBtYXRjaGluZyB0aGUgaW5wdXQgdmFsdWUuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gc2VlIHdoYXQgdGhlIHBvc3NpYmxlIGlucHV0cyBhcmUuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkdmFsIFtzbWFsbF0gLSBCcmVha3BvaW50IG5hbWUsIG9yIHB4LCByZW0sIG9yIGVtIHZhbHVlIHRvIHByb2Nlc3MuXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkdmFsOiAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAvLyBXZWIgc3RhbmRhcmQgUGl4ZWxzIHBlciBpbmNoLiAoMWRkcHggLyAkc3RkLXdlYi1kcGkpID0gMWRwaVxuICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy12YWx1ZXMtMy8jYWJzb2x1dGUtbGVuZ3Roc1xuICAkc3RkLXdlYi1kcGk6IDk2O1xuXG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgb2YgdGhlIGZvbGxvd2luZyBicmVha3BvaW50XG4gICRicC1uZXh0OiBudWxsO1xuICAvLyBWYWx1ZSBmb3IgbWF4LXdpZHRoIG1lZGlhIHF1ZXJpZXNcbiAgJGJwLW1pbjogbnVsbDtcbiAgLy8gVmFsdWUgZm9yIG1pbi13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IG51bGw7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBJZiBuYW1lZCwgbmFtZSBvZiB0aGUgYnJlYWtwb2ludFxuICAkbmFtZTogbnVsbDtcbiAgLy8gSWYgdGhlIGJyZWFrcG9pbnQgaXMgYSBIaURQSSBicmVha3BvaW50XG4gICRoaWRwaTogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG5cbiAgLy8gSWYgYSBicmVha3BvaW50IG5hbWUgaXMgZ2l2ZW4sIGdldCBpdHMgdmFsdWUgZnJvbSB0aGUgJGJyZWFrcG9pbnRzLyRicmVha3BvaW50cy1oaWRwaSBtYXAuXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgJG5hbWU6ICRicDtcbiAgICAgICRicDogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgICAgICRicC1uZXh0OiAtemYtbWFwLW5leHQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gICAgfVxuICAgIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cy1oaWRwaSwgJGJwKSB7XG4gICAgICAkbmFtZTogJGJwO1xuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cy1oaWRwaSwgJG5hbWUpO1xuICAgICAgJGJwLW5leHQ6IC16Zi1tYXAtbmV4dC1udW1iZXIoJGJyZWFrcG9pbnRzLWhpZHBpLCAkYnApO1xuICAgICAgJGhpZHBpOiB0cnVlO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkYnA6IDA7XG4gICAgICBAd2FybiAnYnJlYWtwb2ludCgpOiBcIiN7JHZhbH1cIiBpcyBub3QgZGVmaW5lZCBpbiB5b3VyIGAkYnJlYWtwb2ludHNgIG9yIGAkYnJlYWtwb2ludHMtaGlkcGlgIHNldHRpbmcuJztcbiAgICB9XG4gIH1cblxuICBAaWYgbm90ICRuYW1lIGFuZCAkZGlyID09ICdvbmx5JyB7XG4gICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIGBvbmx5YCByYW5nZS4nO1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgJ29ubHknIGFuZCAndXAnIGhhdmUgYSBtaW4gbGltaXQuXG4gIEBpZiAkZGlyID09ICdvbmx5JyBvciAkZGlyID09ICd1cCcge1xuICAgICRicC1taW46IGlmKCRoaWRwaSwgc3RyaXAtdW5pdCgkYnApLCAtemYtYnAtdG8tZW0oJGJwKSk7XG4gIH1cbiAgLy8gT25seSAnb25seScgYW5kICdkb3duJyBoYXZlIGEgbWF4IGxpbWl0LlxuICBAaWYgJGRpciA9PSAnb25seScgb3IgJGRpciA9PSAnZG93bicge1xuICAgIC8vIElmIHRoZSBicmVha3BvaW50IGlzIGEgdmFsdWUsIHVzZSBpdCBhcyBtYXggbGltaXQuXG4gICAgQGlmIG5vdCAkbmFtZSB7XG4gICAgICAkYnAtbWF4OiBpZigkaGlkcGksIHN0cmlwLXVuaXQoJGJwKSwgLXpmLWJwLXRvLWVtKCRicCkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgYnJlYWtwb2ludCBpcyBuYW1lZCwgdGhlIG1heCBsaW1pdCBpcyB0aGUgZm9sbG93aW5nIGJyZWFrcG9pbnQgLSAxcHguXG4gICAgQGVsc2UgaWYgJGJwLW5leHQge1xuICAgICAgLy8gTWF4IHZhbHVlIGlzIDAuMnB4IHVuZGVyIHRoZSBuZXh0IGJyZWFrcG9pbnQgKDAuMDIgLyAxNiA9IDAuMDAxMjUpLlxuICAgICAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTEzMTNcbiAgICAgICRicC1tYXg6IGlmKCRoaWRwaSwgJGJwLW5leHQgLSAoMS8kc3RkLXdlYi1kcGkpLCAtemYtYnAtdG8tZW0oJGJwLW5leHQpIC0gMC4wMDEyNSk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIG1lZGlhIHF1ZXJ5IHN0cmluZyBmcm9tIG1pbiBhbmQgbWF4IGxpbWl0cy5cbiAgQGlmICRoaWRwaSB7XG4gICAgLy8gR2VuZXJhdGUgdmFsdWVzIGluIERQSSBpbnN0ZWFkIG9mIERQUFggZm9yIGFuIElFOS0xMS9PcGVyYSBtaW5pIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gU2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9Y3NzLW1lZGlhLXJlc29sdXRpb25cbiAgICAkYnAtbWluLWRwaTogaWYoJGJwLW1pbiwgJGJwLW1pbiAqICRzdGQtd2ViLWRwaSAqIDFkcGksICRicC1taW4pO1xuICAgICRicC1tYXgtZHBpOiBpZigkYnAtbWF4LCAkYnAtbWF4ICogJHN0ZC13ZWItZHBpICogMWRwaSwgJGJwLW1heCk7XG4gICAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICAgIC16Zi1icC1qb2luKCRicC1taW4sICRicC1tYXgsICctd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW8nLCAnLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvJyksXG4gICAgICAtemYtYnAtam9pbigkYnAtbWluLWRwaSwgJGJwLW1heC1kcGksICdtaW4tcmVzb2x1dGlvbicsICdtYXgtcmVzb2x1dGlvbicpLFxuICAgICAgJywgJyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gLXpmLWJwLWpvaW4oJGJwLW1pbiwgJGJwLW1heCk7XG4gIH1cbn1cblxuLy8vIFdyYXBzIGEgbWVkaWEgcXVlcnkgYXJvdW5kIHRoZSBjb250ZW50IHlvdSBwdXQgaW5zaWRlIHRoZSBtaXhpbi4gVGhpcyBtaXhpbiBhY2NlcHRzIGEgbnVtYmVyIG9mIHZhbHVlczpcbi8vLyAgLSBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIHRoZSBtaXhpbiB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBgJGJyZWFrcG9pbnRzYCBhbmQgYCRicmVha3BvaW50cy1oaWRwaWAgbWFwcywgYW5kIHVzZSBhIG1lZGlhIHF1ZXJ5IHRoZXJlLlxuLy8vICAtIElmIGEgcGl4ZWwgdmFsdWUgaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBlbSB2YWx1ZSB1c2luZyBgJGdsb2JhbC1mb250LXNpemVgIGFzIHRoZSBiYXNlLlxuLy8vICAtIElmIGEgcmVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHVuaXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGVtLlxuLy8vICAtIElmIGFuIGVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcy1pcy5cbi8vL1xuLy8vIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgcGFzc2VkLCB0aGUgbWl4aW4gd2lsbCBnZW5lcmF0ZSBhIG1lZGlhIHF1ZXJ5IGZvciBlYWNoIG9mIHRoZW0gYXMgZGVzY3JpYmVkIGFib3ZlLlxuLy8vIFNpbmNlIHRoZSBjb250ZW50IGlzIGR1cGxpY2F0ZWQgZm9yIGVhY2ggYnJlYWtwb2ludCwgdGhpcyBtaXhpbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcHJvcGVydGllcyB0aGF0XG4vLy8gY2hhbmdlIGFjcm9zcyBicmVha3BvaW50cy5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWx1ZXMuLi4gLSBCcmVha3BvaW50IG5hbWUgb3IgcHgvcmVtL2VtIHZhbHVlIHRvIHByb2Nlc3MuXG4vLy9cbi8vLyBAb3V0cHV0IElmIHRoZSBicmVha3BvaW50IGlzIFwiMHB4IGFuZCBsYXJnZXJcIiwgb3V0cHV0cyB0aGUgY29udGVudCBhcy1pcy4gT3RoZXJ3aXNlLCBvdXRwdXRzIHRoZSBjb250ZW50IHdyYXBwZWQgaW4gYSBtZWRpYSBxdWVyeS5cbkBtaXhpbiBicmVha3BvaW50KCR2YWx1ZXMuLi4pIHtcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHZhbHVlcykge1xuICAgICR2YWx1ZTogbnRoKCR2YWx1ZXMsICRpKTtcbiAgICAkc3RyOiBicmVha3BvaW50KCR2YWx1ZSk7XG4gICAgJGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsIG50aCgkdmFsdWUsIDEpKTtcbiAgICAkcGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICRwcmludC1icmVha3BvaW50KTtcbiAgICAvLyBEaXJlY3Rpb24gb2YgbWVkaWEgcXVlcnkgKHVwLCBkb3duLCBvciBvbmx5KVxuICAgICRkaXI6IGlmKGxlbmd0aCgkdmFsdWUpID4gMSwgbnRoKCR2YWx1ZSwgMiksIHVwKTtcblxuICAgICRvbGQtemYtc2l6ZTogbnVsbDtcblxuICAgIC8vIE1ha2UgYnJlYWtwb2ludCBzaXplIGF2YWlsYWJsZSBhcyBhIHZhcmlhYmxlXG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6IG50aCgkdmFsdWUsIDEpICFnbG9iYWw7IC8vIGdldCB0aGUgZmlyc3QgdmFsdWUgdG8gYWNjb3VudCBmb3IgYG9ubHlgIGFuZCBgZG93bmAga2V5d29yZHNcblxuICAgIC8vIElmICRzdHIgaXMgc3RpbGwgYW4gZW1wdHkgc3RyaW5nLCBubyBtZWRpYSBxdWVyeSBpcyBuZWVkZWRcbiAgICBAaWYgJHN0ciA9PSAnJyB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHdyYXAgdGhlIGNvbnRlbnQgaW4gYSBtZWRpYSBxdWVyeVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIEZvciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHByaW50LWJyZWFrcG9pbnQsIGFkZCBwcmludCB0byB0aGUgbWVkaWEgdHlwZXNcbiAgICAgIC8vIGdlbmVyYXRlIHByaW50IGlmIHRoZSBicmVha3BvaW50IGFmZmVjdHMgdGhlIHByaW50LWJyZWFrcG9pbnQgKG9yIHNtYWxsZXIpLlxuICAgICAgLy8gVGhpcyBtZWFucyB0aGUgY3VycmVudCBjb25kaXRpb24gb25seSBuZWVkcyB0byBiZSBleHRlbmRlZCBzbyAnZG93bicgYWx3YXlzIGdlbmVyYXRlcyBwcmludC5cbiAgICAgIEBpZiAkYnAgIT0gbnVsbCBhbmQgKCRicCA8PSAkcGJwIG9yICRkaXIgPT0gZG93bikge1xuICAgICAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkLXpmLXNpemU6ICRvbGQtemYtc2l6ZSAhZ2xvYmFsO1xuICB9XG59XG5cbi8vLyBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgbWFwIHRvIGEgVVJMLWVuY29kZWQgc3RyaW5nLCBsaWtlIHRoaXM6IGBrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAuIFRoZSB2YWx1ZSBpcyB0aGVuIGRyb3BwZWQgaW50byB0aGUgQ1NTIGZvciBhIHNwZWNpYWwgYDxtZXRhPmAgdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHQuIFRoaXMgaXMgaG93IHdlIHRyYW5zZmVyIHZhbHVlcyBmcm9tIFNhc3MgdG8gSmF2YVNjcmlwdCwgc28gdGhleSBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgcGxhY2UuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byBjb252ZXJ0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWFwJ3MgY29udGVudHMuXG5AZnVuY3Rpb24gLXpmLWJwLXNlcmlhbGl6ZSgkbWFwKSB7XG4gICRzdHI6ICcnO1xuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcCB7XG4gICAgJHN0cjogJHN0ciArICRrZXkgKyAnPScgKyAtemYtYnAtdG8tZW0oJHZhbHVlKSArICcmJztcbiAgfVxuICAkc3RyOiBzdHItc2xpY2UoJHN0ciwgMSwgLTIpO1xuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIEZpbmQgdGhlIG5leHQga2V5IGluIGEgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXAgLSBNYXAgdG8gdHJhdmVyc2UuXG4vLy8gQHBhcmFtIHtNaXhlZH0gJGtleSAtIEtleSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtNaXhlZH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGFmdGVyIGAka2V5YCwgaWYgYCRrZXlgIHdhcyBmb3VuZC4gSWYgYCRrZXlgIHdhcyBub3QgZm91bmQsIG9yIGAka2V5YCB3YXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIG1hcCwgcmV0dXJucyBgbnVsbGAuXG5AZnVuY3Rpb24gLXpmLW1hcC1uZXh0KCRtYXAsICRrZXkpIHtcblxuICAvLyBTdG9yZSB0aGUga2V5cyBvZiB0aGUgbWFwIGFzIGEgbGlzdFxuICAkdmFsdWVzOiBtYXAta2V5cygkbWFwKTtcblxuICAkaTogMDtcblxuICAvLyBJZiB0aGUgS2V5IEV4aXN0cywgR2V0IHRoZSBpbmRleCBvZiB0aGUga2V5IHdpdGhpbiB0aGUgbWFwIGFuZCBhZGQgMSB0byBpdCBmb3IgdGhlIG5leHQgYnJlYWtwb2ludCBpbiB0aGUgbWFwXG4gIEBpZiAobWFwLWhhcy1rZXkoJG1hcCwgJGtleSkpIHtcbiAgICAkaTogaW5kZXgoJHZhbHVlcywgJGtleSkgKyAxO1xuICB9XG5cbiAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBvciBpdCdzIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwLCByZXR1cm4gbnVsbFxuICBAaWYgKCRpID4gbGVuZ3RoKCRtYXApIG9yICRpID09IDApIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbHVlXG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgbnRoKCR2YWx1ZXMsICRpKSk7XG4gIH1cblxufVxuXG4vLy8gRmluZCB0aGUgbmV4dCBudW1iZXIgaW4gYSBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byB0cmF2ZXJzZS5cbi8vLyBAcGFyYW0ge01peGVkfSAkbnVtYmVyIC0gTnVtYmVyIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge01peGVkfSBUaGUgbnVtYmVyIGZvbGxvd2luZyBgJG51bWJlcmAsIGlmIGAkbnVtYmVyYCB3YXMgZm91bmQuIElmIGAkbnVtYmVyYCB3YXMgbm90IGZvdW5kLCBvciBgJG51bWJlcmAgd2FzIHRoZSBiaWdnZXN0IG51bWJlciBpbiB0aGUgbWFwLCByZXR1cm5zIGBudWxsYC5cbkBmdW5jdGlvbiAtemYtbWFwLW5leHQtbnVtYmVyKCRtYXAsICRudW1iZXIpIHtcblxuICAkbmV4dF9udW1iZXI6IG51bGw7XG5cbiAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgIEBpZiB0eXBlLW9mKCR2KSA9PSAnbnVtYmVyJyBhbmQgJHYgPiAkbnVtYmVyIGFuZCAoJG5leHRfbnVtYmVyID09IG51bGwgb3IgJHYgPCAkbmV4dF9udW1iZXIpIHtcbiAgICAgICRuZXh0X251bWJlcjogJHY7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmV4dF9udW1iZXI7XG59XG5cbi8vLyBSZXR1cm4gYSBsaXN0IG9mIG91ciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gJGtleS4gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGhcbi8vLyByZXNwb25zaXZlIGd1dHRlcnMgZm9yIHRoZSBncmlkLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRrZXkgLSBLZXkgdG8gdXNlIGFzIGxhc3QgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtBcnJheX0gVGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgdXAgdG8gYW5kLiBJZiAka2V5IGlzIGF1dG8sIHJldHVybnMgYnJlYWtwb2ludHMgYWJvdmUgdGhlIHplcm9cbkBmdW5jdGlvbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCRrZXkpIHtcbiAgJGxpc3Q6ICgpO1xuICAkZm91bmRfa2V5OiBmYWxzZTtcblxuICBAZWFjaCAkbmFtZSBpbiAkLXpmLWJyZWFrcG9pbnRzLWtleXMge1xuICAgIEBpZiAoJG5hbWUgPT0gJGtleSkge1xuICAgICAgJGZvdW5kX2tleTogdHJ1ZTtcbiAgICB9XG4gICAgQGlmIG5vdCAkZm91bmRfa2V5IHtcbiAgICAgICRsaXN0OiBhcHBlbmQoJGxpc3QsICRuYW1lKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkbGlzdDtcbn1cblxuLy8vIFJldHVybiBhIGxpc3Qgb2Ygb3VyIG5hbWVkIGJyZWFrcG9pbnRzIGxlc3MgdGhhbiAka2V5LiBVc2VmdWwgZm9yIGRlYWxpbmcgd2l0aFxuLy8vIHJlc3BvbnNpdmUgZ3V0dGVycyBmb3IgdGhlIGdyaWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgLSBhIG5hbWVkIG9yIG5vbi1uYW1lZCBicmVha3BvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge0FycmF5fSBUaGUgbGlzdCBvZiBicmVha3BvaW50cyB1cCB0byBhbmQuIElmICRrZXkgaXMgYXV0bywgcmV0dXJucyBicmVha3BvaW50cyBhYm92ZSB0aGUgemVyb1xuQGZ1bmN0aW9uIC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgJGxhc3Q6ICQtemYtemVyby1icmVha3BvaW50O1xuICAkZm91bmQ6IGZhbHNlO1xuXG4gICR2YWx1ZTogdW5pdGxlc3MtY2FsYygkYnJlYWtwb2ludCwgMXB4KTtcbiAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgIEBpZiBub3QgJGZvdW5kIHtcbiAgICAgIEBpZiB1bml0bGVzcy1jYWxjKCR2YWwpID4gJHZhbHVlIHtcbiAgICAgICAgJGZvdW5kOiB0cnVlO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRsYXN0OiAka2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxhc3Q7XG59XG5cbi8vLyBHZXQgYSB2YWx1ZSBmb3IgYSBicmVha3BvaW50IGZyb20gYSByZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIHNpbmdsZSB2YWx1ZSwgcmV0dXJuIGl0IHJlZ2FyZGxlc3Mgb2YgYCR2YWx1ZWAuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBoYXMgdGhlIGtleSBgJHZhbHVlYCwgdGhlIGV4YWN0IGJyZWFrcG9pbnQgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBkb2VzICpub3QqIGhhdmUgdGhlIGJyZWFrcG9pbnQsIHRoZSB2YWx1ZSBtYXRjaGluZyB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBpbiB0aGUgY29uZmlnIG1hcCBpcyByZXR1cm5lZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIFJlc3BvbnNpdmUgY29uZmlnIG1hcCBvciBzaW5nbGUgdmFsdWUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUgdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TWl4ZWR9IFRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUuXG5AZnVuY3Rpb24gLXpmLWdldC1icC12YWwoJG1hcCwgJHZhbHVlKSB7XG4gIC8vIElmIHRoZSBnaXZlbiBtYXAgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdFxuICBAaWYgdHlwZS1vZigkbWFwKSA9PSAnbnVtYmVyJyB7XG4gICAgQHJldHVybiAkbWFwO1xuICB9XG5cblxuICAvLyBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCBuYW1lIGV4aXN0cyBnbG9iYWxseVxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJHZhbHVlKSB7XG4gICAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgICAkdmFsdWU6IC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJHZhbHVlKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgaW4gdGhlIGxvY2FsIGNvbmZpZyBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJG1hcCwgJHZhbHVlKSB7XG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gICAgQHJldHVybiBtYXAtZ2V0KCRtYXAsICR2YWx1ZSk7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBuZXh0IGxvd2VzdCBicmVha3BvaW50IGFuZCByZXR1cm4gdGhhdCB2YWx1ZVxuICBAZWxzZSB7XG4gICAgJGFuY2hvcjogbnVsbDtcbiAgICAkZm91bmQ6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgQGlmIG5vdCAkZm91bmQge1xuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG1hcCwgJGtleSkge1xuICAgICAgICAgICRhbmNob3I6ICRrZXk7XG4gICAgICAgIH1cbiAgICAgICAgQGlmICRrZXkgPT0gJHZhbHVlIHtcbiAgICAgICAgICAkZm91bmQ6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgJGFuY2hvcik7XG4gIH1cbn1cblxuLy8vIFJldHVybiB0aGUgYmVzdCBicmVha3BvaW50IHRvIHVzZSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxpbmcgY29udGV4dC4gSXQgcmV0dXJucyBpbiBvcmRlcjpcbi8vLyAxLiB0aGUgZ2l2ZW4gYCR2YWx1ZWAgYXJndW1lbnQgaWYgaXQgaXMgbm90IG51bGwuXG4vLy8gMi4gdGhlIGdsb2JhbCBicmVha3BvaW50IGNvbnRleHQgYCQtemYtc2l6ZWAgaWYgaXQgaXMgbm90IG51bGwgKGxpa2UgaWYgY2FsbGVkIGluc2lkZSB0aGVuIGBicmVha3BvaW50KClgIG1peGluKVxuLy8vIDMuIHRoZSBnaXZlbiBgJGRlZmF1bHRgIGFyZ3VtZW50LlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgW251bGxdIC0gQnJlYWtwb2ludCB0byB1c2UgaW4gcHJpb3JpdHkgaWYgbm9uLW51bGwuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGVmYXVsdCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBieSBkZWZhdWx0IGlmIG5vIG90aGVyIHZhbHVlIGNhbiBiZSB1c2VkLlxuLy8vXG4vLy8gQHJldHVybiB7S2V5d29yZH0gVGhlIHJlc29sdmVkIGJyZWFrcG9pbnQuXG5AZnVuY3Rpb24gLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkdmFsdWU6IG51bGwsICRkZWZhdWx0OiBudWxsKSB7XG4gIEBpZiAoJHZhbHVlICE9IG51bGwpIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuICBAZWxzZSBpZiAodmFyaWFibGUtZXhpc3RzKC16Zi1zaXplKSBhbmQgdHlwZS1vZigkLXpmLXNpemUpICE9ICdudW1iZXInKSBhbmQgJC16Zi1zaXplICE9IG51bGwge1xuICAgIEByZXR1cm4gJC16Zi1zaXplO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICRkZWZhdWx0O1xuICB9XG59XG5cbi8vLyBSZXR1cm4gbWVkaWEgcXVlcnkgc3RyaW5nIGZyb20gdGhlIGdpdmVuIG1pbiBhbmQvb3IgbWF4IGxpbWl0cy5cbi8vLyBJZiBhIGxpbWl0IGlzIGVxdWFsIHRvIGBudWxsYCBvciBgMGAsIGl0IGlzIGlnbm9yZWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF0gLSBNaW4gbWVkaWEgcXVlcnkgbGltaXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXggWzBdIC0gTWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWluLW5hbWUgWydtaW4td2lkdGgnXSAtIE5hbWUgb2YgdGhlIG1pbiBtZWRpYSBxdWVyeSBsaW1pdC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGRlbGltaXRlciBbJ21heC13aWR0aCddIC0gTmFtZSBvZiB0aGUgbWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gTWVkaWEgUXVlcnkgc3RyaW5nLlxuQGZ1bmN0aW9uIC16Zi1icC1qb2luKFxuICAkbWluOiAwLFxuICAkbWF4OiAwLFxuICAkbWluLW5hbWU6ICdtaW4td2lkdGgnLFxuICAkbWF4LW5hbWU6ICdtYXgtd2lkdGgnXG4pIHtcbiAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICBpZigkbWluIGFuZCAkbWluID4gMCwgJygjeyRtaW4tbmFtZX06ICN7JG1pbn0pJywgbnVsbCksXG4gICAgaWYoJG1heCBhbmQgJG1heCA+IDAsICcoI3skbWF4LW5hbWV9OiAjeyRtYXh9KScsIG51bGwpLFxuICAgICcgYW5kICcpO1xufVxuXG4kc21hbGwtdXA6ICcnO1xuJHNtYWxsLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBzbWFsbCkge1xuICAkc21hbGwtdXA6IHNjcmVlbjtcbiAgJHNtYWxsLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHNtYWxsIG9ubHkpfScpO1xufVxuXG4kbWVkaXVtLXVwOiAnJztcbiRtZWRpdW0tb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIG1lZGl1bSkge1xuICAkbWVkaXVtLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChtZWRpdW0pfScpO1xuICAkbWVkaXVtLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KG1lZGl1bSBvbmx5KX0nKTtcbn1cblxuJGxhcmdlLXVwOiAnJztcbiRsYXJnZS1vbmx5OiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgbGFyZ2UpIHtcbiAgJGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSl9Jyk7XG4gICRsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSBvbmx5KX0nKTtcbn1cblxuJHhsYXJnZS11cDogJyc7XG4keGxhcmdlLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCB4bGFyZ2UpIHtcbiAgJHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeGxhcmdlKX0nKTtcbiAgJHhsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2Ugb25seSl9Jyk7XG59XG5cbiR4eGxhcmdlLXVwOiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgeHhsYXJnZSkge1xuICAkeHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeHhsYXJnZSl9Jyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcmV2ZWFsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSBtb2RhbC5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHdpZHRoIG9mIGEgbW9kYWwsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtd2lkdGg6IDYwMHB4ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXhpbXVtIHdpZHRoIG9mIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgYXJvdW5kIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHotaW5kZXggZm9yIG1vZGFscy4gVGhlIG92ZXJsYXkgdXNlcyB0aGlzIHZhbHVlLCB3aGlsZSB0aGUgbW9kYWwgaXRzZWxmIHVzZXMgdGhpcyB2YWx1ZSBwbHVzIG9uZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtemluZGV4OiAxMDA1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBvdmVybGF5cy5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjQ1KSAhZGVmYXVsdDtcblxuXG4vLyBQbGFjZWhvbGRlciBzZWxlY3RvciBmb3IgbWVkaXVtLWFuZC11cCBtb2RhbHNcbi8vIFByZXZlbnRzIGR1cGxpY2F0ZSBDU1Mgd2hlbiBkZWZpbmluZyBtdWx0aXBsZSBSZXZlYWwgc2l6ZXNcbi8vIFRoaXMgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGJyZWFrcG9pbnQgdGhlbiBgQG1peGluIHJldmVhbC1tb2RhbC13aWR0aGBcbkBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICVyZXZlYWwtY2VudGVyZWQge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cbn1cblxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbW9kYWwgb3ZlcmxheS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgb3ZlcmxheS5cbkBtaXhpbiByZXZlYWwtb3ZlcmxheSgkYmFja2dyb3VuZDogJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICRyZXZlYWwtemluZGV4O1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYSBtb2RhbC5cbkBtaXhpbiByZXZlYWwtbW9kYWwtYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgei1pbmRleDogJHJldmVhbC16aW5kZXggKyAxO1xuICAvLyBXb3JrYXJvdW5kIGFuZHJvaWQgYnJvd3NlciB6LWluZGV4IGJ1Z1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHJldmVhbC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJHJldmVhbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyZXZlYWwtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmV2ZWFsLWJhY2tncm91bmQ7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHJvd3MgZG9uJ3QgaGF2ZSBhIG1pbi13aWR0aCBvbiB0aGVtXG4gIC5jb2x1bW4ge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC8vIFN0cmlwIG1hcmdpbnMgZnJvbSB0aGUgbGFzdCBpdGVtIGluIHRoZSBtb2RhbFxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGp1c3RzIHRoZSB3aWR0aCBvZiBhIG1vZGFsLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBXaWR0aCBvZiB0aGUgbW9kYWwuIEdlbmVyYWxseSBhIHBlcmNlbnRhZ2UuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXgtd2lkdGggWyRyZXZlYWwtbWF4LXdpZHRoXSAtIE1heGltdW0gd2lkdGggb2YgdGhlIG1vZGFsLlxuQG1peGluIHJldmVhbC1tb2RhbC13aWR0aChcbiAgJHdpZHRoOiAkcmV2ZWFsLXdpZHRoLFxuICAkbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aFxuKSB7XG4gIC8vIEV4dGVuZHMgbXVzdCBiZSBtYWRlIG91dHNpZGUgb2YgYnJlYWtwb2ludHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBTYXNzIHZlcnNpb25zIChsaWJzYXNzIHYzLjUpXG4gIEBleHRlbmQgJXJldmVhbC1jZW50ZXJlZDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIG1heC13aWR0aDogJG1heC13aWR0aDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGZ1bGwtc2NyZWVuIG1vZGFsLCB3aGljaCBzdHJldGNoZXMgdGhlIGZ1bGwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgd2luZG93LlxuQG1peGluIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuIHtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXZlYWwge1xuXG4gIC8vLyBEaXNhYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGlzIHNob3duIHRvIHByZXZlbnQgdGhlIGJhY2tncm91bmQgZnJvbSBzaGlmdGluZ1xuICBodG1sLmlzLXJldmVhbC1vcGVuIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuXG4gICAgJi56Zi1oYXMtc2Nyb2xsIHtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB9XG5cbiAgICBib2R5IHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheVxuICAucmV2ZWFsLW92ZXJsYXkge1xuICAgIEBpbmNsdWRlIHJldmVhbC1vdmVybGF5O1xuICB9XG5cbiAgLy8gTW9kYWwgY29udGFpbmVyXG4gIC5yZXZlYWwge1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1iYXNlO1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgkcmV2ZWFsLXdpZHRoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFJlbW92ZSBwYWRkaW5nXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8vIFNpemluZyBjbGFzc2VzXG4gICAgJi50aW55ICB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgzMCUpOyB9XG4gICAgJi5zbWFsbCB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg1MCUpOyB9XG4gICAgJi5sYXJnZSB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg5MCUpOyB9XG5cbiAgICAvLyBGdWxsLXNjcmVlbiBtb2RlXG4gICAgJi5mdWxsIHtcbiAgICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJC16Zi16ZXJvLWJyZWFrcG9pbnQgb25seSkge1xuICAgICAgQGluY2x1ZGUgcmV2ZWFsLW1vZGFsLWZ1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgJi53aXRob3V0LW92ZXJsYXkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGZvdW5kYXRpb24tbm9ybWFsaXplKCkge1xuICAvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbiAgLy8gRG9jdW1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuXG4gIGh0bWwge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG4gIH1cblxuICAvLyBTZWN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2Vycy5cblxuICBib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gIC8vIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIG1hcmdpbjogMC42N2VtIDA7XG4gIH1cblxuICAvLyBHcm91cGluZyBjb250ZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAgLy8gMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG5cbiAgaHIge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLyAxXG4gICAgaGVpZ2h0OiAwOyAvLyAxXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIDJcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cblxuICBwcmUge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMWVtOyAvLyAyXG4gIH1cblxuICAvLyBUZXh0LWxldmVsIHNlbWFudGljc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cblxuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBDaHJvbWUgNTctXG4gIC8vIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG5cbiAgYWJiclt0aXRsZV0ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7IC8vIDFcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLy8gMlxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cblxuICBiLFxuICBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAvLyAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgY29kZSxcbiAga2JkLFxuICBzYW1wIHtcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8vIDFcbiAgICBmb250LXNpemU6IDFlbTsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogODAlO1xuICB9XG5cbiAgLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gIC8vIGFsbCBicm93c2Vycy5cblxuICBzdWIsXG4gIHN1cCB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIC8vIEVtYmVkZGVkIGNvbnRlbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuXG4gIGltZyB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gRm9ybXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAgLy8gMi4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMTAwJTsgLy8gMVxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgbWFyZ2luOiAwOyAvLyAyXG4gIH1cblxuICAvLyBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAgLy8gMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cblxuICBidXR0b24sXG4gIGlucHV0IHsgLy8gMVxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gIC8vIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cblxuICBidXR0b24sXG4gIHNlbGVjdCB7IC8vIDFcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG5cbiAgYnV0dG9uLFxuICBbdHlwZT1cImJ1dHRvblwiXSxcbiAgW3R5cGU9XCJyZXNldFwiXSxcbiAgW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gIFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAvLyBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG5cbiAgYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuICBbdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBmaWVsZHNldCB7XG4gICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAgLy8gMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICAvLyAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gIC8vICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuXG4gIGxlZ2VuZCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICAgIGNvbG9yOiBpbmhlcml0OyAvLyAyXG4gICAgZGlzcGxheTogdGFibGU7IC8vIDFcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8vIDFcbiAgICBwYWRkaW5nOiAwOyAvLyAzXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLy8gMVxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cblxuICBwcm9ncmVzcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSAxMCsuXG5cbiAgdGV4dGFyZWEge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gIC8vIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cblxuICBbdHlwZT1cImNoZWNrYm94XCJdLFxuICBbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gICAgcGFkZGluZzogMDsgLy8gMlxuICB9XG5cbiAgLy8gQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuXG4gIFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICBbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuXG4gIFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvLyAyXG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG5cbiAgW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cblxuICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMVxuICAgIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgfVxuXG4gIC8vIEludGVyYWN0aXZlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC5cblxuICBkZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cblxuICBzdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gIH1cblxuICAvLyBNaXNjXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuXG4gIHRlbXBsYXRlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG5cbiAgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgbm8tY29sb3ItbGl0ZXJhbHMsIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcblxuLy8vL1xuLy8vIEBncm91cCBnbG9iYWxcbi8vLy9cblxuQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8vIEZvbnQgc2l6ZSBhdHRyaWJ1dGUgYXBwbGllZCB0byBgPGh0bWw+YCBhbmQgYDxib2R5PmAuIFdlIHVzZSAxMDAlIGJ5IGRlZmF1bHQgc28gdGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB1c2VyJ3MgYnJvd3NlciBzZXR0aW5ncy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHdpZHRoIG9mIHlvdXIgc2l0ZS4gVXNlZCBieSB0aGUgZ3JpZCB0byBkZXRlcm1pbmUgcm93IHdpZHRoLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC13aWR0aDogcmVtLWNhbGMoMTIwMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBhbGwgdHlwZS4gYCRnbG9iYWwtbGluZWhlaWdodGAgaXMgMjRweCB3aGlsZSBgJGdsb2JhbC1mb250LXNpemVgIGlzIDE2cHhcbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbGluZWhlaWdodDogMS41ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3JzIHVzZWQgZm9yIGJ1dHRvbnMsIGNhbGxvdXRzLCBsaW5rcywgZXRjLiBUaGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbG9yIGNhbGxlZCBgcHJpbWFyeWAuXG4vLy8gQHR5cGUgTWFwXG4kZm91bmRhdGlvbi1wYWxldHRlOiAoXG4gIHByaW1hcnk6ICMxNzc5YmEsXG4gIHNlY29uZGFyeTogIzc2NzY3NixcbiAgc3VjY2VzczogIzNhZGI3NixcbiAgd2FybmluZzogI2ZmYWUwMCxcbiAgYWxlcnQ6ICNjYzRiMzcsXG4pICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgbGlnaHQgZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGxpZ2h0LWdyYXk6ICNlNmU2ZTYgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBtZWRpdW0gZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJG1lZGl1bS1ncmF5OiAjY2FjYWNhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgZGFyayBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kZGFyay1ncmF5OiAjOGE4YThhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgYmxhY2sgdWkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRibGFjazogIzBhMGEwYSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIHVzZWQgZm9yIHdoaXRlIHVpIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kd2hpdGU6ICNmZWZlZmUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1mb250LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0YWNrIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIExpc3RcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbi8vLyBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhbnRpYWxpYXNlZCB0eXBlLCB1c2luZyB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGFuZCBgLW1vei1vc3gtZm9udC1zbW9vdGhpbmdgIENTUyBwcm9wZXJ0aWVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRib2R5LWFudGlhbGlhc2VkOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIG1hcmdpbiBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgcGFkZGluZyBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIHBvc2l0aW9uaW5nIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXBvc2l0aW9uOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIG5vcm1hbCB0eXBlLlxuLy8vIEB0eXBlIEtleXdvcmQgfCBOdW1iZXJcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIGJvbGQgdHlwZS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kZ2xvYmFsLXdlaWdodC1ib2xkOiBib2xkICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBib3JkZXIgcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1yYWRpdXM6IDAgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgYWxsIG1lbnUgc3R5bGVzLiBDYW4gYmUgb3ZlcndyaXR0ZW4gYXQgaW5kaXZpZHVhbCBtZW51IGNvbXBvbmVudCBsZXZlbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbWVudS1wYWRkaW5nOiAwLjdyZW0gMXJlbSAhZGVmYXVsdDtcblxuLy8vIEdsb2JhbCB2YWx1ZSB1c2VkIGZvciBhbGwgbWVudSBzdHlsZXMuIE5lc3RlZCBtYXJnaW4gZm9yIHN1Ym1lbnUuXG4kZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBDU1MuIENhbiBiZSBlaXRoZXIgYGx0cmAgb3IgYHJ0bGAuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGdsb2JhbC10ZXh0LWRpcmVjdGlvbjogbHRyICFkZWZhdWx0O1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGZvciBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCBpdC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZ2xvYmFsLWZsZXhib3g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVkIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMgZm9yIHByb3RvdHlwZXMgaWYgYXBwbGljYWJsZVxuLy8vIEB0eXBlIEJvb2xlYW5cbiRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBjdXJzb3IncyB2YWx1ZSwgYGF1dG9gIGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBLZXl3b3JkXG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG8gIWRlZmF1bHQ7XG5cbkBpZiBub3QgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICBAZXJyb3IgJ0luICRmb3VuZGF0aW9uLXBhbGV0dGUsIHlvdSBtdXN0IGhhdmUgYSBjb2xvciBuYW1lZCBcInByaW1hcnlcIi4nO1xufVxuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgdGV4dCBkaXJlY3Rpb25cbiRnbG9iYWwtbGVmdDogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsIHJpZ2h0LCBsZWZ0KTtcbiRnbG9iYWwtcmlnaHQ6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBsZWZ0LCByaWdodCk7XG5cbi8vIEludGVybmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGZsZXgganVzdGlmeWluZyBvcHRpb25zXG4kLXpmLWZsZXgtanVzdGlmeTogLXpmLWZsZXgtanVzdGlmeSgkZ2xvYmFsLXRleHQtZGlyZWN0aW9uKTtcblxuLy8vIEdsb2JhbCB0b2xlcmFuY2UgZm9yIGNvbG9yIHBpY2sgY29udHJhc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwICFkZWZhdWx0O1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgY29sb3JzXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWdsb2JhbC1zdHlsZXMge1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLW5vcm1hbGl6ZTtcblxuICAvLyBUaGVzZSBzdHlsZXMgYXJlIGFwcGxpZWQgdG8gYSA8bWV0YT4gdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHRcbiAgLmZvdW5kYXRpb24tbXEge1xuICAgIGZvbnQtZmFtaWx5OiAnI3stemYtYnAtc2VyaWFsaXplKCRicmVha3BvaW50cyl9JztcbiAgfVxuXG4gIGh0bWwge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIFNldCBib3gtc2l6aW5nIGdsb2JhbGx5IHRvIGhhbmRsZSBwYWRkaW5nIGFuZCBib3JkZXIgd2lkdGhzXG4gICosXG4gICo6OmJlZm9yZSxcbiAgKjo6YWZ0ZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBEZWZhdWx0IGJvZHkgc3R5bGVzXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZDtcblxuICAgIGZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4gICAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG5cbiAgICBAaWYgKCRib2R5LWFudGlhbGlhc2VkKSB7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICAvLyBHZXQgcmlkIG9mIGdhcCB1bmRlciBpbWFnZXMgYnkgbWFraW5nIHRoZW0gZGlzcGxheTogaW5saW5lLWJsb2NrOyBieSBkZWZhdWx0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAvLyBHcmlkIGRlZmF1bHRzIHRvIGdldCBpbWFnZXMgYW5kIGVtYmVkcyB0byB3b3JrIHByb3Blcmx5XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIHRha2VzIG9uIGhlaWdodCBhdXRvbWF0aWNhbGx5XG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogNTBweDtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgfVxuXG4gIC8vIE1ha2Ugc2VsZWN0IGVsZW1lbnRzIGFyZSAxMDAlIHdpZHRoIGJ5IGRlZmF1bHRcbiAgc2VsZWN0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgLy8gU3R5bGVzIEdvb2dsZSBNYXBzIGFuZCBNYXBRdWVzdCBlbWJlZHMgcHJvcGVybHlcbiAgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1pZHNcbiAgLm1hcF9jYW52YXMsXG4gIC5tcWEtZGlzcGxheSB7XG4gICAgaW1nLFxuICAgIGVtYmVkLFxuICAgIG9iamVjdCB7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCA8YnV0dG9uPiBzdHlsZXMgY3JlYXRlZCBieSBtb3N0IGJyb3dzZXJzXG4gIGJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY3Vyc29yOiAkZ2xvYmFsLWJ1dHRvbi1jdXJzb3I7XG4gIH1cblxuICAvLyBQcmV2ZW50IHRleHQgb3ZlcmZsb3cgb24gcHJlXG4gIHByZSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAvLyBNYWtlIHJlc2V0IGluaGVyaXQgZm9udC1mYW1pbHkgaW5zdGVhZCBvZiBzZXR0aW5ncyBzYW5zLXNlcmlmXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGNsYXNzZXMgdG8gc2hvdy9oaWRlIGVsZW1lbnRzIGluIEphdmFTY3JpcHRcbiAgLmlzLXZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaXMtaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8vICBGb3VuZGF0aW9uIGZvciBTaXRlcyBTZXR0aW5nc1xuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gIFRhYmxlIG9mIENvbnRlbnRzOlxuLy9cbi8vICAgMS4gR2xvYmFsXG4vLyAgIDIuIEJyZWFrcG9pbnRzXG4vLyAgIDMuIFRoZSBHcmlkXG4vLyAgIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gICA1LiBUeXBvZ3JhcGh5IEhlbHBlcnNcbi8vICAgNi4gQWJpZGVcbi8vICAgNy4gQWNjb3JkaW9uXG4vLyAgIDguIEFjY29yZGlvbiBNZW51XG4vLyAgIDkuIEJhZGdlXG4vLyAgMTAuIEJyZWFkY3J1bWJzXG4vLyAgMTEuIEJ1dHRvblxuLy8gIDEyLiBCdXR0b24gR3JvdXBcbi8vICAxMy4gQ2FsbG91dFxuLy8gIDE0LiBDYXJkXG4vLyAgMTUuIENsb3NlIEJ1dHRvblxuLy8gIDE2LiBEcmlsbGRvd25cbi8vICAxNy4gRHJvcGRvd25cbi8vICAxOC4gRHJvcGRvd24gTWVudVxuLy8gIDE5LiBGbGV4Ym94IFV0aWxpdGllc1xuLy8gIDIwLiBGb3Jtc1xuLy8gIDIxLiBMYWJlbFxuLy8gIDIyLiBNZWRpYSBPYmplY3Rcbi8vICAyMy4gTWVudVxuLy8gIDI0LiBNZXRlclxuLy8gIDI1LiBPZmYtY2FudmFzXG4vLyAgMjYuIE9yYml0XG4vLyAgMjcuIFBhZ2luYXRpb25cbi8vICAyOC4gUHJvZ3Jlc3MgQmFyXG4vLyAgMjkuIFByb3RvdHlwZSBBcnJvd1xuLy8gIDMwLiBQcm90b3R5cGUgQm9yZGVyLUJveFxuLy8gIDMxLiBQcm90b3R5cGUgQm9yZGVyLU5vbmVcbi8vICAzMi4gUHJvdG90eXBlIEJvcmRlcmVkXG4vLyAgMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAgMzQuIFByb3RvdHlwZSBGb250LVN0eWxpbmdcbi8vICAzNS4gUHJvdG90eXBlIExpc3QtU3R5bGUtVHlwZVxuLy8gIDM2LiBQcm90b3R5cGUgT3ZlcmZsb3dcbi8vICAzNy4gUHJvdG90eXBlIFBvc2l0aW9uXG4vLyAgMzguIFByb3RvdHlwZSBSb3VuZGVkXG4vLyAgMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vICA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gIDQxLiBQcm90b3R5cGUgU2l6aW5nXG4vLyAgNDIuIFByb3RvdHlwZSBTcGFjaW5nXG4vLyAgNDMuIFByb3RvdHlwZSBUZXh0LURlY29yYXRpb25cbi8vICA0NC4gUHJvdG90eXBlIFRleHQtVHJhbnNmb3JtYXRpb25cbi8vICA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAgNDYuIFJlc3BvbnNpdmUgRW1iZWRcbi8vICA0Ny4gUmV2ZWFsXG4vLyAgNDguIFNsaWRlclxuLy8gIDQ5LiBTd2l0Y2hcbi8vICA1MC4gVGFibGVcbi8vICA1MS4gVGFic1xuLy8gIDUyLiBUaHVtYm5haWxcbi8vICA1My4gVGl0bGUgQmFyXG4vLyAgNTQuIFRvb2x0aXBcbi8vICA1NS4gVG9wIEJhclxuLy8gIDU2LiBYeSBHcmlkXG5cbi8vQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8gMS4gR2xvYmFsXG4vLyAtLS0tLS0tLS1cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCU7XG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKTtcbiRnbG9iYWwtbGluZWhlaWdodDogMS41O1xuJGZvdW5kYXRpb24tcGFsZXR0ZTogKFxuICAgICAgICBwcmltYXJ5OiAjMTc3OWJhLFxuICAgICAgICBzZWNvbmRhcnk6ICM3Njc2NzYsXG4gICAgICAgIHN1Y2Nlc3M6ICMzYWRiNzYsXG4gICAgICAgIHdhcm5pbmc6ICNmZmFlMDAsXG4gICAgICAgIGFsZXJ0OiAjY2M0YjM3LFxuKTtcbiRsaWdodC1ncmF5OiAjZTZlNmU2O1xuJG1lZGl1bS1ncmF5OiAjY2FjYWNhO1xuJGRhcmstZ3JheTogIzhhOGE4YTtcbiRibGFjazogIzBhMGEwYTtcbiR3aGl0ZTogI2ZlZmVmZTtcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjaztcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4kYm9keS1hbnRpYWxpYXNlZDogdHJ1ZTtcbiRnbG9iYWwtbWFyZ2luOiAxcmVtO1xuJGdsb2JhbC1wYWRkaW5nOiAxcmVtO1xuJGdsb2JhbC1wb3NpdGlvbjogMXJlbTtcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsO1xuJGdsb2JhbC13ZWlnaHQtYm9sZDogYm9sZDtcbiRnbG9iYWwtcmFkaXVzOiAwO1xuJGdsb2JhbC1tZW51LXBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW46IDFyZW07XG4kZ2xvYmFsLXRleHQtZGlyZWN0aW9uOiBsdHI7XG4kZ2xvYmFsLWZsZXhib3g6IHRydWU7XG4kZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50czogZmFsc2U7XG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG87XG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwO1xuJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzOiB0cnVlO1xuXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG4kcHJpbnQtaHJlZnM6IHRydWU7XG5cbi8vIDIuIEJyZWFrcG9pbnRzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWtwb2ludHM6IChcbiAgICAgICAgc21hbGw6IDAsXG4gICAgICAgIHNtZWRpdW06IDQwMHB4LFxuICAgICAgICBtZWRpdW06IDY0MHB4LFxuICAgICAgICBsYXJnZTogMTAyNHB4LFxuICAgICAgICB4bGFyZ2U6IDEyMDBweCxcbiAgICAgICAgeHhsYXJnZTogMTQ0MHB4LFxuKTtcbiRwcmludC1icmVha3BvaW50OiBsYXJnZTtcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBzbWVkaXVtIG1lZGl1bSBsYXJnZSk7XG5cbi8vIDMuIFRoZSBHcmlkXG4vLyAtLS0tLS0tLS0tLVxuXG4kZ3JpZC1yb3ctd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW4tY291bnQ6IDEyO1xuJGdyaWQtY29sdW1uLWd1dHRlcjogKFxuICAgICAgICBzbWFsbDogMjBweCxcbiAgICAgICAgbWVkaXVtOiAzMHB4LFxuKTtcbiRncmlkLWNvbHVtbi1hbGlnbi1lZGdlOiB0cnVlO1xuJGdyaWQtY29sdW1uLWFsaWFzOiAnY29sdW1ucyc7XG4kYmxvY2stZ3JpZC1tYXg6IDg7XG5cbi8vIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRoZWFkZXItZm9udC1mYW1pbHk6ICRib2R5LWZvbnQtZmFtaWx5O1xuJGhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGhlYWRlci1mb250LXN0eWxlOiBub3JtYWw7XG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiRoZWFkZXItY29sb3I6IGluaGVyaXQ7XG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJGhlYWRlci1zdHlsZXM6IChcbiAgICAgICAgc21hbGw6IChcbiAgICAgICAgICAgICAgICAnaDEnOiAoJ2ZvbnQtc2l6ZSc6IDI0KSxcbiAgICAgICAgICAgICAgICAnaDInOiAoJ2ZvbnQtc2l6ZSc6IDIwKSxcbiAgICAgICAgICAgICAgICAnaDMnOiAoJ2ZvbnQtc2l6ZSc6IDE5KSxcbiAgICAgICAgICAgICAgICAnaDQnOiAoJ2ZvbnQtc2l6ZSc6IDE4KSxcbiAgICAgICAgICAgICAgICAnaDUnOiAoJ2ZvbnQtc2l6ZSc6IDE3KSxcbiAgICAgICAgICAgICAgICAnaDYnOiAoJ2ZvbnQtc2l6ZSc6IDE2KSxcbiAgICAgICAgKSxcbiAgICAgICAgbWVkaXVtOiAoXG4gICAgICAgICAgICAgICAgJ2gxJzogKCdmb250LXNpemUnOiA0OCksXG4gICAgICAgICAgICAgICAgJ2gyJzogKCdmb250LXNpemUnOiA0MCksXG4gICAgICAgICAgICAgICAgJ2gzJzogKCdmb250LXNpemUnOiAzMSksXG4gICAgICAgICAgICAgICAgJ2g0JzogKCdmb250LXNpemUnOiAyNSksXG4gICAgICAgICAgICAgICAgJ2g1JzogKCdmb250LXNpemUnOiAyMCksXG4gICAgICAgICAgICAgICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICAgICAgICksXG4pO1xuJGhlYWRlci10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuJHNtYWxsLWZvbnQtc2l6ZTogODAlO1xuJGhlYWRlci1zbWFsbC1mb250LWNvbG9yOiAkbWVkaXVtLWdyYXk7XG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNjtcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRwYXJhZ3JhcGgtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiRjb2RlLWNvbG9yOiAkYmxhY2s7XG4kY29kZS1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiRjb2RlLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjb2RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjb2RlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNSAxKTtcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGFuY2hvci1jb2xvci1ob3Zlcjogc2NhbGUtY29sb3IoJGFuY2hvci1jb2xvciwgJGxpZ2h0bmVzczogLTE0JSk7XG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyOiBub25lO1xuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoO1xuJGhyLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRoci1tYXJnaW46IHJlbS1jYWxjKDIwKSBhdXRvO1xuJGxpc3QtbGluZWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0O1xuJGxpc3QtbWFyZ2luLWJvdHRvbTogJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tO1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiRsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuJGxpc3Qtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRkZWZubGlzdC10ZXJtLXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiRibG9ja3F1b3RlLWNvbG9yOiAkZGFyay1ncmF5O1xuJGJsb2NrcXVvdGUtcGFkZGluZzogcmVtLWNhbGMoOSAyMCAwIDE5KTtcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGNpdGUtY29sb3I6ICRkYXJrLWdyYXk7XG4kY2l0ZS1wc2V1ZG8tY29udGVudDogJ1xcMjAxNCBcXDAwMjAnO1xuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrO1xuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRrZXlzdHJva2UtcGFkZGluZzogcmVtLWNhbGMoMiA0IDApO1xuJGtleXN0cm9rZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGFiYnItdW5kZXJsaW5lOiAxcHggZG90dGVkICRibGFjaztcblxuLy8gNS4gVHlwb2dyYXBoeSBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjU7XG4kbGVhZC1saW5laGVpZ2h0OiAxLjY7XG4kc3ViaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXk7XG4kc3ViaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kc3ViaGVhZGVyLW1hcmdpbi10b3A6IDAuMnJlbTtcbiRzdWJoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJHN0YXQtZm9udC1zaXplOiAyLjVyZW07XG5cbi8vIDYuIEFiaWRlXG4vLyAtLS0tLS0tLVxuXG4kYWJpZGUtaW5wdXRzOiB0cnVlO1xuJGFiaWRlLWxhYmVsczogdHJ1ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCk7XG4kZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJGlucHV0LWVycm9yLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuXG4vLyA3LiBBY2NvcmRpb25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kYWNjb3JkaW9uLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlO1xuJGFjY29yZGlvbi10aXRsZS1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXk7XG4kYWNjb3JkaW9uLWl0ZW0tcGFkZGluZzogMS4yNXJlbSAxcmVtO1xuJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tY29udGVudC1ib3JkZXI6IDFweCBzb2xpZCAkbGlnaHQtZ3JheTtcbiRhY2NvcmRpb24tY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA4LiBBY2NvcmRpb24gTWVudVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG4kYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luOiAkZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiRhY2NvcmRpb25tZW51LWFycm93czogdHJ1ZTtcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhY2NvcmRpb25tZW51LWl0ZW0tYmFja2dyb3VuZDogbnVsbDtcbiRhY2NvcmRpb25tZW51LWJvcmRlcjogbnVsbDtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLWJhY2tncm91bmQ6IG51bGw7XG4kYWNjb3JkaW9uLXN1Ym1lbnUtdG9nZ2xlLWJvcmRlcjogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtd2lkdGg6IDQwcHg7XG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyA5LiBCYWRnZVxuLy8gLS0tLS0tLS1cblxuJGJhZGdlLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJhZGdlLWNvbG9yOiAkd2hpdGU7XG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2s7XG4kYmFkZ2UtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRiYWRnZS1wYWRkaW5nOiAwLjNlbTtcbiRiYWRnZS1taW53aWR0aDogMi4xZW07XG4kYmFkZ2UtZm9udC1zaXplOiAwLjZyZW07XG5cbi8vIDEwLiBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiRicmVhZGNydW1icy1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwO1xuJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplOiByZW0tY2FsYygxMSk7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50OiAkYmxhY2s7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtO1xuJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJztcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLXJ0bDogJ1xcXFwnO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWNvbG9yOiAkbWVkaXVtLWdyYXk7XG5cbi8vIDExLiBCdXR0b25cbi8vIC0tLS0tLS0tLS1cblxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdDtcbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbTtcbiRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRidXR0b24tZmlsbDogc29saWQ7XG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpO1xuJGJ1dHRvbi1jb2xvcjogJHdoaXRlO1xuJGJ1dHRvbi1jb2xvci1hbHQ6ICRibGFjaztcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRidXR0b24taG9sbG93LWJvcmRlci13aWR0aDogMXB4O1xuJGJ1dHRvbi1zaXplczogKFxuICAgICAgICB0aW55OiAwLjZyZW0sXG4gICAgICAgIHNtYWxsOiAwLjc1cmVtLFxuICAgICAgICBkZWZhdWx0OiAwLjlyZW0sXG4gICAgICAgIGxhcmdlOiAxLjI1cmVtLFxuKTtcbiRidXR0b24tcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlci1saWdodG5lc3M6IC0yMCU7XG4kYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3M6IC01MCU7XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0O1xuJGJ1dHRvbi1yZXNwb25zaXZlLWV4cGFuZGVkOiBmYWxzZTtcblxuLy8gMTIuIEJ1dHRvbiBHcm91cFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kYnV0dG9uZ3JvdXAtbWFyZ2luOiAxcmVtO1xuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweDtcbiRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcjogJy5idXR0b24nO1xuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDY7XG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWU7XG5cbi8vIDEzLiBDYWxsb3V0XG4vLyAtLS0tLS0tLS0tLVxuXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JTtcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KTtcbiRjYWxsb3V0LW1hcmdpbjogMCAwIDFyZW0gMDtcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW07XG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhbGxvdXQtZm9udC1jb2xvci1hbHQ6ICRib2R5LWJhY2tncm91bmQ7XG4kY2FsbG91dC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGNhbGxvdXQtbGluay10aW50OiAzMCU7XG5cbi8vIDE0LiBDYXJkXG4vLyAtLS0tLS0tLVxuXG4kY2FyZC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FyZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5O1xuJGNhcmQtc2hhZG93OiBub25lO1xuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmc7XG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcblxuLy8gMTUuIENsb3NlIEJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kY2xvc2VidXR0b24tcG9zaXRpb246IHJpZ2h0IHRvcDtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbDogKFxuICAgICAgICBzbWFsbDogMC42NnJlbSxcbiAgICAgICAgbWVkaXVtOiAxcmVtLFxuKTtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtdmVydGljYWw6IChcbiAgICAgICAgc21hbGw6IDAuMzNlbSxcbiAgICAgICAgbWVkaXVtOiAwLjVyZW0sXG4pO1xuJGNsb3NlYnV0dG9uLXNpemU6IChcbiAgICAgICAgc21hbGw6IDEuNWVtLFxuICAgICAgICBtZWRpdW06IDJlbSxcbik7XG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMTtcbiRjbG9zZWJ1dHRvbi1jb2xvcjogJGRhcmstZ3JheTtcbiRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjogJGJsYWNrO1xuXG4vLyAxNi4gRHJpbGxkb3duXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhcjtcbiRkcmlsbGRvd24tYXJyb3dzOiB0cnVlO1xuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcmlsbGRvd24tbmVzdGVkLW1hcmdpbjogMDtcbiRkcmlsbGRvd24tYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyaWxsZG93bi1zdWJtZW51LXBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyAxNy4gRHJvcGRvd25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kZHJvcGRvd24tcGFkZGluZzogMXJlbTtcbiRkcm9wZG93bi1iYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kO1xuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1mb250LXNpemU6IDFyZW07XG4kZHJvcGRvd24td2lkdGg6IDMwMHB4O1xuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZHJvcGRvd24tc2l6ZXM6IChcbiAgICAgICAgdGlueTogMTAwcHgsXG4gICAgICAgIHNtYWxsOiAyMDBweCxcbiAgICAgICAgbGFyZ2U6IDQwMHB4LFxuKTtcblxuLy8gMTguIERyb3Bkb3duIE1lbnVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlO1xuJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvcjogJGFuY2hvci1jb2xvcjtcbiRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nOiAxLjVyZW07XG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHg7XG4kZHJvcGRvd25tZW51LWJhY2tncm91bmQ6IG51bGw7XG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyb3Bkb3dubWVudS1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcm9wZG93bm1lbnUtbmVzdGVkLW1hcmdpbjogMDtcbiRkcm9wZG93bm1lbnUtc3VibWVudS1wYWRkaW5nOiAkZHJvcGRvd25tZW51LXBhZGRpbmc7XG4kZHJvcGRvd25tZW51LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1tZW51LWl0ZW0tY29sb3ItYWN0aXZlOiBnZXQtY29sb3IocHJpbWFyeSk7XG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudDtcblxuLy8gMTkuIEZsZXhib3ggVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2O1xuJGZsZXhib3gtcmVzcG9uc2l2ZS1icmVha3BvaW50czogdHJ1ZTtcblxuLy8gMjAuIEZvcm1zXG4vLyAtLS0tLS0tLS1cblxuJGZpZWxkc2V0LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRmaWVsZHNldC1wYWRkaW5nOiByZW0tY2FsYygyMCk7XG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKTtcbiRsZWdlbmQtcGFkZGluZzogcmVtLWNhbGMoMCAzKTtcbiRmb3JtLXNwYWNpbmc6IHJlbS1jYWxjKDE2KTtcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrO1xuJGhlbHB0ZXh0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGhlbHB0ZXh0LWZvbnQtc3R5bGU6IGl0YWxpYztcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjaztcbiRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1wcmVmaXgtcGFkZGluZzogMXJlbTtcbiRmb3JtLWxhYmVsLWNvbG9yOiAkYmxhY2s7XG4kZm9ybS1sYWJlbC1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kZm9ybS1sYWJlbC1saW5lLWhlaWdodDogMS44O1xuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5O1xuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGlucHV0LWNvbG9yOiAkYmxhY2s7XG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1mb250LWZhbWlseTogaW5oZXJpdDtcbiRpbnB1dC1mb250LXNpemU6IHJlbS1jYWxjKDE2KTtcbiRpbnB1dC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGlucHV0LWxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4kaW5wdXQtYmFja2dyb3VuZDogJHdoaXRlO1xuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMjtcbiRpbnB1dC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKCRibGFjaywgMC4xKTtcbiRpbnB1dC1zaGFkb3ctZm9jdXM6IDAgMCA1cHggJG1lZGl1bS1ncmF5O1xuJGlucHV0LWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG4kaW5wdXQtbnVtYmVyLXNwaW5uZXJzOiB0cnVlO1xuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZm9ybS1idXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjEuIExhYmVsXG4vLyAtLS0tLS0tLS1cblxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGxhYmVsLWNvbG9yOiAkd2hpdGU7XG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2s7XG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbTtcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbTtcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyMi4gTWVkaWEgT2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlO1xuXG4vLyAyMy4gTWVudVxuLy8gLS0tLS0tLS1cblxuJG1lbnUtbWFyZ2luOiAwO1xuJG1lbnUtbmVzdGVkLW1hcmdpbjogJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW47XG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW07XG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJG1lbnUtaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWU7XG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZTtcbiRtZW51LWljb25zLWJhY2stY29tcGF0OiB0cnVlO1xuXG4vLyAyNC4gTWV0ZXJcbi8vIC0tLS0tLS0tLVxuXG4kbWV0ZXItaGVpZ2h0OiAxcmVtO1xuJG1ldGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kbWV0ZXItYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5O1xuJG1ldGVyLWZpbGwtZ29vZDogJHN1Y2Nlc3MtY29sb3I7XG4kbWV0ZXItZmlsbC1tZWRpdW06ICR3YXJuaW5nLWNvbG9yO1xuJG1ldGVyLWZpbGwtYmFkOiAkYWxlcnQtY29sb3I7XG5cbi8vIDI1LiBPZmYtY2FudmFzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5O1xuJG9mZmNhbnZhcy1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoJGJsYWNrLCAwLjcpO1xuJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZTogMjBweDtcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LWNvbG9yOiByZ2JhKCRibGFjaywgMC4yNSk7XG4kb2ZmY2FudmFzLW92ZXJsYXktemluZGV4OiAxMTtcbiRvZmZjYW52YXMtcHVzaC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDogMTM7XG4kb2ZmY2FudmFzLXJldmVhbC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cztcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmc6IGVhc2U7XG4kb2ZmY2FudmFzLWZpeGVkLXJldmVhbDogdHJ1ZTtcbiRvZmZjYW52YXMtZXhpdC1iYWNrZ3JvdW5kOiByZ2JhKCR3aGl0ZSwgMC4yNSk7XG4kbWFpbmNvbnRlbnQtY2xhc3M6ICdvZmYtY2FudmFzLWNvbnRlbnQnO1xuXG4vLyAyNi4gT3JiaXRcbi8vIC0tLS0tLS0tLVxuXG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU6ICRkYXJrLWdyYXk7XG4kb3JiaXQtYnVsbGV0LWRpYW1ldGVyOiAxLjJyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbjogMC4xcmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW4tdG9wOiAwLjhyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbTtcbiRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTA7XG5cbi8vIDI3LiBQYWdpbmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kcGFnaW5hdGlvbi1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvcjogJGJsYWNrO1xuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKTtcbiRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZzogcmVtLWNhbGMoMSk7XG4kcGFnaW5hdGlvbi1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheTtcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1jdXJyZW50OiAkcHJpbWFyeS1jb2xvcjtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJHBhZ2luYXRpb24tZWxsaXBzaXMtY29sb3I6ICRibGFjaztcbiRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2U7XG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZTtcbiRwYWdpbmF0aW9uLWFycm93czogdHJ1ZTtcblxuLy8gMjguIFByb2dyZXNzIEJhclxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvZ3Jlc3MtaGVpZ2h0OiAxcmVtO1xuJHByb2dyZXNzLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRwcm9ncmVzcy1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm9ncmVzcy1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyOS4gUHJvdG90eXBlIEFycm93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtYXJyb3ctZGlyZWN0aW9uczogKFxuICAgICAgICBkb3duLFxuICAgICAgICB1cCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnRcbik7XG4kcHJvdG90eXBlLWFycm93LXNpemU6IDAuNDM3NXJlbTtcbiRwcm90b3R5cGUtYXJyb3ctY29sb3I6ICRibGFjaztcblxuLy8gMzAuIFByb3RvdHlwZSBCb3JkZXItQm94XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1ib3JkZXItYm94LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzEuIFByb3RvdHlwZSBCb3JkZXItTm9uZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlci1ub25lLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzIuIFByb3RvdHlwZSBCb3JkZXJlZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlcmVkLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtYm9yZGVyLXdpZHRoOiByZW0tY2FsYygxKTtcbiRwcm90b3R5cGUtYm9yZGVyLXR5cGU6IHNvbGlkO1xuJHByb3RvdHlwZS1ib3JkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcblxuLy8gMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kaXNwbGF5LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtZGlzcGxheTogKFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIGlubGluZS1ibG9jayxcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0YWJsZS1jZWxsXG4pO1xuXG4vLyAzNC4gUHJvdG90eXBlIEZvbnQtU3R5bGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1mb250LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtd2lkZS1sZXR0ZXItc3BhY2luZzogcmVtLWNhbGMoNCk7XG4kcHJvdG90eXBlLWZvbnQtbm9ybWFsOiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kcHJvdG90eXBlLWZvbnQtYm9sZDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcblxuLy8gMzUuIFByb3RvdHlwZSBMaXN0LVN0eWxlLVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtbGlzdC1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXN0eWxlLXR5cGUtdW5vcmRlcmVkOiAoXG4gICAgICAgIGRpc2MsXG4gICAgICAgIGNpcmNsZSxcbiAgICAgICAgc3F1YXJlXG4pO1xuJHByb3RvdHlwZS1zdHlsZS10eXBlLW9yZGVyZWQ6IChcbiAgICAgICAgZGVjaW1hbCxcbiAgICAgICAgbG93ZXItYWxwaGEsXG4gICAgICAgIGxvd2VyLWxhdGluLFxuICAgICAgICBsb3dlci1yb21hbixcbiAgICAgICAgdXBwZXItYWxwaGEsXG4gICAgICAgIHVwcGVyLWxhdGluLFxuICAgICAgICB1cHBlci1yb21hblxuKTtcblxuLy8gMzYuIFByb3RvdHlwZSBPdmVyZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLW92ZXJmbG93LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtb3ZlcmZsb3c6IChcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaGlkZGVuLFxuICAgICAgICBzY3JvbGxcbik7XG5cbi8vIDM3LiBQcm90b3R5cGUgUG9zaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1wb3NpdGlvbi1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXBvc2l0aW9uOiAoXG4gICAgICAgIHN0YXRpYyxcbiAgICAgICAgcmVsYXRpdmUsXG4gICAgICAgIGFic29sdXRlLFxuICAgICAgICBmaXhlZFxuKTtcbiRwcm90b3R5cGUtcG9zaXRpb24tei1pbmRleDogOTc1O1xuXG4vLyAzOC4gUHJvdG90eXBlIFJvdW5kZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXJvdW5kZWQtYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3JkZXItcmFkaXVzOiByZW0tY2FsYygzKTtcblxuLy8gMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtc2VwYXJhdG9yLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtc2VwYXJhdG9yLWFsaWduOiBjZW50ZXI7XG4kcHJvdG90eXBlLXNlcGFyYXRvci1oZWlnaHQ6IHJlbS1jYWxjKDIpO1xuJHByb3RvdHlwZS1zZXBhcmF0b3Itd2lkdGg6IDNyZW07XG4kcHJvdG90eXBlLXNlcGFyYXRvci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm90b3R5cGUtc2VwYXJhdG9yLW1hcmdpbi10b3A6ICRnbG9iYWwtbWFyZ2luO1xuXG4vLyA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaGFkb3ctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIC4xNiksXG4wIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpO1xuXG4vLyA0MS4gUHJvdG90eXBlIFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaXppbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zaXppbmc6IChcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuKTtcbiRwcm90b3R5cGUtc2l6ZXM6IChcbiAgICAgICAgMjU6IDI1JSxcbiAgICAgICAgNTA6IDUwJSxcbiAgICAgICAgNzU6IDc1JSxcbiAgICAgICAgMTAwOiAxMDAlXG4pO1xuXG4vLyA0Mi4gUHJvdG90eXBlIFNwYWNpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXNwYWNpbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zcGFjZXJzLWNvdW50OiAzO1xuXG4vLyA0My4gUHJvdG90eXBlIFRleHQtRGVjb3JhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kZWNvcmF0aW9uLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1kZWNvcmF0aW9uOiAoXG4gICAgICAgIG92ZXJsaW5lLFxuICAgICAgICB1bmRlcmxpbmUsXG4gICAgICAgIGxpbmUtdGhyb3VnaCxcbik7XG5cbi8vIDQ0LiBQcm90b3R5cGUgVGV4dC1UcmFuc2Zvcm1hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdHJhbnNmb3JtYXRpb24tYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS10ZXh0LXRyYW5zZm9ybWF0aW9uOiAoXG4gICAgICAgIGxvd2VyY2FzZSxcbiAgICAgICAgdXBwZXJjYXNlLFxuICAgICAgICBjYXBpdGFsaXplXG4pO1xuXG4vLyA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdXRpbGl0aWVzLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cbi8vIDQ2LiBSZXNwb25zaXZlIEVtYmVkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tOiByZW0tY2FsYygxNik7XG4kcmVzcG9uc2l2ZS1lbWJlZC1yYXRpb3M6IChcbiAgICAgICAgZGVmYXVsdDogNCBieSAzLFxuICAgICAgICB3aWRlc2NyZWVuOiAxNiBieSA5LFxuKTtcblxuLy8gNDcuIFJldmVhbFxuLy8gLS0tLS0tLS0tLVxuXG4kcmV2ZWFsLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRyZXZlYWwtd2lkdGg6IDYwMHB4O1xuJHJldmVhbC1tYXgtd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kcmV2ZWFsLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRyZXZlYWwtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJHJldmVhbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHJldmVhbC16aW5kZXg6IDEwMDU7XG4kcmV2ZWFsLW92ZXJsYXktYmFja2dyb3VuZDogcmdiYSgkYmxhY2ssIDAuNDUpO1xuXG4vLyA0OC4gU2xpZGVyXG4vLyAtLS0tLS0tLS0tXG5cbiRzbGlkZXItd2lkdGgtdmVydGljYWw6IDAuNXJlbTtcbiRzbGlkZXItdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4kc2xpZGVyLWhlaWdodDogMC41cmVtO1xuJHNsaWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRzbGlkZXItZmlsbC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kc2xpZGVyLWhhbmRsZS1oZWlnaHQ6IDEuNHJlbTtcbiRzbGlkZXItaGFuZGxlLXdpZHRoOiAxLjRyZW07XG4kc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRzbGlkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNDkuIFN3aXRjaFxuLy8gLS0tLS0tLS0tLVxuXG4kc3dpdGNoLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU6ICRwcmltYXJ5LWNvbG9yO1xuJHN3aXRjaC1oZWlnaHQ6IDJyZW07XG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW07XG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbTtcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW07XG4kc3dpdGNoLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kc3dpdGNoLW1hcmdpbjogJGdsb2JhbC1tYXJnaW47XG4kc3dpdGNoLXBhZGRsZS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc3dpdGNoLXBhZGRsZS1vZmZzZXQ6IDAuMjVyZW07XG4kc3dpdGNoLXBhZGRsZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0O1xuXG4vLyA1MC4gVGFibGVcbi8vIC0tLS0tLS0tLVxuXG4kdGFibGUtYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYmxlLWNvbG9yLXNjYWxlOiA1JTtcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1wYWRkaW5nOiByZW0tY2FsYyg4IDEwIDEwKTtcbiR0YWJsZS1ob3Zlci1zY2FsZTogMiU7XG4kdGFibGUtcm93LWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtcm93LXN0cmlwZS1ob3ZlcjogZGFya2VuKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUgKyAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWlzLXN0cmlwZWQ6IHRydWU7XG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1zdHJpcGU6IGV2ZW47XG4kdGFibGUtaGVhZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlIC8gMik7XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWZvb3QtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSk7XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWhlYWQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWJsZS1mb290LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kc2hvdy1oZWFkZXItZm9yLXN0YWNrZWQ6IGZhbHNlO1xuJHRhYmxlLXN0YWNrLWJyZWFrcG9pbnQ6IG1lZGl1bTtcblxuLy8gNTEuIFRhYnNcbi8vIC0tLS0tLS0tXG5cbiR0YWItbWFyZ2luOiAwO1xuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiR0YWItYmFja2dyb3VuZC1hY3RpdmU6ICRsaWdodC1ncmF5O1xuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJHRhYi1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZTtcbiR0YWItaXRlbS1wYWRkaW5nOiAxLjI1cmVtIDEuNXJlbTtcbiR0YWItY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbnRlbnQtYm9yZGVyOiAkbGlnaHQtZ3JheTtcbiR0YWItY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA1Mi4gVGh1bWJuYWlsXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiR0aHVtYm5haWwtYm9yZGVyOiA0cHggc29saWQgJHdoaXRlO1xuJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiR0aHVtYm5haWwtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgkYmxhY2ssIDAuMik7XG4kdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjogMCAwIDZweCAxcHggcmdiYSgkcHJpbWFyeS1jb2xvciwgMC41KTtcbiR0aHVtYm5haWwtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcyBlYXNlLW91dDtcbiR0aHVtYm5haWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTMuIFRpdGxlIEJhclxuLy8gLS0tLS0tLS0tLS0tLVxuXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrO1xuJHRpdGxlYmFyLWNvbG9yOiAkd2hpdGU7XG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtO1xuJHRpdGxlYmFyLXRleHQtZm9udC13ZWlnaHQ6IGJvbGQ7XG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlO1xuJHRpdGxlYmFyLWljb24tY29sb3ItaG92ZXI6ICRtZWRpdW0tZ3JheTtcbiR0aXRsZWJhci1pY29uLXNwYWNpbmc6IDAuMjVyZW07XG5cbi8vIDU0LiBUb29sdGlwXG4vLyAtLS0tLS0tLS0tLVxuXG4kaGFzLXRpcC1jdXJzb3I6IGhlbHA7XG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheTtcbiR0b29sdGlwLWJhY2tncm91bmQtY29sb3I6ICRibGFjaztcbiR0b29sdGlwLWNvbG9yOiAkd2hpdGU7XG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtO1xuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbTtcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbTtcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2O1xuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTUuIFRvcCBCYXJcbi8vIC0tLS0tLS0tLS0tXG5cbiR0b3BiYXItcGFkZGluZzogMC41cmVtO1xuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwO1xuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHg7XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtO1xuXG4vLyA1Ni4gWHkgR3JpZFxuLy8gLS0tLS0tLS0tLS1cblxuJHh5LWdyaWQ6IHRydWU7XG4kZ3JpZC1jb250YWluZXI6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW5zOiAxMjtcbiRncmlkLW1hcmdpbi1ndXR0ZXJzOiAoXG4gICAgICAgIHNtYWxsOiAyMHB4LFxuICAgICAgICBtZWRpdW06IDMwcHhcbik7XG4kZ3JpZC1wYWRkaW5nLWd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzO1xuJGdyaWQtY29udGFpbmVyLXBhZGRpbmc6ICRncmlkLXBhZGRpbmctZ3V0dGVycztcbiRncmlkLWNvbnRhaW5lci1tYXg6ICRnbG9iYWwtd2lkdGg7XG4keHktYmxvY2stZ3JpZC1tYXg6IDg7XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIENyZWF0ZXMgYW4gaW5uZXIgYm94LXNoYWRvdyBmb3Igb25seSBvbmUgc2lkZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2lkZSAtIFNpZGUgdGhlIHNoYWRvdyBpcyBzdXBwb3NlZCB0byBhcHBlYXIuIENhbiBiZSBgdG9wYCwgYGxlZnRgLCBgcmlnaHRgIG9yIGBib3R0b21gLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc2l6ZSAtIFdpZHRoIGZvciB0aGUgdGFyZ2V0IHNpZGUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIC0gQ29sb3Igb2YgdGhlIHNoYWRvdy5cbkBtaXhpbiBpbm5lci1zaWRlLXNoYWRvdyhcbiAgJHNpZGU6IGJvdHRvbSxcbiAgJHNpemU6IDIwcHgsXG4gICRjb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpXG4pIHtcblxuICAkaGVscGVyOiByb3VuZCgkc2l6ZSAqIDAuNjUpO1xuXG4gIEBpZiAoJHNpZGUgPT0gdG9wKSB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAkaGVscGVyICRzaXplICgtMSkqJGhlbHBlciAkY29sb3I7XG4gIH0gQGVsc2UgaWYgKCRzaWRlID09IGxlZnQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAkaGVscGVyIDAgJHNpemUgKC0xKSokaGVscGVyICRjb2xvcjtcbiAgfSBAZWxzZSBpZiAoJHNpZGUgPT0gcmlnaHQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAoLTEpKiRoZWxwZXIgMCAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9IEBlbHNlIGlmICgkc2lkZSA9PSBib3R0b20pIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwICgtMSkqJGhlbHBlciAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgQ1NTIHRyaWFuZ2xlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZHJvcGRvd24gYXJyb3dzLCBkcm9wZG93biBwaXBzLCBhbmQgbW9yZS4gVXNlIHRoaXMgbWl4aW4gaW5zaWRlIGEgYCY6OmJlZm9yZWAgb3IgYCY6OmFmdGVyYCBzZWxlY3RvciwgdG8gYXR0YWNoIHRoZSB0cmlhbmdsZSB0byBhbiBleGlzdGluZyBlbGVtZW50LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0cmlhbmdsZS1zaXplIC0gV2lkdGggb2YgdGhlIHRyaWFuZ2xlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICR0cmlhbmdsZS1jb2xvciAtIENvbG9yIG9mIHRoZSB0cmlhbmdsZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICR0cmlhbmdsZS1kaXJlY3Rpb24gLSBEaXJlY3Rpb24gdGhlIHRyaWFuZ2xlIHBvaW50cy4gQ2FuIGJlIGB1cGAsIGByaWdodGAsIGBkb3duYCwgb3IgYGxlZnRgLlxuQG1peGluIGNzcy10cmlhbmdsZShcbiAgJHRyaWFuZ2xlLXNpemUsXG4gICR0cmlhbmdsZS1jb2xvcixcbiAgJHRyaWFuZ2xlLWRpcmVjdGlvblxuKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuXG4gIGJvcmRlcjogaW5zZXQgJHRyaWFuZ2xlLXNpemU7XG5cbiAgY29udGVudDogJyc7XG5cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IGRvd24pIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJHRyaWFuZ2xlLWNvbG9yIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIEBpZiAoJHRyaWFuZ2xlLWRpcmVjdGlvbiA9PSB1cCkge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3I7XG4gIH1cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IHJpZ2h0KSB7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvcjtcbiAgfVxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gbGVmdCkge1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBtZW51IGljb24gd2l0aCBhIHNldCB3aWR0aCwgaGVpZ2h0LCBudW1iZXIgb2YgYmFycywgYW5kIGNvbG9ycy4gVGhlIG1peGluIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUgaWNvbiBhbmQgdGhlIHdlaWdodCBvZiB0aGUgYmFycyB0byBkZXRlcm1pbmUgc3BhY2luZy4gPGRpdiBjbGFzcz1cImRvY3MtZXhhbXBsZS1idXJnZXJcIj48L2Rpdj5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIGljb24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yLWhvdmVyIFskZGFyay1ncmF5XSAtIENvbG9yIHRvIHVzZSB3aGVuIHRoZSBpY29uIGlzIGhvdmVyZWQgb3Zlci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFsyMHB4XSAtIFdpZHRoIG9mIHRoZSBpY29uLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkaGVpZ2h0IFsxNnB4XSAtIEhlaWdodCBvZiB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdlaWdodCBbMnB4XSAtIEhlaWdodCBvZiBpbmRpdmlkdWFsIGJhcnMgaW4gdGhlIGljb24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXJzIFszXSAtIE51bWJlciBvZiBiYXJzIGluIHRoZSBpY29uLlxuQG1peGluIGhhbWJ1cmdlcihcbiAgJGNvbG9yOiAkYmxhY2ssXG4gICRjb2xvci1ob3ZlcjogJGRhcmstZ3JheSxcbiAgJHdpZHRoOiAyMHB4LFxuICAkaGVpZ2h0OiAxNnB4LFxuICAkd2VpZ2h0OiAycHgsXG4gICRiYXJzOiAzXG4pIHtcbiAgLy8gYm94LXNoYWRvdyBDU1Mgb3V0cHV0XG4gICRzaGFkb3c6ICgpO1xuICAkaG92ZXItc2hhZG93OiAoKTtcblxuICAvLyBTcGFjaW5nIGJldHdlZW4gYmFycyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGljb24gYW5kIHRoZSB3ZWlnaHQgb2YgZWFjaCBiYXJcbiAgJHNwYWNpbmc6ICgkaGVpZ2h0IC0gKCR3ZWlnaHQgKiAkYmFycykpIC8gKCRiYXJzIC0gMSk7XG5cbiAgQGlmIHVuaXQoJHNwYWNpbmcpID09ICdweCcge1xuICAgICRzcGFjaW5nOiBmbG9vcigkc3BhY2luZyk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAkb2Zmc2V0OiAoJHdlaWdodCArICRzcGFjaW5nKSAqICgkaSAtIDEpO1xuICAgICRzaGFkb3c6IGFwcGVuZCgkc2hhZG93LCAwICRvZmZzZXQgMCAkY29sb3IsIGNvbW1hKTtcbiAgfVxuXG4gIC8vIEljb24gY29udGFpbmVyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogJHdpZHRoO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBJY29uIGJhcnNcbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHdlaWdodDtcblxuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93O1xuXG4gICAgY29udGVudDogJyc7XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZVxuICBAaWYgJGNvbG9yLWhvdmVyIHtcbiAgICAvLyBHZW5lcmF0ZSBDU1NcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgICAkaG92ZXItc2hhZG93OiBhcHBlbmQoJGhvdmVyLXNoYWRvdywgMCAkb2Zmc2V0IDAgJGNvbG9yLWhvdmVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhvdmVyO1xuICAgICAgYm94LXNoYWRvdzogJGhvdmVyLXNoYWRvdztcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgYSBkb3dud2FyZC1mYWNpbmcgdHJpYW5nbGUgYXMgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGFuIGVsZW1lbnQuIFRoZSBpbWFnZSBpcyBmb3JtYXR0ZWQgYXMgYW4gU1ZHLCBtYWtpbmcgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIGNvbG9yLiBCZWNhdXNlIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3Qgc3VwcG9ydCBlbmNvZGVkIFNWR3MgYXMgYmFja2dyb3VuZCBpbWFnZXMsIGEgUE5HIGZhbGxiYWNrIGlzIGFsc28gaW5jbHVkZWQuXG4vLy8gVGhlcmUgYXJlIHR3byBQTkcgZmFsbGJhY2tzOiBhIGJsYWNrIHRyaWFuZ2xlIGFuZCBhIHdoaXRlIHRyaWFuZ2xlLiBUaGUgb25lIHVzZWQgZGVwZW5kcyBvbiB0aGUgbGlnaHRuZXNzIG9mIHRoZSBpbnB1dCBjb2xvci5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIHRyaWFuZ2xlLlxuQG1peGluIGJhY2tncm91bmQtdHJpYW5nbGUoJGNvbG9yOiAkYmxhY2spIHtcbiAgJHJnYjogJ3JnYiUyOCN7cm91bmQocmVkKCRjb2xvcikpfSwgI3tyb3VuZChncmVlbigkY29sb3IpKX0sICN7cm91bmQoYmx1ZSgkY29sb3IpKX0lMjknO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSczMicgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDMyIDI0Jz48cG9seWdvbiBwb2ludHM9JzAsMCAzMiwwIDE2LDI0JyBzdHlsZT0nZmlsbDogI3skcmdifSc+PC9wb2x5Z29uPjwvc3ZnPlwiKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjBcXDApIHtcbiAgICBAaWYgbGlnaHRuZXNzKCRjb2xvcikgPCA2MCUge1xuICAgICAgLy8gV2hpdGUgdHJpYW5nbGVcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFZQ0FZQUFBQ2JVLzgwQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJcEpSRUZVZU5yRWtja05nREFNQkJmUmtFdDBPYlJCQmRzR1hVRGdtUWZLNFhoSDJtOGN6UUFBeTI3UjN0c3c0UWZlMng4dU9PNm9ZTGI2R2xPb3IzR0Yrc3dVUkFPbVVKK1J3dEVKczlXdlRHRVl4QlhxSTFNUUFaaENmVVFLUnpETVZqK1R3ckFJVjZqdlNVRWtZQXIxTFNrY3lUQmIvVitLWWZYN3hBZXVzcTNzTER0R0gza0VHQUNQV0lmbE5aZmhSUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBCbGFjayB0cmlhbmdsZVxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU1CSlJFRlVlTnJFbGxzT2hDQU1SVnN6QzlJbHpVN0tDbVZIVEpzb01XWU1VdHB5djlCZ2J1WFFCNVpTZGdCWVlZNHljZ0Jpdms4S1lGc1FNZk1pVFRCUDRvM25VekNLek9hYkxKYkx5Mi9nMzFldkdrQWdpblI0L1plZ0tINXFYM2JKQ3NjQTN0MHgza2dPNXRRRnloaEZmNTB4UnFGTGJ5TVVOSlF6Z3lqR1Mvd2dDcHZLcWtSQnB1V3JFNFY5ZCsxRTRkUFVYcUlnMTA3U1FPRS8yRFJReE13VER5Z0lJblZERVQ5VDNsQ29qLzZqL1ZDbUdqWk9sMmxLcFo4QUF3RFFQN3pJaW1ER0ZRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHRoZSBtaWNybyBjbGVhcmZpeCBoYWNrIHBvcHVsYXJpemVkIGJ5IE5pY29sYXMgR2FsbGFnaGVyLiBJbmNsdWRlIHRoaXMgbWl4aW4gb24gYSBjb250YWluZXIgaWYgaXRzIGNoaWxkcmVuIGFyZSBhbGwgZmxvYXRlZCwgdG8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcHJvcGVyIGhlaWdodC5cbi8vLyBUaGUgY2xlYXJmaXggaXMgYXVnbWVudGVkIHdpdGggc3BlY2lmaWMgc3R5bGVzIHRvIHByZXZlbnQgYm9yZGVycyBpbiBmbGV4Ym94IGVudmlyb25tZW50c1xuLy8vIEBsaW5rIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLyBNaWNybyBDbGVhcmZpeCBIYWNrXG4vLy8gQGxpbmsgaHR0cDovL2RhbmlzYWRlc2lnbmVyLmNvbS9ibG9nL2ZsZXhib3gtY2xlYXItZml4LXBzZXVkby1lbGVtZW50cy8gRmxleGJveCBmaXhcbkBtaXhpbiBjbGVhcmZpeCB7XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleC1iYXNpczogMDtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLy8gQWRkcyBDU1MgZm9yIGEgXCJxdWFudGl0eSBxdWVyeVwiIHNlbGVjdG9yIHRoYXQgYXV0b21hdGljYWxseSBzaXplcyBlbGVtZW50cyBiYXNlZCBvbiBob3cgbWFueSB0aGVyZSBhcmUgaW5zaWRlIGEgY29udGFpbmVyLlxuLy8vIEBsaW5rIGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3F1YW50aXR5LXF1ZXJpZXMtZm9yLWNzcyBRdWFudGl0eSBRdWVyaWVzIGZvciBDU1Ncbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWF4IC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGV0ZWN0LiBUaGUgaGlnaGVyIHRoaXMgbnVtYmVyIGlzLCB0aGUgbW9yZSBDU1MgdGhhdCdzIHJlcXVpcmVkIHRvIGNvdmVyIGVhY2ggbnVtYmVyIG9mIGl0ZW1zLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGVsZW0gW2xpXSAtIFRhZyB0byB1c2UgZm9yIHNpYmxpbmcgc2VsZWN0b3JzLlxuQG1peGluIGF1dG8td2lkdGgoJG1heCwgJGVsZW06IGxpKSB7XG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJG1heCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQsXG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQgfiAjeyRlbGVtfSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgxIC8gJGkpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gUmVtb3ZlcyB0aGUgZm9jdXMgcmluZyBhcm91bmQgYW4gZWxlbWVudCB3aGVuIGEgbW91c2UgaW5wdXQgaXMgZGV0ZWN0ZWQuXG5AbWl4aW4gZGlzYWJsZS1tb3VzZS1vdXRsaW5lIHtcbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddICYge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgdmlzdWFsbHkgaGlkZGVuLCBidXQgc3RpbGwgYWNjZXNzaWJsZSB0byBrZXlib2FyZHMgYW5kIGFzc2lzdGl2ZSBkZXZpY2VzLlxuLy8vIEBsaW5rIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHkgSGlkaW5nIENvbnRlbnQgZm9yIEFjY2Vzc2liaWxpdHlcbi8vLyBAbGluayBodHRwOi8vaHVnb2dpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZW5mb3JjZSAtIElmIGB0cnVlYCwgdXNlIGAhaW1wb3J0YW50YCBvbiBhcHBsaWVkIHByb3BlcnRpZXNcbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZShcbiAgJGVuZm9yY2U6IHRydWVcbikge1xuICAkaW1wb3J0YW50OiBpZigkZW5mb3JjZSwgJyFpbXBvcnRhbnQnLCBudWxsKTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGUgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBoZWlnaHQ6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBwYWRkaW5nOiAwICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiBoaWRkZW4gI3skaW1wb3J0YW50fTtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKSAjeyRpbXBvcnRhbnR9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwICN7JGltcG9ydGFudH07XG4gIGJvcmRlcjogMCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gUmV2ZXJzZXMgdGhlIENTUyBvdXRwdXQgY3JlYXRlZCBieSB0aGUgYGVsZW1lbnQtaW52aXNpYmxlKClgIG1peGluLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGVuZm9yY2UgLSBJZiBgdHJ1ZWAsIHVzZSBgIWltcG9ydGFudGAgb24gYXBwbGllZCBwcm9wZXJ0aWVzXG5AbWl4aW4gZWxlbWVudC1pbnZpc2libGUtb2ZmKFxuICAkZW5mb3JjZTogdHJ1ZVxuKSB7XG4gICRpbXBvcnRhbnQ6IGlmKCRlbmZvcmNlLCAnIWltcG9ydGFudCcsIG51bGwpO1xuXG4gIHBvc2l0aW9uOiBzdGF0aWMgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgaGVpZ2h0OiBhdXRvICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiB2aXNpYmxlICN7JGltcG9ydGFudH07XG4gIGNsaXA6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gVmVydGljYWxseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiB2ZXJ0aWNhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCBpbnNpZGUgb2YgaXRzIGZpcnN0IG5vbi1zdGF0aWMgcGFyZW50LFxuLy8vIEBsaW5rIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9jZW50ZXJpbmctd2l0aC1zYXNzLyBDZW50ZXJpbmcgV2l0aCBTYXNzXG5AbWl4aW4gaG9yaXpvbnRhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLy8gQWJzb2x1dGVseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLy8gSXRlcmF0ZXMgdGhyb3VnaCBicmVha3BvaW50cyBkZWZpbmVkIGluIGAkYnJlYWtwb2ludC1jbGFzc2VzYCBhbmQgcHJpbnRzIHRoZSBDU1MgaW5zaWRlIHRoZSBtaXhpbiBhdCBlYWNoIGJyZWFrcG9pbnQncyBtZWRpYSBxdWVyeS4gVXNlIHRoaXMgd2l0aCB0aGUgZ3JpZCwgb3IgYW55IG90aGVyIGNvbXBvbmVudCB0aGF0IGhhcyByZXNwb25zaXZlIGNsYXNzZXMuXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRzbWFsbCBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBza2lwIHRoZSBgc21hbGxgIGJyZWFrcG9pbnQuIFVzZSB0aGlzIHdpdGggY29tcG9uZW50cyB0aGF0IGRvbid0IHByZWZpeCBjbGFzc2VzIHdpdGggYHNtYWxsLWAsIG9ubHkgYG1lZGl1bS1gIGFuZCB1cC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRhdXRvLWluc2VydC1icmVha3BvaW50cyBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBpdGVyYXRlIG92ZXIgYnJlYWtwb2ludHMgd2l0aG91dCBkb2luZyB0aGUgbWVkaWEgcXVlcnkgaXRzZWxmLiBVc2VmdWwgZm9yIG1vcmUgY29tcGxleCBtZWRpYSBxdWVyeSBnZW5lcmF0aW9uIGFzIGluIHRoZSBtYXJnaW4gZ3JpZC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50KFxuICAkc21hbGw6IHRydWUsXG4gICRhdXRvLWluc2VydC1icmVha3BvaW50czogdHJ1ZVxuKSB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oYXV0bywgLXpmLWJvb2woJHNtYWxsKSwgLXpmLWJvb2woJGF1dG8taW5zZXJ0LWJyZWFrcG9pbnRzKSkge1xuICAgIEBjb250ZW50XG4gIH07XG59XG5cbi8vLyBJdGVyYXRlcyB3aXRoIGBAY29udGVudGAgdGhyb3VnaCB0aGUgZ2l2ZW4gbGlzdCBvZiBicmVha3BvaW50cyBgJGJyZWFrcG9pbnRzYC5cbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfExpc3R9ICRicmVha3BvaW50cyBbYXV0b10gLSBCcmVha3BvaW50cyB0byBpdGVyYXRlcyBvbi4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbnxOdWxsfSAkemVyby1icmVha3BvaW50IFtudWxsXSAtIFdoZXRoZXIgdGhlIHplcm8tYnJlYWtwb2ludCAob2Z0ZW4gYHNtYWxsYCkgbXVzdCBiZSBpbmNsdWRlZC4gSWYgYHRydWVgLCBpdCB3aWxsIGFsd2F5cyBiZSBhZGRlZCB0byB0aGUgbGlzdCBpZiBub3QgYWxyZWFkeSB0aGVyZS4gSWYgYGZhbHNlYCwgaXQgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZC4gRG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4vLy8gQHBhcmFtIHtCb29sZWFufEtleXdvcmR9ICRtZWRpYS1xdWVyaWVzIFt0cnVlXSAtIFdoZXRoZXIgbWVkaWEtcXVlcmllcyBtdXN0IGJlIGdlbmVyYXRlZC4gSWYgYGZvci1saXN0c2AsIG9ubHkgZ2VuZXJhdGUgbWVkaWEtcXVlcmllcyB3aGVuIGAkYnJlYWtwb2ludHNgIGlzIGEgbGlzdC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50LWluKFxuICAkYnJlYWtwb2ludHM6IGF1dG8sXG4gICR6ZXJvLWJyZWFrcG9pbnQ6IG51bGwsXG4gICRtZWRpYS1xdWVyaWVzOiB0cnVlXG4pIHtcbiAgJC1saXN0OiAoKTtcbiAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IHRydWU7XG5cbiAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYnJlYWtwb2ludChzKSB0byBpdGVyYXRlIG9uLlxuICBAaWYgJGJyZWFrcG9pbnRzID09IGF1dG8ge1xuICAgICQtbGlzdDogJGJyZWFrcG9pbnQtY2xhc3NlcztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ2xpc3QnIHtcbiAgICAkLWxpc3Q6ICRicmVha3BvaW50cztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ3N0cmluZycge1xuICAgICQtbGlzdDogKCRicmVha3BvaW50cyk7XG4gICAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IGZhbHNlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCIkYnJlYWtwb2ludHNcIiBpbiBcIi16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oKVwiLiBHb3QgXCIjeyRicmVha3BvaW50c31cIiAoI3t0eXBlLW9mKCRicmVha3BvaW50cyl9KS4gRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUsIGEgbGlzdCBvZiBicmVha3BvaW50cyBvciBcImF1dG9cIic7XG4gIH1cblxuICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSB6ZXJvIGJyZWFrcG9pbnQgYWNjb3JkaW5nIHRvIGAkemVyby1icmVha3BvaW50YFxuICBAaWYgJHplcm8tYnJlYWtwb2ludCA9PSB0cnVlIHtcbiAgICAkLWxpc3Q6IGpvaW4oKCQtemYtemVyby1icmVha3BvaW50KSwgc2wtcmVtb3ZlKCQtbGlzdCwgJC16Zi16ZXJvLWJyZWFrcG9pbnQpKTtcbiAgfVxuICBAZWxzZSBpZiAkemVyby1icmVha3BvaW50ID09IGZhbHNlIHtcbiAgICAkLWxpc3Q6IHNsLXJlbW92ZSgkLWxpc3QsICQtemYtemVyby1icmVha3BvaW50KTtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb24gYnJlYWtwb2ludChzKVxuICBAZWFjaCAkYnAgaW4gJC1saXN0IHtcbiAgICAkb2xkLXpmLXNpemU6IG51bGw7XG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6ICRicCAhZ2xvYmFsO1xuXG4gICAgQGlmICgkbWVkaWEtcXVlcmllcyA9PSB0cnVlXG4gICAgICBvciAoJG1lZGlhLXF1ZXJpZXMgPT0gJ2Zvci1saXN0cycgYW5kICQtYnJlYWtwb2ludHMtaXMtYS1saXN0KSkge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnApIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgICQtemYtc2l6ZTogJG9sZC16Zi1zaXplICFnbG9iYWw7XG4gIH1cbn1cblxuLy8vIEdlbmVyYXRlIHRoZSBgQGNvbnRlbnRgIHBhc3NlZCB0byB0aGUgbWl4aW4gd2l0aCBhIHZhbHVlIGAkLXpmLWJwLXZhbHVlYCByZWxhdGVkIHRvIGEgYnJlYWtwb2ludCwgZGVwZW5kaW5nIG9uIHRoZSBgJG5hbWVgIHBhcmFtZXRlcjpcbi8vLyAtIEZvciBhIHNpbmdsZSB2YWx1ZSwgYCQtemYtYnAtdmFsdWVgIGlzIHRoaXMgdmFsdWUuXG4vLy8gLSBGb3IgYSBicmVha3BvaW50IG5hbWUsIGAkLXpmLWJwLXZhbHVlYCBpcyB0aGUgY29ycmVzcG9uZGluZyBicmVha3BvaW50IHZhbHVlIGluIGAkbWFwYC5cbi8vLyAtIEZvciBcImF1dG9cIiwgYCQtemYtYnAtdmFsdWVgIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUgaW4gYCRtYXBgIGFuZCBpcyBwYXNzZWQgdG8gYEBjb250ZW50YCwgd2hpY2ggaXMgbWFkZSByZXNwb25zaXZlIGZvciBlYWNoIGJyZWFrcG9pbnQgb2YgYCRtYXBgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfEFycmF5fEtleXdvcmR9ICRuYW1lIFthdXRvXSAtIFNpbmdsZSB2YWx1ZSwgYnJlYWtwb2ludCBuYW1lLCBvciBsaXN0IG9mIGJyZWFrcG9pbnQgbmFtZXMgdG8gdXNlLiBcImF1dG9cIiBieSBkZWZhdWx0LlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIE1hcCBvZiBicmVha3BvaW50cyBhbmQgdmFsdWVzIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2UuXG5AbWl4aW4gLXpmLWJyZWFrcG9pbnQtdmFsdWUoXG4gICRuYW1lOiBhdXRvLFxuICAkbWFwOiBudWxsXG4pIHtcbiAgQGlmICRuYW1lID09IGF1dG8gYW5kIHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcge1xuICAgIC8vIFwiYXV0b1wiXG4gICAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkaykge1xuICAgICAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZSgkdiwgJG1hcCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBicmVha3BvaW50IG5hbWVcbiAgICBAaWYgdHlwZS1vZigkbmFtZSkgPT0gJ3N0cmluZycge1xuICAgICAgJGJwLXZhbHVlOiAtemYtZ2V0LWJwLXZhbCgkbWFwLCAkbmFtZSk7XG4gICAgICBAaWYgJGJwLXZhbHVlICE9IG51bGwge1xuICAgICAgICAkbmFtZTogJGJwLXZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVcbiAgICAkLXpmLWJwLXZhbHVlOiAkbmFtZSAhZ2xvYmFsO1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEZvbnQgY29sb3Igb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBvZiBwbGFjZWhvbGRlciB0ZXh0IHdpdGhpbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGZhbWlseSBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBGb250XG4kaW5wdXQtZm9udC1mYW1pbHk6IGluaGVyaXQgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaW5wdXQtZm9udC1zaXplOiByZW0tY2FsYygxNikgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1saW5lLWhlaWdodDogJGdsb2JhbC1saW5laGVpZ2h0ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZm9jdXNlZCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBmb2N1c2VkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMiAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgaW5zaWRlIHRleHQgaW5wdXRzIHdoZW4gbm90IGZvY3VzZWQuXG4vLy8gQHR5cGUgU2hhZG93XG4kaW5wdXQtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIDAuMSkgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IG91dHNpZGUgdGV4dCBpbnB1dHMgd2hlbiBmb2N1c2VkLlxuLy8vIEB0eXBlIFNoYWRvd1xuJGlucHV0LXNoYWRvdy1mb2N1czogMCAwIDVweCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgdG8gdXNlIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGRpc2FibGVkIHRleHQgaW5wdXQuXG4vLy8gQHR5cGUgQ3Vyc29yXG4kaW5wdXQtY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuLy8vIFByb3BlcnRpZXMgdG8gdHJhbnNpdGlvbiBvbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVzIHRoZSB1cC9kb3duIGJ1dHRvbnMgdGhhdCBDaHJvbWUgYW5kIEZpcmVmb3ggYWRkIHRvIGA8aW5wdXQgdHlwZT0nbnVtYmVyJz5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRpbnB1dC1udW1iZXItc3Bpbm5lcnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBSYWRpdXMgZm9yIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBmb3JtIGJ1dHRvbnMsIGRlZmF1bHRlZCB0byBnbG9iYWwtcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGZvcm0tYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWVsZW1lbnQge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmc7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGlucHV0LXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3c7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgfVxuXG4gIC8vIEZvY3VzIHN0YXRlXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyLWZvY3VzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kLWZvY3VzO1xuICAgIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3ctZm9jdXM7XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS10ZXh0IHtcbiAgLy8gVGV4dCBpbnB1dHNcbiAgI3t0ZXh0LWlucHV0cygpfSxcbiAgdGV4dGFyZWEge1xuICAgIEBpbmNsdWRlIGZvcm0tZWxlbWVudDtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLy8gVGV4dCBhcmVhc1xuICB0ZXh0YXJlYSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgJltyb3dzXSB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgaW5wdXQsXG4gIHRleHRhcmVhIHtcbiAgICAvLyBEaXNhYmxlZC9yZWFkb25seSBzdGF0ZVxuICAgICY6ZGlzYWJsZWQsXG4gICAgJltyZWFkb25seV0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgICBjdXJzb3I6ICRpbnB1dC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgc3R5bGVzIG9uIGJ1dHRvbi1saWtlIGlucHV0c1xuICBbdHlwZT0nc3VibWl0J10sXG4gIFt0eXBlPSdidXR0b24nXSB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1idXR0b24tcmFkaXVzO1xuICB9XG5cbiAgLy8gUmVzZXQgTm9ybWFsaXplIHNldHRpbmcgY29udGVudC1ib3ggdG8gc2VhcmNoIGVsZW1lbnRzXG4gIGlucHV0W3R5cGU9J3NlYXJjaCddIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIC8vIE51bWJlciBpbnB1dCBzdHlsZXNcbiAgW3R5cGU9J251bWJlciddIHtcbiAgICBAaWYgbm90ICRpbnB1dC1udW1iZXItc3Bpbm5lcnMge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG5cbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXZlbmRvci1wcmVmaXhlc1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXIgdGV4dFxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gUmVtb3ZlcyB0aGUgdW5pdCAoZS5nLiBweCwgZW0sIHJlbSkgZnJvbSBhIHZhbHVlLCByZXR1cm5pbmcgdGhlIG51bWJlciBvbmx5LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRudW0gLSBOdW1iZXIgdG8gc3RyaXAgdW5pdCBmcm9tLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIHNhbWUgbnVtYmVyLCBzYW5zIHVuaXQuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtKSB7XG4gIEByZXR1cm4gJG51bSAvICgkbnVtICogMCArIDEpO1xufVxuXG4vLy8gQ29udmVydHMgb25lIG9yIG1vcmUgcGl4ZWwgdmFsdWVzIGludG8gbWF0Y2hpbmcgcmVtIHZhbHVlcy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICR2YWx1ZXMgLSBPbmUgb3IgbW9yZSB2YWx1ZXMgdG8gY29udmVydC4gQmUgc3VyZSB0byBzZXBhcmF0ZSB0aGVtIHdpdGggc3BhY2VzIGFuZCBub3QgY29tbWFzLiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdyYXAgdGhlIGxpc3QgaW4gcGFyZW50aGVzZXMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIFtudWxsXSAtIFRoZSBiYXNlIHZhbHVlIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgcmVtYC4gSWYgeW91J3JlIHVzaW5nIEZvdW5kYXRpb24gb3V0IG9mIHRoZSBib3gsIHRoaXMgaXMgMTZweC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgYG51bGxgLCB0aGUgZnVuY3Rpb24gd2lsbCByZWZlcmVuY2UgdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUgYXMgdGhlIGJhc2UuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gQSBsaXN0IG9mIGNvbnZlcnRlZCB2YWx1ZXMuXG5AZnVuY3Rpb24gcmVtLWNhbGMoJHZhbHVlcywgJGJhc2U6IG51bGwpIHtcbiAgJHJlbS12YWx1ZXM6ICgpO1xuICAkY291bnQ6IGxlbmd0aCgkdmFsdWVzKTtcblxuICAvLyBJZiBubyBiYXNlIGlzIGRlZmluZWQsIGRlZmVyIHRvIHRoZSBnbG9iYWwgZm9udCBzaXplXG4gIEBpZiAkYmFzZSA9PSBudWxsIHtcbiAgICAkYmFzZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBJZiB0aGUgYmFzZSBmb250IHNpemUgaXMgYSAlLCB0aGVuIG11bHRpcGx5IGl0IGJ5IDE2cHhcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIDEwMCUgZm9udCBzaXplID0gMTZweCBpbiBtb3N0IGFsbCBicm93c2Vyc1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVtIGFzIGJhc2UgYWxsb3dzIGNvcnJlY3Qgc2NhbGluZ1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgJGNvdW50ID09IDEge1xuICAgIEByZXR1cm4gLXpmLXRvLXJlbSgkdmFsdWVzLCAkYmFzZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJlbS12YWx1ZXM6IGFwcGVuZCgkcmVtLXZhbHVlcywgLXpmLXRvLXJlbShudGgoJHZhbHVlcywgJGkpLCAkYmFzZSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVtLXZhbHVlcztcbn1cblxuLy8gQ29udmVydHMgYSB1bml0bGVzcywgcGl4ZWwsIG9yIHJlbSB2YWx1ZSB0byBlbSwgZm9yIHVzZSBpbiBicmVha3BvaW50cy5cbkBmdW5jdGlvbiAtemYtYnAtdG8tZW0oJHZhbHVlKSB7XG4gIC8vIFBpeGVsIGFuZCB1bml0bGVzcyB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byByZW1zXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyBvciB1bml0bGVzcygkdmFsdWUpIHtcbiAgICAkdmFsdWU6IHJlbS1jYWxjKCR2YWx1ZSwgJGJhc2U6IDE2cHgpO1xuICB9XG5cbiAgLy8gVGhlbiB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGVtc1xuICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFlbTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgdG8gbWF0Y2hpbmcgcmVtIHZhbHVlLiAqQW55KiB2YWx1ZSBwYXNzZWQsIHJlZ2FyZGxlc3Mgb2YgdW5pdCwgaXMgYXNzdW1lZCB0byBiZSBhIHBpeGVsIHZhbHVlLiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBwaXhlbCB2YWx1ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcmVtIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gUGl4ZWwgdmFsdWUgdG8gY29udmVydC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gQmFzZSBmb3IgcGl4ZWwgY29udmVyc2lvbi5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IEEgbnVtYmVyIGluIHJlbXMsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZCB0aGUgYmFzZSBwaXhlbCB2YWx1ZS4gcmVtIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggYXMgaXMuXG5AZnVuY3Rpb24gLXpmLXRvLXJlbSgkdmFsdWUsICRiYXNlOiBudWxsKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpICE9ICdudW1iZXInIHtcbiAgICBAd2FybiBpbnNwZWN0KCR2YWx1ZSkgKyAnIHdhcyBwYXNzZWQgdG8gcmVtLWNhbGMoKSwgd2hpY2ggaXMgbm90IGEgbnVtYmVyLic7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZW0gaW50byByZW0gaWYgc29tZW9uZSBoYW5kcyBvdmVyICdlbSdzXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAxcmVtO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHJlbSBpZiB1bml0cyBmb3IgJHZhbHVlIGlzIG5vdCByZW0gb3IgZW1cbiAgQGlmIHVuaXQoJHZhbHVlKSAhPSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKSAqIDFyZW07XG4gIH1cblxuICAvLyBUdXJuIDByZW0gaW50byAwXG4gIEBpZiAkdmFsdWUgPT0gMHJlbSB7XG4gICAgJHZhbHVlOiAwO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vLyBDb252ZXJ0cyBhIHBpeGVsLCBwZXJjZW50YWdlLCByZW0gb3IgZW0gdmFsdWUgdG8gYSB1bml0bGVzcyB2YWx1ZSBiYXNlZCBvbiBhIGdpdmVuIGZvbnQgc2l6ZS4gSWRlYWwgZm9yIHdvcmtpbmcgb3V0IHVuaXRsZXNzIGxpbmUgaGVpZ2h0cy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBjb252ZXJ0IHRvIGEgdW5pdGxlc3MgbGluZSBoZWlnaHRcbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgLSBUaGUgZm9udCBzaXplIHRvIHVzZSB0byB3b3JrIG91dCB0aGUgbGluZSBoZWlnaHQgLSBkZWZhdWx0cyB0byAkZ2xvYmFsLWZvbnQtc2l6ZVxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIFVuaXRsZXNzIG51bWJlclxuQGZ1bmN0aW9uIHVuaXRsZXNzLWNhbGMoJHZhbHVlLCAkYmFzZTogbnVsbCkge1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIEZpcnN0LCBsZXRzIGNvbnZlcnQgb3VyICRiYXNlIHRvIHBpeGVsc1xuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdyZW0nIHtcbiAgICAkYmFzZTogc3RyaXAtdW5pdCgkYmFzZSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBOb3cgbGV0J3MgY29udmVydCBvdXIgdmFsdWUgdG8gcGl4ZWxzIHRvb1xuICBAaWYgdW5pdCgkdmFsdWUpID09ICclJyB7XG4gICAgJHZhbHVlOiAoJHZhbHVlIC8gMTAwJSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3JlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICBAaWYgdW5pdCgkdmFsdWUpID09ICdlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICAvLyAncHgnXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyB7XG4gICAgQHJldHVybiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKTtcbiAgfVxuXG4gIC8vIGFzc3VtZSB0aGF0IGxpbmUtaGVpZ2h0cyBncmVhdGVyIHRoYW4gMTAgYXJlIG1lYW50IHRvIGJlIGFic29sdXRlIGluICdweCdcbiAgQGlmIHVuaXRsZXNzKCR2YWx1ZSkgYW5kICgkdmFsdWUgPiAxMCkge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gc3RyaXAtdW5pdCgkYmFzZSk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWNoZWNrYm94IHtcbiAgW3R5cGU9J2ZpbGUnXSxcbiAgW3R5cGU9J2NoZWNrYm94J10sXG4gIFt0eXBlPSdyYWRpbyddIHtcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICB9XG5cbiAgLy8gU3R5bGVzIGZvciBpbnB1dC9sYWJlbCBzaWJsaW5nc1xuICBbdHlwZT0nY2hlY2tib3gnXSArIGxhYmVsLFxuICBbdHlwZT0ncmFkaW8nXSArIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuXG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGZvcm0tc3BhY2luZyAqIDAuNTtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJGZvcm0tc3BhY2luZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgJltmb3JdIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsZXMgZm9yIGlucHV0cyBpbnNpZGUgbGFiZWxzXG4gIGxhYmVsID4gW3R5cGU9J2NoZWNrYm94J10sXG4gIGxhYmVsID4gW3R5cGU9J3JhZGlvJ10ge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkZm9ybS1zcGFjaW5nICogMC41O1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGZpbGUgaW5wdXQgd2lkdGhcbiAgW3R5cGU9J2ZpbGUnXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3IgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kZm9ybS1sYWJlbC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBmb3JtIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgZm9ybSBsYWJlbHMuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGl0cyBpbnB1dCBmaWVsZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjggIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcblxuICBmb250LXNpemU6ICRmb3JtLWxhYmVsLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tbGFiZWwtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuQG1peGluIGZvcm0tbGFiZWwtbWlkZGxlIHtcbiAgJGlucHV0LWJvcmRlci13aWR0aDogZ2V0LWJvcmRlci12YWx1ZSgkaW5wdXQtYm9yZGVyLCB3aWR0aCk7XG5cbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogKCRmb3JtLXNwYWNpbmcgLyAyICsgcmVtLWNhbGMoJGlucHV0LWJvcmRlci13aWR0aCkpIDA7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tbGFiZWwge1xuICBsYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICYubWlkZGxlIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWwtbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWxwIHRleHQuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGhlbHAgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWxwdGV4dC1mb250LXNpemU6IHJlbS1jYWxjKDEzKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzdHlsZSBmb3IgaGVscCB0ZXh0LlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoZWxwdGV4dC1mb250LXN0eWxlOiBpdGFsaWMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0taGVscHRleHQge1xuICAuaGVscC10ZXh0IHtcbiAgICAkbWFyZ2luLXRvcDogKCRmb3JtLXNwYWNpbmcgKiAwLjUpICogLTE7XG5cbiAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLXRvcDtcbiAgICBmb250LXNpemU6ICRoZWxwdGV4dC1mb250LXNpemU7XG4gICAgZm9udC1zdHlsZTogJGhlbHB0ZXh0LWZvbnQtc3R5bGU7XG4gICAgY29sb3I6ICRoZWxwdGV4dC1jb2xvcjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBDb2xvciBvZiBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcHJlZml4LWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIExlZnQvcmlnaHQgcGFkZGluZyBvZiBhbiBwcmUvcG9zdGZpeGVkIGlucHV0IGxhYmVsXG4kaW5wdXQtcHJlZml4LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tcHJlcG9zdGZpeCB7XG4gICRoZWlnaHQ6ICgkaW5wdXQtZm9udC1zaXplICogJGlucHV0LWxpbmUtaGVpZ2h0KSArIChnZXQtc2lkZSgkaW5wdXQtcGFkZGluZywgJ3RvcCcpICsgZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICdib3R0b20nKSkgLSByZW0tY2FsYygxKTtcblxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlmKCRnbG9iYWwtZmxleGJveCwgZmxleCwgdGFibGUpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmc7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cblxuICAgID4gOmZpcnN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAlaW5wdXQtZ3JvdXAtY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nOiAwICRpbnB1dC1wcmVmaXgtcGFkZGluZztcbiAgICBib3JkZXI6ICRpbnB1dC1wcmVmaXgtYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6ICRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDtcblxuICAgIGNvbG9yOiAkaW5wdXQtcHJlZml4LWNvbG9yO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICB3aWR0aDogMSU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtcHJlZml4LWJvcmRlcikge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtZ3JvdXAtY2hpbGQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIGEsXG4gICAgaW5wdXQsXG4gICAgYnV0dG9uLFxuICAgIGxhYmVsIHtcbiAgICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuXG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgICB9XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljaXR5IGJ1bXAgbmVlZGVkIHRvIHByZXZlbnQgb3ZlcnJpZGUgYnkgYnV0dG9uc1xuICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIC5pbnB1dC1ncm91cC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJvcmRlciBhcm91bmQgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBCb3JkZXJcbiRmaWVsZHNldC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtcGFkZGluZzogcmVtLWNhbGMoMjApICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gYXJvdW5kIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBiZXR3ZWVuIHRoZSBsZWdlbmQgdGV4dCBhbmQgZmllbGRzZXQgYm9yZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlZ2VuZC1wYWRkaW5nOiByZW0tY2FsYygwIDMpICFkZWZhdWx0O1xuXG5AbWl4aW4gZmllbGRzZXQge1xuICBtYXJnaW46ICRmaWVsZHNldC1tYXJnaW47XG4gIHBhZGRpbmc6ICRmaWVsZHNldC1wYWRkaW5nO1xuICBib3JkZXI6ICRmaWVsZHNldC1ib3JkZXI7XG5cbiAgbGVnZW5kIHtcbiAgICAvLyBDb3ZlcnMgdXAgdGhlIGZpZWxkc2V0J3MgYm9yZGVyIHRvIGNyZWF0ZSBhcnRpZmljaWFsIHBhZGRpbmdcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogcmVtLWNhbGMoLTMpO1xuICAgIHBhZGRpbmc6ICRsZWdlbmQtcGFkZGluZztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWZpZWxkc2V0IHtcbiAgZmllbGRzZXQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmcgKiAwLjU7XG4gIH1cblxuICAuZmllbGRzZXQge1xuICAgIEBpbmNsdWRlIGZpZWxkc2V0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiB0aGUgZHJvcGRvd24gdHJpYW5nbGUgaW5zaWRlIHNlbGVjdCBtZW51cy4gU2V0IHRvIGB0cmFuc3BhcmVudGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5LlxuLy8vIEB0eXBlIENvbG9yXG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG5AbWl4aW4gZm9ybS1zZWxlY3Qge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgaGVpZ2h0OiAkaGVpZ2h0O1xuICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRzZWxlY3QtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LWJhY2tncm91bmQ7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiAkc2VsZWN0LXRyaWFuZ2xlLWNvbG9yICE9IHRyYW5zcGFyZW50IHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXRyaWFuZ2xlKCRzZWxlY3QtdHJpYW5nbGUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkZ2xvYmFsLXJpZ2h0ICgtJGZvcm0tc3BhY2luZykgY2VudGVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA5cHggNnB4O1xuXG4gICAgcGFkZGluZy0jeyRnbG9iYWwtcmlnaHR9OiAoJGZvcm0tc3BhY2luZyAqIDEuNSk7XG4gIH1cblxuICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gIH1cblxuICAvLyBGb2N1cyBzdGF0ZVxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogJGlucHV0LWJvcmRlci1mb2N1cztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZC1mb2N1cztcbiAgICBib3gtc2hhZG93OiAkaW5wdXQtc2hhZG93LWZvY3VzO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgY3Vyc29yOiAkaW5wdXQtY3Vyc29yLWRpc2FibGVkO1xuICB9XG5cbiAgLy8gSGlkZSB0aGUgZHJvcGRvd24gYXJyb3cgc2hvd24gaW4gbmV3ZXIgSUUgdmVyc2lvbnNcbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZbbXVsdGlwbGVdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmOm5vdChbbXVsdGlwbGVdKSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1zZWxlY3Qge1xuICBzZWxlY3Qge1xuICAgIEBpbmNsdWRlIGZvcm0tc2VsZWN0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYWJpZGVcbi8vLy9cblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBpbnB1dHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWlucHV0czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBsYWJlbHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWxhYmVsczogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgdG8gdXNlIGZvciBpbnZhbGlkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYmFja2dyb3VuZC1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdG8gdXNlIGZvciBsYWJlbHMgb2YgaW52YWxpZCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRmb3JtLWxhYmVsLWNvbG9yLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRpbnB1dC1lcnJvci1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZXJyb3ItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTdHlsZXMgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlciBvZiBhbiBpbnB1dCBmaWVsZCB0byBoYXZlIGFuIGVycm9yIHN0YXRlLlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRhbGVydC1jb2xvcl0gLSBDb2xvciB0byB1c2UgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYWNrZ3JvdW5kLWxpZ2h0ZW4gWzEwJV0gLSBMaWdodG5lc3MgbGV2ZWwgb2YgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gZm9ybS1pbnB1dC1lcnJvcihcbiAgJGJhY2tncm91bmQ6ICRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQsXG4gICRiYWNrZ3JvdW5kLWxpZ2h0ZW46IDEwJVxuKSB7XG4gICY6bm90KDpmb2N1cykge1xuICAgIGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCRiYWNrZ3JvdW5kLCAkd2hpdGUsICRiYWNrZ3JvdW5kLWxpZ2h0ZW4pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBlcnJvciBzdHlsZXMgdG8gYSBmb3JtIGVsZW1lbnQsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNldHRpbmdzIGZpbGUuXG5AbWl4aW4gZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmcgKiAtMC41O1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nO1xuXG4gIGZvbnQtc2l6ZTogJGlucHV0LWVycm9yLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRpbnB1dC1lcnJvci1mb250LXdlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1lcnJvciB7XG4gIEBpZiAkYWJpZGUtaW5wdXRzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgaW52YWxpZCBpbnB1dHNcbiAgICAuaXMtaW52YWxpZC1pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkYWJpZGUtbGFiZWxzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgbGFiZWxzIG9mIGludmFsaWQgb3V0cHV0c1xuICAgIC5pcy1pbnZhbGlkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gZXJyb3IgZWxlbWVudFxuICAuZm9ybS1lcnJvciB7XG4gICAgQGluY2x1ZGUgZm9ybS1lcnJvcjtcblxuICAgICYuaXMtdmlzaWJsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0eXBvZ3JhcGh5LWJhc2Vcbi8vLy9cblxuLy8gQmFzZSBUeXBvZ3JhcGh5XG4vLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuLy8gVGhlc2UgYXJlIHN0eWxlcyBhcHBsaWVkIHRvIGJhc2ljIEhUTUwgdGFncywgaW5jbHVkaW5nOlxuLy8gICAtIFBhcmFncmFwaHMgPHA+XG4vLyAgIC0gQm9sZC9pdGFsaWNzIDxiPiA8c3Ryb25nPiA8aT4gPGVtPlxuLy8gICAtIFNtYWxsIHRleHQgPHNtYWxsPlxuLy8gICAtIEhlYWRpbmdzIDxoMT4tPGg2PlxuLy8gICAtIEFuY2hvcnMgPGE+XG4vLyAgIC0gRGl2aWRlcnMgPGhyPlxuLy8gICAtIExpc3RzIDx1bD4gPG9sPiA8ZGw+XG4vLyAgIC0gQmxvY2txdW90ZXMgPGJsb2NrcXVvdGU+XG4vLyAgIC0gQ29kZSBibG9ja3MgPGNvZGU+XG4vLyAgIC0gQWJicmV2aWF0aW9ucyA8YWJicj5cbi8vICAgLSBDaXRhdGlvbnMgPGNpdGU+XG4vLyAgIC0gS2V5c3Ryb2tlcyA8a2JkPlxuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGhlYWRlciBlbGVtZW50cy5cbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kaGVhZGVyLWZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0eWxlIChlLmcuIGl0YWxpY2l6ZWQpIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtc3R5bGU6IG5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc3RhY2sgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCB1c2UgbW9ub3NwYWNlZCB0eXBlLCBzdWNoIGFzIGNvZGUgc2FtcGxlc1xuLy8vIEB0eXBlIFN0cmluZyB8IExpc3RcbiRmb250LWZhbWlseS1tb25vc3BhY2U6IENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgQ291cmllciwgbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBDb2xvclxuJGhlYWRlci1jb2xvcjogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNCAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gU3R5bGVzIGZvciBoZWFkaW5ncyBhdCB2YXJpb3VzIHNjcmVlbiBzaXplcy4gRWFjaCBrZXkgaXMgYSBicmVha3BvaW50LCBhbmQgZWFjaCB2YWx1ZSBpcyBhIG1hcCBvZiBoZWFkaW5nIHN0eWxlcy5cbi8vLyBAdHlwZSBNYXBcbiRoZWFkZXItc3R5bGVzOiAoXG4gIHNtYWxsOiAoXG4gICAgJ2gxJzogKCdmb250LXNpemUnOiAyNCksXG4gICAgJ2gyJzogKCdmb250LXNpemUnOiAyMCksXG4gICAgJ2gzJzogKCdmb250LXNpemUnOiAxOSksXG4gICAgJ2g0JzogKCdmb250LXNpemUnOiAxOCksXG4gICAgJ2g1JzogKCdmb250LXNpemUnOiAxNyksXG4gICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogNDgpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogNDApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMzEpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMjUpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuKSAhZGVmYXVsdDtcblxuLy8gJGhlYWRlci1zdHlsZXMgbWFwIGlzIGJ1aWx0IGZyb20gJGhlYWRlci1zaXplcyBpbiBvcmRlciB0byBlbnN1cmUgZG93bndhcmQgY29tcGF0aWJpbGl0eVxuLy8gd2hlbiAkaGVhZGVyLXNpemVzIGlzIGRlcHJlY2lhdGVkLCAkaGVhZGVyLXN0eWxlcyBuZWVkcyB0byBnZXQgIWRlZmF1bHQgdmFsdWVzIGxpa2Ugc2V0dGluZ3Muc2Nzc1xuQGZ1bmN0aW9uIGJ1aWxkX2Zyb21faGVhZGVyLXNpemVzKCRoZWFkZXItc2l6ZXMpIHtcbiAgQHdhcm4gJ05vdGUsIHRoYXQgJGhlYWRlci1zaXplcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoICRoZWFkZXItc3R5bGVzLiAkaGVhZGVyLXNpemVzIHN0aWxsIHdvcmtzLCBidXQgaXQgaXMgZ29pbmcgdG8gYmUgZGVwcmVjaWF0ZWQuJztcbiAgJGhlYWRlci1zdHlsZXM6ICgpO1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zaXplcyB7XG4gICAgJGhlYWRlci1tYXA6ICgpO1xuICAgIEBlYWNoICRoZWFkZXIsICRmb250LXNpemUgaW4gJGhlYWRlcnMge1xuICAgICAgJGhlYWRlci1tYXA6IG1hcC1tZXJnZSgkaGVhZGVyLW1hcCwgKCRoZWFkZXI6ICgnZm9udC1zaXplJzogJGZvbnQtc2l6ZSkpKTtcbiAgICB9XG4gICAgJGhlYWRlci1zdHlsZXM6IG1hcC1tZXJnZSgkaGVhZGVyLXN0eWxlcywgKCRzaXplOiAkaGVhZGVyLW1hcCkpO1xuICB9XG4gIEByZXR1cm4gJGhlYWRlci1zdHlsZXM7XG59XG5cbi8vIElmIGl0IGV4aXN0cyAkaGVhZGVycy1zaXplcyBpcyB1c2VkIHRvIGJ1aWxkICRoZWFkZXItc3R5bGVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGhlYWRlci1zaXplcykge1xuICAkaGVhZGVyLXN0eWxlczogYnVpbGRfZnJvbV9oZWFkZXItc2l6ZXMoJGhlYWRlci1zaXplcyk7XG59XG5cbi8vLyBUZXh0IHJlbmRlcmluZyBtZXRob2Qgb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiBgPHNtYWxsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc21hbGwtZm9udC1zaXplOiA4MCUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBgPHNtYWxsPmAgZWxlbWVudHMgd2hlbiBwbGFjZWQgaW5zaWRlIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTGluZSBoZWlnaHQgb2YgdGV4dCBpbnNpZGUgYDxwPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNiAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFRleHQgcmVuZGVyaW5nIG1ldGhvZCBmb3IgcGFyYWdyYXBoIHRleHQuXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHkgIWRlZmF1bHQ7XG5cbi8vLyBVc2UgdGhlIGAuY29kZS1pbmxpbmVgIGNvbXBvbmVudCBhcyBkZWZhdWx0IGZvciBgPGNvZGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZW5hYmxlLWNvZGUtaW5saW5lOiB0cnVlO1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3MuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRhbmNob3ItY29sb3IsICRsaWdodG5lc3M6IC0xNCUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGRlY29yYXRpb24gZm9yIGxpbmtzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb246IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgZGVjb3JhdGlvbiBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3Zlcjogbm9uZSAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gd2lkdGggb2YgYSBkaXZpZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBMaXN0XG4kaHItYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kaHItbWFyZ2luOiByZW0tY2FsYygyMCkgYXV0byAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1saW5laGVpZ2h0OiAkcGFyYWdyYXBoLWxpbmVoZWlnaHQgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1tYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20gIWRlZmF1bHQ7XG5cbi8vLyBCdWxsZXQgdHlwZSB0byB1c2UgZm9yIHVub3JkZXJlZCBsaXN0cyAoZS5nLiwgYHNxdWFyZWAsIGBjaXJjbGVgLCBgZGlzY2ApLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYyAhZGVmYXVsdDtcblxuLy8vIFBvc2l0aW9uaW5nIGZvciBidWxsZXRzIG9uIHVub3JkZXJlZCBsaXN0IGl0ZW1zLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGUgIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0IChvciByaWdodCkgbWFyZ2luIGZvciBsaXN0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsaXN0LXNpZGUtbWFyZ2luOiAxLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gTGVmdCAob3IgcmlnaHQpIG1hcmdpbiBmb3IgYSBsaXN0IGluc2lkZSBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBgPGRsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBgPGR0PmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kZGVmbmxpc3QtdGVybS13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gYDxkdD5gIGFuZCBgPGRkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtdGVybS1tYXJnaW4tYm90dG9tOiAwLjNyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmxvY2txdW90ZS1jb2xvcjogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgaW5zaWRlIGEgYDxibG9ja3F1b3RlPmAgZWxlbWVudC5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kYmxvY2txdW90ZS1wYWRkaW5nOiByZW0tY2FsYyg5IDIwIDAgMTkpICFkZWZhdWx0O1xuXG4vLy8gU2lkZSBib3JkZXIgZm9yIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIFVzZSB0aGUgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQgYXMgZGVmYXVsdCBmb3IgYDxjaXRlPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGVuYWJsZS1jaXRlLWJsb2NrOiB0cnVlO1xuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGtleXN0cm9rZS1wYWRkaW5nOiByZW0tY2FsYygyIDQgMCkgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBgPGtiZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBib3JkZXIgc3R5bGUgZm9yIGA8YWJicj5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2sgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktYmFzZSB7XG4gIC8vIFR5cG9ncmFwaHkgcmVzZXRzXG4gIGRpdixcbiAgZGwsXG4gIGR0LFxuICBkZCxcbiAgdWwsXG4gIG9sLFxuICBsaSxcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcHJlLFxuICBmb3JtLFxuICBwLFxuICBibG9ja3F1b3RlLFxuICB0aCxcbiAgdGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGFyYWdyYXBoc1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICB0ZXh0LXJlbmRlcmluZzogJHBhcmFncmFwaC10ZXh0LXJlbmRlcmluZztcbiAgfVxuXG4gIC8vIEVtcGhhc2l6ZWQgdGV4dFxuICBlbSxcbiAgaSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG5cbiAgLy8gU3Ryb25nIHRleHRcbiAgc3Ryb25nLFxuICBiIHtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEhlYWRpbmdzXG4gIGgxLCAuaDEsXG4gIGgyLCAuaDIsXG4gIGgzLCAuaDMsXG4gIGg0LCAuaDQsXG4gIGg1LCAuaDUsXG4gIGg2LCAuaDYge1xuICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtc3R5bGU6ICRoZWFkZXItZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGhlYWRlci1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGhlYWRlci1jb2xvcjtcbiAgICB0ZXh0LXJlbmRlcmluZzogJGhlYWRlci10ZXh0LXJlbmRlcmluZztcblxuICAgIHNtYWxsIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgY29sb3I6ICRoZWFkZXItc21hbGwtZm9udC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkaW5nIHN0eWxlc1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zdHlsZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgIEBlYWNoICRoZWFkZXIsICRoZWFkZXItZGVmcyBpbiAkaGVhZGVycyB7XG4gICAgICAgICRmb250LXNpemUtdGVtcDogMXJlbTtcbiAgICAgICAgI3skaGVhZGVyfSwgLiN7JGhlYWRlcn0ge1xuXG4gICAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRoZWFkZXItZGVmcywgZm9udC1zaXplKSB7XG4gICAgICAgICAgICAkZm9udC1zaXplLXRlbXA6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBmb250LXNpemUpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBmcykge1xuICAgICAgICAgICAgJGZvbnQtc2l6ZS10ZW1wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgZnMpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgJHNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGxpbmUtaGVpZ2h0KSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdW5pdGxlc3MtY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbGluZS1oZWlnaHQpLCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBsaCkge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXRsZXNzLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIGxoKSwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB1bml0bGVzcy1jYWxjKCRoZWFkZXItbGluZWhlaWdodCwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tdG9wKSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLXRvcCkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtdCkge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG10KSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tYm90dG9tKSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLWJvdHRvbSkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYikge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG1iKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYygkaGVhZGVyLW1hcmdpbi1ib3R0b20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkYW5jaG9yLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGFuY2hvci10ZXh0LWRlY29yYXRpb247XG5cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRhbmNob3ItY29sb3ItaG92ZXI7XG4gICAgICBAaWYgJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXIgIT0gJGFuY2hvci10ZXh0LWRlY29yYXRpb24ge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246ICRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGltZyB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9yaXpvbnRhbCBydWxlXG4gIGhyIHtcbiAgICBjbGVhcjogYm90aDtcblxuICAgIG1heC13aWR0aDogJGhyLXdpZHRoO1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46ICRoci1tYXJnaW47XG5cbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkaHItYm9yZGVyO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICB9XG5cbiAgLy8gTGlzdHNcbiAgdWwsXG4gIG9sLFxuICBkbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxpc3QtbWFyZ2luLWJvdHRvbTtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiAkbGlzdC1zdHlsZS1wb3NpdGlvbjtcbiAgICBsaW5lLWhlaWdodDogJGxpc3QtbGluZWhlaWdodDtcbiAgfVxuXG4gIC8vIExpc3QgaXRlbXNcbiAgbGkge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBsaXN0c1xuICB1bCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gICAgbGlzdC1zdHlsZS10eXBlOiAkbGlzdC1zdHlsZS10eXBlO1xuICB9XG5cbiAgLy8gT3JkZXJlZCBsaXN0c1xuICBvbCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gIH1cblxuICAvLyBOZXN0ZWQgdW5vcmRlcmVkL29yZGVyZWQgbGlzdHNcbiAgdWwsIG9sIHtcbiAgICAmICYge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZpbml0aW9uIGxpc3RzXG4gIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTtcblxuICAgIGR0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b207XG4gICAgICBmb250LXdlaWdodDogJGRlZm5saXN0LXRlcm0td2VpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMCAwICRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTtcbiAgICBwYWRkaW5nOiAkYmxvY2txdW90ZS1wYWRkaW5nO1xuICAgIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06ICRibG9ja3F1b3RlLWJvcmRlcjtcblxuICAgICYsIHAge1xuICAgICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICAgIGNvbG9yOiAkYmxvY2txdW90ZS1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBJbmxpbmUgQ2l0YXRpb25zXG4gIEBpZiAoJGVuYWJsZS1jaXRlLWJsb2NrID09IHRydWUpIHtcbiAgICBjaXRlIHtcbiAgICAgIC8vIEV4dGVuZGluZyBhIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgIC8vIFRPRE86IEJyZWFrIHRoZSB0eXBvZ3JhcGh5LWJhc2UvdHlwb2dyYXBoeS1oZWxwZXJzIHNlcGFyYXRpb25cbiAgICAgIEBleHRlbmQgLmNpdGUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJicmV2aWF0aW9uc1xuICBhYmJyLCBhYmJyW3RpdGxlXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFiYnItdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBGaWd1cmVzXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLy8gQ29kZVxuICBAaWYgKCRlbmFibGUtY29kZS1pbmxpbmUgPT0gdHJ1ZSkge1xuICAgIGNvZGUge1xuICAgICAgQGV4dGVuZCAuY29kZS1pbmxpbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5c3Ryb2tlc1xuICBrYmQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAka2V5c3Ryb2tlLXBhZGRpbmc7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAka2V5c3Ryb2tlLWJhY2tncm91bmQ7XG5cbiAgICBmb250LWZhbWlseTogJGtleXN0cm9rZS1mb250O1xuICAgIGNvbG9yOiAka2V5c3Ryb2tlLWNvbG9yO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgka2V5c3Ryb2tlLXJhZGl1cykge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGtleXN0cm9rZS1yYWRpdXM7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdHlwb2dyYXBoeS1oZWxwZXJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgbGVhZCBwYXJhZ3JhcGhzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBsZWFkIHBhcmFncmFwaHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kbGVhZC1saW5laGVpZ2h0OiAxLjYgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1saW5laGVpZ2h0OiAxLjQgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgd2VpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJHN1YmhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0b3AgbWFyZ2luIGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1tYXJnaW4tdG9wOiAwLjJyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4gZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3ViaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIGZvciBzdGF0aXN0aWMgbnVtYmVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdGF0LWZvbnQtc2l6ZTogMi41cmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjaXRlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBgLmNpdGUtYmxvY2tgIGNvbXBvbmVudC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpICFkZWZhdWx0O1xuXG4vLy8gUHNldWRvIGNvbnRlbnQgZm9yIGAuY2l0ZS1ibG9ja2AgY29tcG9uZW50LlxuLy8vIEB0eXBlIFN0cmluZ1xuJGNpdGUtcHNldWRvLWNvbnRlbnQ6ICdcXDIwMTQgXFwwMDIwJyAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNvZGUtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGNvZGUtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2UgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGluIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kY29kZS1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBgLmNvZGUtaW5saW5lYCBhbmQgYC5jb2RlLWJsb2NrYCBjb21wb25lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBMaXN0XG4kY29kZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGFyb3VuZCB0ZXh0IG9mIHRoZSBgLmNvZGUtaW5saW5lYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtcGFkZGluZzogcmVtLWNhbGMoMiA1IDEpICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBhcm91bmQgdGV4dCBvZiB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtYmxvY2stcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIE1hcmdpbiB1bmRlciB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY29kZS1ibG9jay1tYXJnaW4tYm90dG9tOiAxLjVyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBjaXRlLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAkY2l0ZS1jb2xvcjtcbiAgZm9udC1zaXplOiAkY2l0ZS1mb250LXNpemU7XG5cbiAgJjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICRjaXRlLXBzZXVkby1jb250ZW50O1xuICB9XG59XG5cbi8vLyBBZGQgYmFzaWMgc3R5bGVzIGZvciBhIGNvZGUgaGVscGVyLlxuLy8vIFNlZSBgY29kZS1pbmxpbmVgIGFuZCBgY29kZS1ibG9ja2AgbWl4aW5zLlxuQG1peGluIGNvZGUtc3R5bGUge1xuICBib3JkZXI6ICRjb2RlLWJvcmRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmFja2dyb3VuZDtcblxuICBmb250LWZhbWlseTogJGNvZGUtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkY29kZS1mb250LXdlaWdodDtcbiAgY29sb3I6ICRjb2RlLWNvbG9yO1xufVxuXG4vLy8gTWFrZSBjb2RlIGhlbHBlciBmcm9tIHRoZSBgY29kZS1zdHlsZWAgbWl4aW4gaW5saW5lLlxuLy8vIFVzZWQgdG8gZ2VuZXJhdGUgYC5jb2RlLWlubGluZWBcbkBtaXhpbiBjb2RlLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG5cbiAgcGFkZGluZzogJGNvZGUtcGFkZGluZztcbn1cblxuLy8vIE1ha2UgY29kZSBoZWxwZXIgZnJvbSB0aGUgYGNvZGUtc3R5bGVgIG1peGluIGEgYmxvY2suXG4vLy8gVXNlZCB0byBnZW5lcmF0ZSBgLmNvZGUtYmxvY2tgXG5AbWl4aW4gY29kZS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcblxuICBwYWRkaW5nOiAkY29kZS1ibG9jay1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkY29kZS1ibG9jay1tYXJnaW4tYm90dG9tO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi10eXBvZ3JhcGh5LWhlbHBlcnMge1xuICAvLyBVc2UgdG8gY3JlYXRlIGEgc3ViaGVhZGluZyB1bmRlciBhIG1haW4gaGVhZGVyXG4gIC8vIE1ha2Ugc3VyZSB5b3UgcGFpciB0aGUgdHdvIGVsZW1lbnRzIGluIGEgPGhlYWRlcj4gZWxlbWVudCwgbGlrZSB0aGlzOlxuICAvLyA8aGVhZGVyPlxuICAvLyAgIDxoMT5IZWFkaW5nPC9oMT5cbiAgLy8gICA8aDI+U3ViaGVhZGluZzwvaDI+XG4gIC8vIDwvaGVhZGVyPlxuICAuc3ViaGVhZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAkc3ViaGVhZGVyLW1hcmdpbi10b3A7XG4gICAgbWFyZ2luLWJvdHRvbTogJHN1YmhlYWRlci1tYXJnaW4tYm90dG9tO1xuXG4gICAgZm9udC13ZWlnaHQ6ICRzdWJoZWFkZXItZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRzdWJoZWFkZXItbGluZWhlaWdodDtcbiAgICBjb2xvcjogJHN1YmhlYWRlci1jb2xvcjtcbiAgfVxuXG4gIC8vIFVzZSB0byBzdHlsZSBhbiBpbnRyb2R1Y3RvcnkgbGVhZCwgZGVjaywgYmx1cmIsIGV0Yy5cbiAgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogJGxlYWQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGVhZC1saW5laGVpZ2h0O1xuICB9XG5cbiAgLy8gVXNlIHRvIHN0eWxlIGEgbGFyZ2UgbnVtYmVyIHRvIGRpc3BsYXkgYSBzdGF0aXN0aWNcbiAgLnN0YXQge1xuICAgIGZvbnQtc2l6ZTogJHN0YXQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgcCArICYge1xuICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwsIG9sIHtcbiAgICAvLyBVc2UgdG8gcmVtb3ZlIG51bWJlcnMgZnJvbSBvcmRlcmVkIGxpc3QgJiBidWxsZXRzIGZyb20gdW5vcmRlcmVkIGxpc3RcbiAgICAmLm5vLWJ1bGxldCB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuY2l0ZS1ibG9jayB7XG4gICAgQGluY2x1ZGUgY2l0ZS1ibG9jaztcbiAgfVxuXG4gIC5jb2RlLWlubGluZSB7XG4gICAgQGluY2x1ZGUgY29kZS1zdHlsZTtcbiAgICBAaW5jbHVkZSBjb2RlLWlubGluZTtcbiAgfVxuXG4gIC5jb2RlLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBjb2RlLXN0eWxlO1xuICAgIEBpbmNsdWRlIGNvZGUtYmxvY2s7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tdGV4dC1hbGlnbm1lbnQge1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICBAZWFjaCAkYWxpZ24gaW4gKGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGp1c3RpZnkpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tdGV4dC0jeyRhbGlnbn0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJGFsaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgLnRleHQtI3skYWxpZ259IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246ICRhbGlnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIElmIGB0cnVlYCwgYWxsIGVsZW1lbnRzIHdpbGwgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcyB3aGVuIHByaW50ZWQsIHRvIHNhdmUgb24gaW5rLlxuLy8vIEB0eXBlIEJvb2xlYW5cbi8vLyBAZ3JvdXAgZ2xvYmFsXG4kcHJpbnQtdHJhbnNwYXJlbnQtYmFja2dyb3VuZHM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGRpc3BsYXlzIG5leHQgdG8gYWxsIGxpbmtzIHRoZWlyIFwiaHJlZlwiIHdoZW4gcHJpbnRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4vLy8gQGdyb3VwIGdsb2JhbFxuJHByaW50LWhyZWZzOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZS1hbGxcblxuQG1peGluIGZvdW5kYXRpb24tcHJpbnQtc3R5bGVzIHtcbiAgLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICAqIHtcbiAgICAgIC8vIEVuc3VyZSBhIFwiYmxhY2stb24td2hpdGVcIiBwcmludCBieSByZW1vdmluZyBiYWNrZ3JvdW5kcyxcbiAgICAgIC8vIHVzaW5nIGJsYWNrIHRleHQgZXZlcnl3aGVyZSBhbmQgZm9yY2luZyB0aGUgYnJvd3NlciB0byBlY29ub21pemUgaW5rLlxuICAgICAgQGlmICRwcmludC10cmFuc3BhcmVudC1iYWNrZ3JvdW5kcyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyAvLyBCbGFjayBwcmludHMgZmFzdGVyOiBoNWJwLmNvbS9zXG4gICAgICAgIGNvbG9yLWFkanVzdDogZWNvbm9teTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgcHJldmVudCBhbnkgZWNvbm9teSBieSB0aGUgYnJvd3Nlci5cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgY29sb3ItYWRqdXN0OiBleGFjdDtcbiAgICAgIH1cblxuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgLmhpZGUtZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgICB0YWJsZS5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgICB0aGVhZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gICAgdGJvZHkuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICAgIHRyLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgICB0ZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICAgIHRoLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG5cbiAgICAvLyBEaXNwbGF5IHRoZSBVUkwgb2YgYSBsaW5rIGFmdGVyIHRoZSB0ZXh0XG4gICAgYSxcbiAgICBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4gICAgQGlmICRwcmludC1ocmVmcyB7XG4gICAgICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogJyAoJyBhdHRyKGhyZWYpICcpJzsgfVxuICAgIH1cblxuICAgIC8vIERvbid0IGRpc3BsYXkgdGhlIFVSTCBmb3IgaW1hZ2VzIG9yIEphdmFTY3JpcHQvaW50ZXJuYWwgbGlua3NcbiAgICAuaXIgYTphZnRlcixcbiAgICBhW2hyZWZePSdqYXZhc2NyaXB0OiddOmFmdGVyLFxuICAgIGFbaHJlZl49JyMnXTphZnRlciB7IGNvbnRlbnQ6ICcnOyB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgYW4gYWJicmV2aWF0aW9uIHN0YW5kcyBmb3IgYWZ0ZXIgdGhlIHRleHRcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICcgKCcgYXR0cih0aXRsZSkgJyknOyB9XG5cbiAgICAvLyBQcmV2ZW50IHBhZ2UgYnJlYWtzIGluIHRoZSBtaWRkbGUgb2YgYSBibG9ja3F1b3RlIG9yIHByZWZvcm1hdHRlZCB0ZXh0IGJsb2NrXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICAvLyBoNWJwLmNvbS90XG4gICAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cblxuICAgIHRyLFxuICAgIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfVxuXG4gICAgaW1nIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICBvcnBoYW5zOiAzO1xuICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIC8vIEF2b2lkIHBhZ2UgYnJlYWtzIGFmdGVyIGEgaGVhZGluZ1xuICAgIGgyLFxuICAgIGgzIHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cblxuICAgIC8vIEhlbHBlciB0byByZS1hbGxvdyBwYWdlIGJyZWFrcyBpbiB0aGUgbWlkZGxlIG9mIGNlcnRhaW4gZWxlbWVudHMgKGUuZy4gcHJlLCBibG9ja3F1b3RlLCB0cilcbiAgICAucHJpbnQtYnJlYWstaW5zaWRlIHtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LWJhc2UtZ3JpZC1jbGFzc2VzIHtcblxuICAvLyBHcmlkIENvbnRhaW5lclxuICAuZ3JpZC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQtY29udGFpbmVyO1xuXG4gICAgJi5mbHVpZCB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWNvbnRhaW5lcigxMDAlKTtcbiAgICB9XG5cbiAgICAmLmZ1bGwge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb250YWluZXIoMTAwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFzZSBncmlkIHN0eWxlc1xuICAuZ3JpZC14IHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkO1xuICB9XG5cbiAgLmNlbGwge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoZnVsbCwgJGd1dHRlci10eXBlOiBub25lKTtcblxuICAgICYuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2UoYXV0byk7XG4gICAgfVxuXG4gICAgJi5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgfVxuXG4gIH1cbiAgLmdyaWQteCB7XG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG5cbiAgICA+IC5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKHNocmluaywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdXRvIHdpZHRoXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyAmIFBScyBmb3IgdGhlIGJhY2tzdG9yeTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMDI0NFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL3B1bGwvMTAxNjRcbiAgICAuZ3JpZC14IHtcbiAgICAgICRzdHI6IFwiPiAuI3skLXpmLXNpemV9LXNocmluaywgPiAuI3skLXpmLXNpemV9LWZ1bGxcIjtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICRzdHI6ICRzdHIgKyBcIiwgPiAuI3skLXpmLXNpemV9LSN7JGl9XCJcbiAgICAgIH1cbiAgICAgICN7JHN0cn0ge1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gUmVzcG9uc2l2ZSBcImF1dG9cIiBtb2RpZmllclxuICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAuZ3JpZC14ID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbChhdXRvLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2Uoc2hyaW5rKTtcbiAgICB9XG5cbiAgICAvLyBSZXNwb25zaXZlIFwic2hyaW5rXCIgbW9kaWZpZXJcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tc2hyaW5rIHtcbiAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstaG9yaXpvbnRhbC0jeyQtemYtc2l6ZX07XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBtb2RpZmllcnNcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICBAZXh0ZW5kICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRpLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2V0IHdpZHRoIHdoZW4gdXNpbmcgYC5ncmlkLW1hcmdpbi14YCBub3Qgb24gYC5ncmlkLXhgXG4gIC5ncmlkLW1hcmdpbi14Om5vdCguZ3JpZC14KSA+IC5jZWxsIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC8vIFJlc2V0IGhlaWdodCB3aGVuIHVzaW5nIGAuZ3JpZC1tYXJnaW4teWAgbm90IG9uIGAuZ3JpZC15YFxuICAuZ3JpZC1tYXJnaW4teTpub3QoLmdyaWQteSkgPiAuY2VsbCB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbkBtaXhpbiAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGNsYXNzLWJyZWFrcG9pbnQsICRndXR0ZXItYnJlYWtwb2ludCwgJHZlcnRpY2FsKSB7XG4gICRwcmVmaXg6IGlmKCRjbGFzcy1icmVha3BvaW50ID09ICQtemYtemVyby1icmVha3BvaW50LCAnJywgJyN7JGNsYXNzLWJyZWFrcG9pbnR9LScpO1xuICA+IC4jeyRwcmVmaXh9YXV0byB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKGF1dG8sICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gID4gLiN7JHByZWZpeH1zaHJpbmsge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICRjbGFzc25hbWU6IGlmKCR2ZXJ0aWNhbCwgJy4jeyRjbGFzcy1icmVha3BvaW50fS0jeyRpfScsICcuI3skY2xhc3MtYnJlYWtwb2ludH0tI3skaX0nKTtcblxuICAgID4gI3skY2xhc3NuYW1lfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoXG4gICRndXR0ZXItcG9zaXRpb246IGxlZnQgcmlnaHQsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICR3cmFwcGluZy1zZWxlY3RvcjogJy5ncmlkLW1hcmdpbi14J1xuKXtcbiAgI3skd3JhcHBpbmctc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRuZWdhdGl2ZTogdHJ1ZSwgJGd1dHRlci1wb3NpdGlvbjogJGd1dHRlci1wb3NpdGlvbik7XG5cbiAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgfVxuXG4gICAgLy8gYmFzZSBzdHlsZXMgbmVlZCB0byBhbGwgYmUgYmVmb3JlIHRoZSBhdXRvIGFuZCBzaHJpbmsgc3R5bGVzXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIEBpZih0eXBlLW9mKCRncmlkLW1hcmdpbi1ndXR0ZXJzKSA9PSAnbWFwJyBhbmQgbWFwLWhhcy1rZXkoJGdyaWQtbWFyZ2luLWd1dHRlcnMsICQtemYtc2l6ZSkgYW5kICQtemYtc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgICA+IC5jZWxsIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuXG4gICAgICAvLyBUaGlzIGlzIHB1cmVseSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzIC0gdGhlIG1hcmdpbiBncmlkIGhhcyB0byBnbyBiYWNrIGFuZCBhZGp1c3Qgd2lkdGhzIChvciBoZWlnaHRzKVxuICAgICAgLy8gZm9yIGFsbCBwcmlvciBicmVha3BvaW50cy5cbiAgICAgIC8vIEFzIHRoZWlyIGd1dHRlciBpcyBkZWZpbmVkIHdpdGggdGhlaXIgd2lkdGgvaGVpZ2h0LCBldmVuIGJyZWFrcG9pbnQgd2l0aG91dCBhIG5ldyBtYXJnaW4gbXVzdCBiZVxuICAgICAgLy8gZ2VuZXJhdGVkIHRvIG5vdCBoYXZpbmcgdGhlaXIgd2lkdGgvaGVpZ2h0IG92ZXJyaWRlZCBieSByZS1hZGp1c3RlZCBzbWFsbGVyIGJyZWFrcG9pbnRzLlxuICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICBAZWFjaCAkYnAgaW4gLXpmLWJyZWFrcG9pbnRzLWxlc3MtdGhhbigkLXpmLXNpemUpIHtcbiAgICAgICAgICBAaW5jbHVkZSAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGJwLCAkLXpmLXNpemUsICR2ZXJ0aWNhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgLXh5LWJyZWFrcG9pbnQtY2VsbC1jbGFzc2VzKCQtemYtc2l6ZSwgJC16Zi1zaXplLCAkdmVydGljYWwpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQYWRkaW5nIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzIHtcbiAgLmdyaWQtcGFkZGluZy14IHtcblxuICAgIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3IgbmVzdGVkIGdyaWRzXG4gICAgLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJG5lZ2F0aXZlOiB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIGdyaWRzIHdpdGhpbiBgZ3JpZC1jb250YWluZXIvZ3JpZC1jb250YWluZXIuZmx1aWRgXG4gICAgLy8gVGhpcyBhbGxvd3MgbWFyZ2luIGFuZCBwYWRkaW5nIGdyaWRzIHRvIGxpbmUgdXAgd2l0aCBlYWNob3RoZXJcbiAgICAuZ3JpZC1jb250YWluZXI6bm90KC5mdWxsKSA+ICYge1xuICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUpO1xuICAgIH1cblxuICAgIC8vIEJhc2UgY2VsbCBzdHlsZXNcbiAgICA+IC5jZWxsIHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRncmlkLXBhZGRpbmctZ3V0dGVycywgJGd1dHRlci10eXBlOiBwYWRkaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQmxvY2sgR3JpZCBjbGFzc2VzXG5AbWl4aW4geHktYmxvY2stZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZDogdHJ1ZSwgJHBhZGRpbmctZ3JpZDogdHJ1ZSkge1xuICBAaWYgJHBhZGRpbmctZ3JpZCB7XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC4jeyQtemYtc2l6ZX0tdXAtI3skaX0ge1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtbGF5b3V0KCRuOiAkaSwgJHNlbGVjdG9yOiAnLmNlbGwnLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRvdXRwdXQ6IChzaXplKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50IHtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJHh5LWJsb2NrLWdyaWQtbWF4IHtcbiAgICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycyAtIHRoZSBtYXJnaW4gZ3JpZCBoYXMgdG8gZ28gYmFjayBhbmQgYWRqdXN0IHdpZHRocyAob3IgaGVpZ2h0cylcbiAgICAgICAgLy8gZm9yIHByaW9yIGJyZWFrcG9pbnRzIGJhc2VkIG9uIHRoZSByZXNwb25zaXZlIGd1dHRlci5cbiAgICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICAgIEBlYWNoICRicCBpbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCQtemYtc2l6ZSkge1xuICAgICAgICAgICAgQGlmKG1hcC1oYXMta2V5KCRncmlkLW1hcmdpbi1ndXR0ZXJzLCAkYnApKSB7XG4gICAgICAgICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JGJwfS11cC0jeyRpfSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JC16Zi1zaXplfS11cC0jeyRpfSB7XG4gICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbGxhcHNlIGNsYXNzZXNcbkBtaXhpbiB4eS1jb2xsYXBzZS1ncmlkLWNsYXNzZXMoJG1hcmdpbi1ncmlkOiB0cnVlLCAkcGFkZGluZy1ncmlkOiB0cnVlKSB7XG4gIEBlYWNoICRicCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICAgIC4jeyRicH0tbWFyZ2luLWNvbGxhcHNlIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb2xsYXBzZSgkZ3V0dGVyLXR5cGU6IG1hcmdpbiwgJG1pbi1icmVha3BvaW50OiAkYnApO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkcGFkZGluZy1ncmlkIHtcbiAgICAgIC4jeyRicH0tcGFkZGluZy1jb2xsYXBzZSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtY29sbGFwc2UoJGd1dHRlci10eXBlOiBwYWRkaW5nLCAkbWluLWJyZWFrcG9pbnQ6ICRicCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE9mZnNldCBjbGFzc2VzXG5AbWl4aW4geHktb2Zmc2V0LWNlbGwtY2xhc3NlcyB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAvLyBPZmZzZXRzXG4gICAgICAkbzogJGkgLSAxO1xuXG4gICAgICAuI3skLXpmLXNpemV9LW9mZnNldC0jeyRvfSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtb2Zmc2V0KCRvLCAkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuICAgICAgfVxuXG4gICAgICAuZ3JpZC1tYXJnaW4teCA+IC4jeyQtemYtc2l6ZX0tb2Zmc2V0LSN7JG99IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1vZmZzZXQoJG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBWZXJ0aWNhbCBHcmlkIGNsYXNzZXNcbkBtaXhpbiB4eS12ZXJ0aWNhbC1ncmlkLWNsYXNzZXMoXG4gICRtYXJnaW4tZ3JpZDogdHJ1ZSxcbiAgJHBhZGRpbmctZ3JpZDogdHJ1ZVxuKSB7XG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLXkge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQodmVydGljYWwsIGZhbHNlKTtcblxuXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXJlc2V0KCk7XG4gICAgfVxuXG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lLCAkdmVydGljYWw6IHRydWUpO1xuICAgIH1cblxuICAgID4gLnNocmluayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoc2hyaW5rLCAkZ3V0dGVyLXR5cGU6IG5vbmUsICR2ZXJ0aWNhbDogdHJ1ZSk7XG4gICAgfVxuXG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyBhbmQgUFJzIGZvciB0aGUgYmFja3N0b3J5OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTAyNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDE2NFxuICAgICAgJHN0cjogXCI+IC4jeyQtemYtc2l6ZX0tc2hyaW5rLCA+IC4jeyQtemYtc2l6ZX0tZnVsbFwiO1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgJHN0cjogJHN0ciArIFwiLCA+IC4jeyQtemYtc2l6ZX0tI3skaX1cIlxuICAgICAgfVxuICAgICAgI3skc3RyfSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJhdXRvXCIgbW9kaWZpZXJcbiAgICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAgID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKGF1dG8sICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJzaHJpbmtcIiBtb2RpZmllclxuICAgICAgQGlmIG5vdCgkLXpmLXNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgPiAuI3skLXpmLXNpemV9LXNocmluayB7XG4gICAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9O1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIG1vZGlmaWVyc1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgICA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICAgIEBleHRlbmQgJS14eS1jZWxsLWJhc2Utc2hyaW5rLXZlcnRpY2FsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWRkaW5nLWdyaWQge1xuICAgIC5ncmlkLXBhZGRpbmcteSB7XG4gICAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIG5lc3RlZCBncmlkc1xuICAgICAgLmdyaWQtcGFkZGluZy15IHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuXG4gICAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgICA+IC5jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkbWFyZ2luLWdyaWQge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXModG9wIGJvdHRvbSwgdHJ1ZSwgJy5ncmlkLW1hcmdpbi15Jyk7XG4gIH1cblxufVxuXG5AbWl4aW4geHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkOiB0cnVlLCAkbWFyZ2luLWdyaWQ6IHRydWUpIHtcbiAgLy8gRnJhbWVkIGdyaWQgc3R5bGVzXG4gIC5ncmlkLWZyYW1lIHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lO1xuICB9XG5cbiAgLmNlbGwgLmdyaWQtZnJhbWUge1xuICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICB9XG5cbiAgLmNlbGwtYmxvY2sge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2soKTtcbiAgfVxuXG4gIC5jZWxsLWJsb2NrLXkge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gIH1cblxuXG4gIC5jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ibG9jay1jb250YWluZXIoKTtcbiAgfVxuXG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuXG4gICAgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWU7XG4gICAgfVxuXG4gICAgLmNlbGwgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrKCk7XG4gICAgfVxuXG4gICAgLiN7JC16Zi1zaXplfS1jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jay15IHtcbiAgICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICR2ZXJ0aWNhbC1ncmlkIHtcbiAgICAuZ3JpZC15IHtcbiAgICAgICYuZ3JpZC1mcmFtZSB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgICYuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgICAuY2VsbCB7XG4gICAgICAuZ3JpZC15LmdyaWQtZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IC8vIFNhbWUgYXMgaW5jbHVkZSB3aXRoICRuZXN0ZWQsIGJ1dCB3aXRoIGxlc3MgY3NzXG4gICAgICB9XG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgIC5ncmlkLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIGhlaWdodDogMTAwJTsgLy8gU2FtZSBhcyBpbmNsdWRlIHdpdGggJG5lc3RlZCwgYnV0IHdpdGggbGVzcyBjc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSB4eS1tYXJnaW4tZ3JpZC1jbGFzc2VzKHRvcCBib3R0b20sIHRydWUsICcuZ3JpZC1tYXJnaW4teScpO1xuICAgIC5ncmlkLWZyYW1lLmdyaWQtbWFyZ2luLXkge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1mcmFtZSh0cnVlLCBmYWxzZSwgJGdyaWQtbWFyZ2luLWd1dHRlcnMsICRpbmNsdWRlLWJhc2U6IGZhbHNlKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuICAgICAgLmdyaWQtbWFyZ2luLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUsIGZhbHNlLCAkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZpbmFsIGNsYXNzZXNcbkBtaXhpbiBmb3VuZGF0aW9uLXh5LWdyaWQtY2xhc3NlcyhcbiAgJGJhc2UtZ3JpZDogdHJ1ZSxcbiAgJG1hcmdpbi1ncmlkOiB0cnVlLFxuICAkcGFkZGluZy1ncmlkOiB0cnVlLFxuICAkYmxvY2stZ3JpZDogdHJ1ZSxcbiAgJGNvbGxhcHNlOiB0cnVlLFxuICAkb2Zmc2V0OiB0cnVlLFxuICAkdmVydGljYWwtZ3JpZDogdHJ1ZSxcbiAgJGZyYW1lLWdyaWQ6IHRydWVcbikge1xuXG4gIC8vIEJhc2UgZ3JpZCBzdHlsZXNcbiAgQGlmKCRiYXNlLWdyaWQpIHtcbiAgICBAaW5jbHVkZSB4eS1iYXNlLWdyaWQtY2xhc3NlcygpO1xuICB9XG5cbiAgLy8gTWFyZ2luIGdyaWRcbiAgQGlmKCRtYXJnaW4tZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFBhZGRpbmcgZ3JpZFxuICBAaWYoJHBhZGRpbmctZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzKCk7XG4gIH1cblxuICAvLyBCbG9jayBncmlkXG4gIEBpZigkYmxvY2stZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LWJsb2NrLWdyaWQtY2xhc3NlcygkbWFyZ2luLWdyaWQsICRwYWRkaW5nLWdyaWQpO1xuICB9XG5cbiAgLy8gQ29sbGFwc2UgZ3V0dGVyc1xuICBAaWYoJGNvbGxhcHNlKSB7XG4gICAgQGluY2x1ZGUgeHktY29sbGFwc2UtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICAvLyBPZmZzZXQgZ3V0dGVyc1xuICBAaWYoJG9mZnNldCkge1xuICAgIEBpbmNsdWRlIHh5LW9mZnNldC1jZWxsLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsIGdyaWRcbiAgQGlmKCR2ZXJ0aWNhbC1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktdmVydGljYWwtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICBAaWYgKCRmcmFtZS1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkLCAkbWFyZ2luLWdyaWQpXG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGUgZ3V0dGVycyBmb3IgYSBjZWxsL2NvbnRhaW5lci5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgZWl0aGVyIG1hcmdpbiBvciBwYWRkaW5nLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb24gdG8gYXBwbHkgZ3V0dGVycyB0by4gQWNjZXB0cyBgdG9wYCwgYGJvdHRvbWAsIGBsZWZ0YCwgYHJpZ2h0YCBpbiBhbnkgY29tYmluYXRpb24uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkbmVnYXRpdmUgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gYXBwbHkgdGhlIGd1dHRlciBhcyBhIG5lZ2F0aXZlIHZhbHVlLiBDb21tb25seSB1c2VkIGZvciBuZXN0ZWQgZ3JpZHMuXG5AbWl4aW4geHktZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogcmlnaHQgbGVmdCxcbiAgJG5lZ2F0aXZlOiBmYWxzZVxuKSB7XG4gICRvcGVyYXRvcjogaWYoJG5lZ2F0aXZlLCAnLScsICcnKTtcblxuICAvLyBJZiB3ZSBoYXZlIGRlY2xhcmVkIG5lZ2F0aXZlIGd1dHRlcnMsIGZvcmNlIHR5cGUgdG8gYG1hcmdpbi5cbiAgJGd1dHRlci10eXBlOiBpZigkbmVnYXRpdmUsICdtYXJnaW4nLCAkZ3V0dGVyLXR5cGUpO1xuXG4gIC8vIE91dHB1dCBvdXIgbWFyZ2luIGd1dHRlcnMuXG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkZ3V0dGVycykge1xuICAgICAgJGd1dHRlcjogcmVtLWNhbGMoJC16Zi1icC12YWx1ZSkgLyAyO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgI3skZ3V0dGVyLXR5cGV9LSN7JHZhbHVlfTogdW5xdW90ZShcIiN7JG9wZXJhdG9yfSN7JGd1dHRlcn1cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICh0eXBlLW9mKCRndXR0ZXJzKSA9PSAnbnVtYmVyJykge1xuICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXJzKSAvIDI7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAjeyRndXR0ZXItdHlwZX0tI3skdmFsdWV9OiB1bnF1b3RlKFwiI3skb3BlcmF0b3J9I3skZ3V0dGVyfVwiKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGVzIGEgbWF4IHdpZHRoIGNvbnRhaW5lciwgZGVzaWduZWQgdG8gaG91c2UgeW91ciBncmlkIGNvbnRlbnQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFskZ3JpZC1jb250YWluZXJdIC0gYSB3aWR0aCB0byBsaW1pdCB0aGUgY29udGFpbmVyIHRvLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkcGFkZGluZyBbJGdyaWQtY29udGFpbmVyLXBhZGRpbmddIC0gcGFkZGluZ3Mgb2YgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiB4eS1ncmlkLWNvbnRhaW5lcihcbiAgJHdpZHRoOiAkZ3JpZC1jb250YWluZXIsXG4gICRwYWRkaW5nOiAkZ3JpZC1jb250YWluZXItcGFkZGluZ1xuKSB7XG4gIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRwYWRkaW5nLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuXG4gIG1heC13aWR0aDogJHdpZHRoO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4vLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgeW91ciBmbGV4IGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyZWN0aW9uIFtob3Jpem9udGFsXSAtIEVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRpcmVjdGlvbiBvZiBjZWxscyB3aXRoaW4uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkd3JhcCBbdHJ1ZV0gLSBJZiB0aGUgY2VsbHMgd2l0aGluIHNob3VsZCB3cmFwIG9yIG5vdC5cbkBtaXhpbiB4eS1ncmlkKFxuICAkZGlyZWN0aW9uOiBob3Jpem9udGFsLFxuICAkd3JhcDogdHJ1ZVxuKSB7XG4gICRkaXJlY3Rpb246IGlmKCRkaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnLCByb3csIGNvbHVtbik7XG4gICR3cmFwOiBpZigkd3JhcCwgd3JhcCwgbm93cmFwKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6ICRkaXJlY3Rpb24gJHdyYXA7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIGZsZXggdmFsdWUgZm9yIGEgY2VsbCBiYXNlLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gVGhlIGNlbGwgZmxleCBwcm9wZXJ0eSB2YWx1ZS5cbkBmdW5jdGlvbiB4eS1jZWxsLWJhc2UoJHNpemU6IGZ1bGwpIHtcbiAgQGlmICgkc2l6ZSA9PSAnYXV0bycpIHtcbiAgICBAcmV0dXJuIDEgMSAwcHg7XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdncm93Jykge1xuICAgIEByZXR1cm4gMSAwIGF1dG87XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdzaHJpbmsnIG9yICRzaXplID09ICdmdWxsJyBvciB6Zi1pcy1mcmFjdGlvbigkc2l6ZSwgJGFsbG93LW5vLWRlbm9taW5hdG9yOiB0cnVlKSkge1xuICAgIEByZXR1cm4gMCAwIGF1dG87XG4gIH1cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLy8gQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgY2VsbCBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgZ3V0dGVycyBtYXAgYCRndXR0ZXJzYC4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcnxNYXB9IFRoZSBjZWxsIGd1dHRlciBzaXplIG9yIHRoZSByZXNwb25zaXZlIGd1dHRlcnMgbWFwLlxuQGZ1bmN0aW9uIHh5LWNlbGwtZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gIC8vIEZvciBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgbWFwIGAkZ3V0dGVyc2AuXG4gIEBpZiAoJGJyZWFrcG9pbnQgPT0gJ2F1dG8nKSB7XG4gICAgQHJldHVybiAkZ3V0dGVycztcbiAgfVxuXG4gIC8vIFVzZSB0aGUgY29udGV4dHVhbCBicmVha3BvaW50IGJ5IGRlZmF1bHQuXG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50KTtcblxuICBAaWYgKCRicmVha3BvaW50KSB7XG4gICAgQHJldHVybiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIC16Zi1nZXQtYnAtdmFsKCRndXR0ZXJzLCAkLXpmLXplcm8tYnJlYWtwb2ludCkgb3IgMDtcbiAgfVxufVxuXG4vLy8gUmV0dXJucyB0aGUgcGVyY2VudGFnZSBzaXplIG9mIGEgY2VsbC5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICRzaXplIFskZ3JpZC1jb2x1bW5zXSAtIFNpemUgdG8gbWFrZSB0aGUgY2VsbC4gWW91IGNhbiBwYXNzIGEgdmFsdWUgaW4gbXVsdGlwbGUgZm9ybWF0cywgc3VjaCBhcyBgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8zYC5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFNpemUgb2YgdGhlIGNlbGwgKGluIHBlcmNlbnQpLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZShcbiAgJHNpemU6ICRncmlkLWNvbHVtbnNcbikge1xuICBAcmV0dXJuIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoJHNpemUsICRkZW5vbWluYXRvcjogJGdyaWQtY29sdW1ucyk7XG59XG5cbi8vLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBDU1MgdmFsdWUgZm9yIGEgY2VsbCBzaXplLlxuLy8vXG4vLy8gR3V0dGVycy1yZWxhdGVkIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMgKGJ5IGRlZmF1bHQpIGFzIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfE51bWJlcn0gJHNpemUgW2Z1bGxdIC0gVGhlIHNpemUgb2YgeW91ciBjZWxsLiBDYW4gYmUgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgIG9yIGFueSBmcmFjdGlvbiBsaWtlIGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCByZXR1cm5zIGEgbWFwIG9mIHNpemVzIGFkYXB0ZWQgdG8gcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ3xNYXB9IFRoZSBjZWxsIHNpemluZyBwcm9wZXJ0eSB2YWx1ZSwgb3IgYSByZXNwb25zaXZlIG1hcCBvZiB0aGVtLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZS1jc3MoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gICRtYXJnaW4tZ3V0dGVyOiAwO1xuXG4gIEBpZiAoJHNpemUgPT0gJ2F1dG8nIG9yICRzaXplID09ICdzaHJpbmsnKSB7XG4gICAgQHJldHVybiBhdXRvO1xuICB9XG5cbiAgLy8gRm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMsIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuICAgICRtYXJnaW4tZ3V0dGVyOiB4eS1jZWxsLWd1dHRlcnMoJGd1dHRlcnMsICRicmVha3BvaW50KTtcbiAgICBAaWYgKCRtYXJnaW4tZ3V0dGVyID09IG51bGwpIHtcbiAgICAgIEBlcnJvciAneHktY2VsbC1zaXplOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBjZWxsIHNpemUgKG51bWJlcilcbiAgJHNpemUtcmF3OiBpZigkc2l6ZSA9PSAnZnVsbCcsIDEwMCUsIHh5LWNlbGwtc2l6ZSgkc2l6ZSkpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCBDU1Mgc2l6ZSBpbmNsdWRpbmcgZ3V0dGVycyAoc3RyaW5nKVxuICAvLyBJZiB0aGUgY2VsbCBoYXMgcmVzcG9uc2l2ZSBtYXJnaW4gZ3V0dGVycywgcmV0dXJuIGEgcmVzcG9uc2l2ZSBtYXAgb2Ygc2l6ZXMuXG4gIEBpZiB0eXBlLW9mKCRtYXJnaW4tZ3V0dGVyKSA9PSAnbWFwJyB7XG4gICAgJHJlc3BvbnNpdmUtY3NzLXNpemVzOiAoKTtcblxuICAgIEBlYWNoICRicCwgJG1nIGluICRtYXJnaW4tZ3V0dGVyIHtcbiAgICAgICRzaXplLWNzczogaWYoJG1nID09IDAsICRzaXplLXJhdywgY2FsYygjeyRzaXplLXJhd30gLSAje3JlbS1jYWxjKCRtZyl9KSk7XG4gICAgICAkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXM6IG1hcC1tZXJnZSgkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXMsICgkYnA6ICRzaXplLWNzcykpO1xuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3BvbnNpdmUtY3NzLXNpemVzO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgc2luZ2xlIENTUyBzaXplLlxuICBAZWxzZSB7XG4gICAgJGNzcy1zaXplOiBpZigkbWFyZ2luLWd1dHRlciA9PSAwLCAkc2l6ZS1yYXcsIGNhbGMoI3skc2l6ZS1yYXd9IC0gI3tyZW0tY2FsYygkbWFyZ2luLWd1dHRlcil9KSk7XG4gICAgQHJldHVybiAkY3NzLXNpemU7XG4gIH1cbn1cblxuLy8vIFNldHMgYmFzZSBmbGV4IHByb3BlcnRpZXMgZm9yIGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG5AbWl4aW4geHktY2VsbC1iYXNlKCRzaXplOiBmdWxsKSB7XG4gICRiYXNlOiB4eS1jZWxsLWJhc2UoJHNpemUpO1xuXG4gIGZsZXg6ICN7JGJhc2V9O1xuXG4gIC8vIFNldCBiYXNlIHN0eWxlcyBmb3IgXCJmdWxsXCIgb25seVxuICBAaWYoJHNpemUgPT0gJ2Z1bGwnKSB7XG4gICAgbWluLWhlaWdodDogMHB4O1xuICAgIG1pbi13aWR0aDogMHB4O1xuICB9XG59XG5cbi8vLyBSZXNldHMgYSBjZWxscyB3aWR0aCAob3IgaGVpZ2h0IGlmIHZlcnRpY2FsIGlzIHRydWUpIGFzIHdlbGwgYXMgc3RyaXBzIGl0cyBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtcmVzZXQoJHZlcnRpY2FsOiB0cnVlKSB7XG4gICRkaXJlY3Rpb246IGlmKCR2ZXJ0aWNhbCA9PSB0cnVlLCBoZWlnaHQsIHdpZHRoKTtcbiAgI3skZGlyZWN0aW9ufTogYXV0bztcbiAgbWF4LSN7JGRpcmVjdGlvbn06IG5vbmU7XG59XG5cbi8vLyBTZXRzIHNpemluZyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEd1dHRlcnMtcmVsYXRlZCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGZvciBjZWxscyB3aXRoIG1hcmdpbiBndXR0ZXJzIChieSBkZWZhdWx0KSBhcyB0aGUgZ3V0dGVyIGlzIGluY2x1ZGVkIGluIHRoZSB3aWR0aC5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gVHlwZSBvZiBndXR0ZXIgdG8gb3V0cHV0LiBBY2NlcHRzIGBtYXJnaW5gLCBgcGFkZGluZ2Agb3IgYG5vbmVgLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uIElmIGBhdXRvYCwgZ2VuZXJhdGVzIHNpemVzIGFkYXB0ZWQgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycy4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJHZlcnRpY2FsIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBvdXRwdXQgdmVydGljYWwgKGhlaWdodCkgc3R5bGVzIHJhdGhlciB0aGFuIHdpZHRocy5cbkBtaXhpbiB4eS1jZWxsLXNpemUoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRzaXplczogeHktY2VsbC1zaXplLWNzcygkc2l6ZSwgJGd1dHRlcnMsICRndXR0ZXItdHlwZSwgJGJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgaGVpZ2h0LCB3aWR0aCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzaXplcykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkc2l6ZXMpIHtcbiAgICAgICN7JGRpcmVjdGlvbn06ICQtemYtYnAtdmFsdWU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRkaXJlY3Rpb259OiAkc2l6ZXM7XG4gIH1cbn1cblxuLy8vIFNldHMgZ3V0dGVycyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtMaXN0fSAkZ3V0dGVyLXBvc2l0aW9uIFtudWxsXSAtIFRoZSBwb3NpdGlvbiB0byBhcHBseSBndXR0ZXJzIHRvLiBBY2NlcHRzIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgLCBgcmlnaHRgIGluIGFueSBjb21iaW5hdGlvbi4gQnkgZGVmYXVsdCBgcmlnaHQgbGVmdGAgZm9yIGhvcml6b250YWwgY2VsbHMgYW5kIGB0b3AgYm90dG9tYCBmb3IgdmVydGljYWwgY2VsbHMuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCBnZW5lcmF0ZXMgcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIERpcmVjdGlvbiBvZiB0aGUgZ3V0dGVycyB0byBvdXRwdXQuIFNlZSBgJGd1dHRlci1wb3NpdGlvbmAuXG5AbWl4aW4geHktY2VsbC1ndXR0ZXJzKFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIC8vIEdldCB0aGUgZGVmYXVsdCBndXR0ZXIgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGNlbGwgZGlyZWN0aW9uXG4gIEBpZigkZ3V0dGVyLXBvc2l0aW9uID09IG51bGwpIHtcbiAgICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGd1dHRlciB3aWR0aCBmb3IgdGhpcyBicmVha3BvaW50XG4gICRndXR0ZXItd2lkdGg6IHh5LWNlbGwtZ3V0dGVycygkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICBAaWYgKCRndXR0ZXItd2lkdGggPT0gbnVsbCkge1xuICAgIEBlcnJvciAneHktY2VsbC1ndXR0ZXJzOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gIH1cblxuICBAaWYgKCRndXR0ZXItdHlwZSBhbmQgJGd1dHRlci10eXBlICE9IG5vbmUpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXItd2lkdGgsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBjZWxsIGZvciB5b3VyIGdyaWQuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIENhbiBiZSBgZnVsbGAgKDEwMCUgd2lkdGgpLCBgYXV0b2AgKHVzZSBhbGwgYXZhaWxhYmxlIHNwYWNlKSwgYHNocmlua2AgKHVzZSBvbmx5IHRoZSByZXF1aXJlZCBzcGFjZSkgb3IgYW55IGZyYWN0aW9uIChgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8yYC4uLikuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIGdlbmVyYXRlcyByZXNwb25zaXZlIGd1dHRlcnMuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gb3V0cHV0IHZlcnRpY2FsIChoZWlnaHQpIHN0eWxlcyByYXRoZXIgdGhhbiB3aWR0aHMuXG4vLy8gQHBhcmFtIHtMaXN0fSAkb3V0cHV0IFsoYmFzZSBzaXplIGd1dHRlcnMpXSAtIENlbGwgcGFydHMgdG8gb3V0cHV0LiBZb3Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlIG90aGVycyBwYXJ0cyBvZiB0aGUgY2VsbCBzZXBlcmF0ZWx5LCBpdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgb3RoZXJ3aXNlLlxuQG1peGluIHh5LWNlbGwoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyLW91dHB1dDogbnVsbCxcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogbnVsbCxcbiAgJGJyZWFrcG9pbnQ6IG51bGwsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICRvdXRwdXQ6IChiYXNlIHNpemUgZ3V0dGVycylcbikge1xuICAvLyBEZWZhdWx0IGZvciAkZ3V0dGVyLW91dHB1dFxuICBAaWYgKCRndXR0ZXItb3V0cHV0ICE9IG51bGwpIHtcbiAgICBAd2FybiAneHktY2VsbDogJGd1dHRlci1vdXRwdXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBTZWUgbWlncmF0aW9uIG5vdGVzIGF0IGh0dHBzOi8vZ2l0LmlvL2ZvdW5kYXRpb24tNi02LTAnO1xuICAgIEBpZiAoJGd1dHRlci1vdXRwdXQgPT0gZmFsc2UpIHtcbiAgICAgICRvdXRwdXQ6IHNsLXJlbW92ZSgkb3V0cHV0LCBndXR0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGJhc2UpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKCRzaXplKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIHNpemUpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRzaXplLCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGd1dHRlcnMpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkZ3V0dGVyLXR5cGUsICRndXR0ZXItcG9zaXRpb24sICRicmVha3BvaW50LCAkdmVydGljYWwpO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2luZ2xlIGJyZWFrcG9pbnQgc2l6ZWQgZ3JpZC4gVXNlZCB0byBnZW5lcmF0ZSBvdXIgZ3JpZCBjbGFzc2VzLlxuLy8vXG4vLy8gYHh5LWNlbGwtc3RhdGljKClgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC5cbi8vLyBVc2UgYHh5LWNlbGwoKWAgaW5zdGVhZCB3aXRoIGAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKWAgdG8gbm90IGdlbmVyYXRlIHRoZSBjZWxsIGJhc2UuXG4vLy8gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wXG4vLy9cbi8vLyBAZGVwcmVjYXRlZCB2Ni42LjBcbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRndXR0ZXItb3V0cHV0IFt0cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBndXR0ZXJzLiBBbHdheXMgYHRydWVgIGZvciBtYXJnaW4gZ3V0dGVycy5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtc3RhdGljKFxuICAkc2l6ZTogZnVsbCxcbiAgJGd1dHRlci1vdXRwdXQ6IHRydWUsXG4gICRndXR0ZXJzOiAkZ3JpZC1tYXJnaW4tZ3V0dGVycyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRicmVha3BvaW50OiAkLXpmLXplcm8tYnJlYWtwb2ludCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIEB3YXJuICd4eS1jZWxsLXN0YXRpYygpIG1peGluIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIFwieHktY2VsbCgpXCIgaW5zdGVhZC4gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wJztcblxuICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG5cbiAgJC1ndXR0ZXItb3V0cHV0OiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsIHRydWUsICRndXR0ZXItb3V0cHV0KTtcbiAgJC1ndXR0ZXItbWFyZ2luOiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsICRndXR0ZXIsIDApO1xuXG4gIEBpbmNsdWRlIC14eS1jZWxsLXByb3BlcnRpZXMoJHNpemUsICQtZ3V0dGVyLW1hcmdpbiwgJHZlcnRpY2FsKTtcbiAgQGlmICgkLWd1dHRlci1vdXRwdXQpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXIsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gaW50ZWdlcnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJGEgLSBGaXJzdCBudW1iZXIgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGIgLSBTZWNvbmQgbnVtYmVyIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuXG5AZnVuY3Rpb24gZ2NkKCRhLCAkYikge1xuICAvLyBGcm9tOiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvR3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IjSmF2YVNjcmlwdFxuICBAaWYgKCRiICE9IDApIHtcbiAgICBAcmV0dXJuIGdjZCgkYiwgJGEgJSAkYik7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYWJzKCRhKTtcbiAgfVxufVxuXG4vLy8gSGFuZGxlcyBkZWNpbWFsIGV4cG9uZW50cyBieSB0cnlpbmcgdG8gY29udmVydCB0aGVtIGludG8gYSBmcmFjdGlvbiBhbmQgdGhlbiB1c2UgYSBudGgtcm9vdC1hbGdvcml0aG0gZm9yIHBhcnRzIG9mIHRoZSBjYWxjdWxhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gVGhlIGJhc2UgbnVtYmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZXhwb25lbnQgLSBUaGUgZXhwb25lbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgcHJvZHVjdCBvZiB0aGUgZXhwb25lbnRpYXRpb24uXG5AZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQsICRwcmVjOiAxNikge1xuICBAaWYgKGZsb29yKCRleHBvbmVudCkgIT0gJGV4cG9uZW50KSB7XG4gICAgJHByZWMyIDogcG93KDEwLCAkcHJlYyk7XG4gICAgJGV4cG9uZW50OiByb3VuZCgkZXhwb25lbnQgKiAkcHJlYzIpO1xuICAgICRkZW5vbWluYXRvcjogZ2NkKCRleHBvbmVudCwgJHByZWMyKTtcbiAgICBAcmV0dXJuIG50aC1yb290KHBvdygkYmFzZSwgJGV4cG9uZW50IC8gJGRlbm9taW5hdG9yKSwgJHByZWMyIC8gJGRlbm9taW5hdG9yLCAkcHJlYyk7XG4gIH1cblxuICAkdmFsdWU6ICRiYXNlO1xuICBAaWYgJGV4cG9uZW50ID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkZXhwb25lbnQge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiAkYmFzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGV4cG9uZW50IDwgMSB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAtJGV4cG9uZW50IHtcbiAgICAgICR2YWx1ZTogJHZhbHVlIC8gJGJhc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbkBmdW5jdGlvbiBudGgtcm9vdCgkbnVtLCAkbjogMiwgJHByZWM6IDEyKSB7XG4gIC8vIEZyb206IGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICR4OiAxO1xuXG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJHByZWMge1xuICAgICR4OiAxIC8gJG4gKiAoKCRuIC0gMSkgKiAkeCArICgkbnVtIC8gcG93KCR4LCAkbiAtIDEpKSk7XG4gIH1cblxuICBAcmV0dXJuICR4O1xufVxuXG4vLy8gQ2FsY3VsYXRlcyB0aGUgaGVpZ2h0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggZm9yIGEgZ2l2ZW4gcmF0aW8uXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmF0aW8gLSBSYXRpbyB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQsIGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGhlaWdodCByZWxhdGl2ZSB0byB0aGUgd2lkdGggb2YgYSByZXNwb25zaXZlIGNvbnRhaW5lci5cbkBmdW5jdGlvbiByYXRpby10by1wZXJjZW50YWdlKCRyYXRpbykge1xuICAkdzogbnRoKCRyYXRpbywgMSk7XG4gICRoOiBudGgoJHJhdGlvLCAzKTtcbiAgQHJldHVybiAkaCAvICR3ICogMTAwJTtcbn1cblxuLy8vIFBhcnNlIHRoZSBnaXZlbiBgJGZyYWN0aW9uYCB0byBudW1lcmF0b3JzIGFuZCBkZW51bWVyYXRvcnMuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICRmcmFjdGlvbiAtIFZhbHVlIHJlcHJlc2VudGluZyBhIGZyYWN0aW9uIHRvIHBhcnNlLiBJdCBjYW4gYmUgZm9ybWF0dGVkIGFzIGA1MCVgLCBgMSBvZiAyYCwgYDEvMmAgb3IgYDUwYCAobm8gZGVub21pbmF0b3Igd291bGQgYmUgcmV0dXJuZWQpLlxuLy8vXG4vLy8gQHJldHVybiB7TGlzdH0gTGlzdCBvZiBwYXJzZWQgdmFsdWVzIHdpdGggbnVtZXJhdG9yIGF0IGZpcnN0IHBvc2l0aW9uIGFuZCBkZW51bWVyYXRvciBhcyBzZWNvbmQuIFRoZXNlIHZhbHVlcyBtYXkgYmUgbnVsbC5cbkBmdW5jdGlvbiB6Zi1wYXJzZS1mcmFjdGlvbigkZnJhY3Rpb24pIHtcblxuICBAaWYgdHlwZS1vZigkZnJhY3Rpb24pID09ICdudW1iZXInIHtcbiAgICAvLyBcIjUwJVwiXG4gICAgQGlmIHVuaXQoJGZyYWN0aW9uKSA9PSAnJScge1xuICAgICAgQHJldHVybiAoc3RyaXAtdW5pdCgkZnJhY3Rpb24pLCAxMDApO1xuICAgIH1cbiAgICBAZWxzZSBpZiAodW5pdCgkZnJhY3Rpb24pID09ICcnKSB7XG4gICAgICAvLyBcIjAuNVwiXG4gICAgICBAaWYgJGZyYWN0aW9uIDwgMSB7XG4gICAgICAgIEByZXR1cm4gKCRmcmFjdGlvbiAqIDEwMCwgMTAwKTtcbiAgICAgIH1cbiAgICAgIC8vIFwiNTBcIlxuICAgICAgQGVsc2Uge1xuICAgICAgICBAcmV0dXJuICgkZnJhY3Rpb24sIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZyYWN0aW9uKSA9PSAnbGlzdCcge1xuICAgIC8vIFwiNTAgb2YgMTAwXCIsIFwiNTAvMTAwXCIuLi5cbiAgICBAaWYgbGVuZ3RoKCRmcmFjdGlvbikgPT0gM1xuICAgICAgYW5kIHR5cGUtb2YobnRoKCRmcmFjdGlvbiwgMSkgPT0gJ251bWJlcicpXG4gICAgICBhbmQgdHlwZS1vZihudGgoJGZyYWN0aW9uLCAzKSA9PSAnbnVtYmVyJykge1xuICAgICAgQHJldHVybiAobnRoKCRmcmFjdGlvbiwgMSksIG50aCgkZnJhY3Rpb24sIDMpKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIChudWxsLCBudWxsKTtcbn1cblxuLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLiBTdXBwb3J0cyBmb3JtYXRzIGxpa2UgYDUwJWAsIGAxIG9mIDJgLCBgMSBwZXIgMmAgb3IgYDEvMmAuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICR2YWx1ZSAtIFZhbHVlIHRvIHRlc3QuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkYWxsb3ctbm8tZGVub21pbmF0b3IgW2ZhbHNlXSAtIElmIGB0cnVlYCwgc2ltcGxlIG51bWJlcnMgd2l0aG91dCBkZW5vbWluYXRvcnMgbGlrZSBgNTBgIGFyZSBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLCBgZmFsc2VgIG90aGVyd2lzZS5cbkBmdW5jdGlvbiB6Zi1pcy1mcmFjdGlvbigkdmFsdWUsICRhbGxvdy1uby1kZW5vbWluYXRvcjogZmFsc2UpIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJHZhbHVlKTtcbiAgQHJldHVybiBub3QobnRoKCRwYXJzZWQsIDEpID09IG51bGxcbiAgICBvciAobnRoKCRwYXJzZWQsIDIpID09IG51bGwgYW5kICRhbGxvdy1uby1kZW5vbWluYXRvciA9PSBmYWxzZSkpO1xufVxuXG4vLy8gQ2FsY3VsYXRlIGEgcGVyY2VudGFnZSBmcm9tIGEgZ2l2ZW4gZnJhY3Rpb24uXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkZnJhY3Rpb24gLSBWYWx1ZSByZXByZXNlbnRpbmcgYSBmcmFjdGlvbiB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlLCBmb3JtYXR0ZWQgYXMgYDUwYCAocmVsYXRpdmUgdG8gYCRkZW5vbWluYXRvcmApLCBgNTAlYCwgYDEgb2YgMmAgb3IgYDEvMmAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGRlbm9taW5hdG9yIC0gRGVmYXVsdCB2YWx1ZSB0byB1c2UgYXMgZGVub21pbmF0b3Igd2hlbiBgJGZyYWN0aW9uYCByZXByZXNlbnRzIGFuIGFic29sdXRlIHZhbHVlLlxuQGZ1bmN0aW9uIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoXG4gICRmcmFjdGlvbixcbiAgJGRlbm9taW5hdG9yOiBudWxsXG4pIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJGZyYWN0aW9uKTtcbiAgJHBhcnNlZC1ub21pbmF0b3I6IG50aCgkcGFyc2VkLCAxKTtcbiAgJHBhcnNlZC1kZW5vbWluYXRvcjogbnRoKCRwYXJzZWQsIDIpO1xuXG4gIEBpZiAkcGFyc2VkLW5vbWluYXRvciA9PSBudWxsIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gVXNlIGEgbnVtYmVyLCBkZWNpbWFsLCBwZXJjZW50YWdlLCBvciBcIm4gb2YgblwiIC8gXCJuL25cIi4nO1xuICB9XG4gIEBpZiAkcGFyc2VkLWRlbm9taW5hdG9yID09IG51bGwge1xuICAgIEBpZiB0eXBlLW9mKCRkZW5vbWluYXRvcikgPT0gJ251bWJlcicge1xuICAgICAgJHBhcnNlZC1kZW5vbWluYXRvcjogJGRlbm9taW5hdG9yO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAZXJyb3IgJ0Vycm9yIHdpdGggXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gQSBkZWZhdWx0IFwiJGRlbm9taW5hdG9yXCIgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBhYnNvbHV0ZSB2YWx1ZXMnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gcGVyY2VudGFnZSgkcGFyc2VkLW5vbWluYXRvciAvICRwYXJzZWQtZGVub21pbmF0b3IpO1xufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIFNpemVzIGNoaWxkIGVsZW1lbnRzIHNvIHRoYXQgYCRuYCBudW1iZXIgb2YgaXRlbXMgYXBwZWFyIG9uIGVhY2ggcm93LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRuIC0gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRpc3BsYXkgcGVyIHJvdy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFsnLmNlbGwnXSAtIFNlbGVjdG9yKHMpIHRvIHVzZSBmb3IgY2hpbGQgZWxlbWVudHMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIGJyZWFrcG9pbnQgdG8gdXNlIGZvciB0aGUgY2VsbCBnZW5lcmF0aW9uLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuLy8vIEBwYXJhbSB7TGlzdH0gJG91dHB1dCBbKGJhc2Ugc2l6ZSBndXR0ZXJzKV0gLSBDZWxsIHBhcnRzIHRvIG91dHB1dC4gWW91IHdpbGwgbmVlZCB0byBnZW5lcmF0ZSBvdGhlcnMgcGFydHMgb2YgdGhlIGNlbGwgc2VwZXJhdGVseSwgaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSBvdGhlcndpc2UuXG5AbWl4aW4geHktZ3JpZC1sYXlvdXQoXG4gICRuLFxuICAkc2VsZWN0b3I6ICcuY2VsbCcsXG4gICRndXR0ZXItb3V0cHV0OiBudWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZSxcbiAgJG91dHB1dDogKGJhc2Ugc2l6ZSBndXR0ZXJzKVxuKSB7XG4gICRzaXplOiBwZXJjZW50YWdlKDEvJG4pO1xuXG4gICYgPiAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoJHNpemUsICRndXR0ZXItb3V0cHV0LCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkZ3V0dGVyLXBvc2l0aW9uLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsLCAkb3V0cHV0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIENvbGxhcHNlcyB0aGUgZ3JpZCBhIGNlbGxzIHdpdGhpbiBpdC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWy5jZWxsXSAtIFRoZSBjaGlsZCBlbGVtZW50IHRvIHJlbW92ZSB0aGUgZ3V0dGVyIGZyb20uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUaGUgdHlwZSBvZiBndXR0ZXIgdG8gcmVtb3ZlLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb25zIHRvIHJlbW92ZSBndXR0ZXJzIGZyb20uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG1pbi1icmVha3BvaW50IFskLXpmLXplcm8tYnJlYWtwb2ludF0gLSBNaW5pbXVtIGJyZWFrcG9pbnQgaW4gYCRicmVha3BvaW50LWNsYXNzZXNgIGZvciB3aGljaCB0byBjb2xsYXBzZSB0aGUgZ3V0dGVyLlxuQG1peGluIHh5LWdyaWQtY29sbGFwc2UoXG4gICRzZWxlY3RvcjogJy5jZWxsJyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRndXR0ZXItcG9zaXRpb246IHJpZ2h0IGxlZnQsXG4gICRtaW4tYnJlYWtwb2ludDogJC16Zi16ZXJvLWJyZWFrcG9pbnRcbikge1xuICAvLyBGaXJzdCwgbGV0cyBuZWdhdGUgYW55IG1hcmdpbnMgb24gdGhlIHRvcCBsZXZlbFxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbWluLWJyZWFrcG9pbnQpIHtcbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgIH1cblxuICAgICAgPiAjeyRzZWxlY3Rvcn0ge1xuICAgICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRleGNsdWRlZC1icHM6IC16Zi1icmVha3BvaW50cy1sZXNzLXRoYW4oJG1pbi1icmVha3BvaW50KTtcblxuICAgIC8vIE91dHB1dCBuZXcgd2lkdGhzIHRvIG5vdCBpbmNsdWRlIGd1dHRlcnNcbiAgICBAZWFjaCAkYnAgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYoc2wtY29udGFpbigkZXhjbHVkZWQtYnBzLCAkYnApKSB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgICAgIC8vIFNpemluZyAocGVyY2VudGFnZSlcbiAgICAgICAgICAgID4gLiN7JGJwfS0jeyRpfSB7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZSgkaSwgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicCkge1xuICAgICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICAgICAvLyBTaXppbmcgKHBlcmNlbnRhZ2UpXG4gICAgICAgICAgICA+IC4jeyRicH0tI3skaX0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgIG1hcmdpbi0jeyR2YWx1ZX06IDA7XG4gICAgICB9XG5cbiAgICAgID4gI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGVhY2ggJHZhbHVlIGluICRndXR0ZXItcG9zaXRpb24ge1xuICAgICAgICAgIHBhZGRpbmctI3skdmFsdWV9OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIHZhbHVlIHRvIG9mZnNldCBhIGNlbGwuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ30gVGhlIGNlbGwgb2Zmc2V0IHByb3BlcnR5IHZhbHVlLlxuQGZ1bmN0aW9uIHh5LWNlbGwtb2Zmc2V0KFxuICAkbixcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGJyZWFrcG9pbnQ6IG51bGxcbikge1xuICAkYnJlYWtwb2ludDogLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkYnJlYWtwb2ludCwgJGRlZmF1bHQ6ICQtemYtemVyby1icmVha3BvaW50KTtcbiAgJHNpemU6IHh5LWNlbGwtc2l6ZSgkbik7XG5cbiAgJG9mZnNldDogJHNpemU7XG4gIEBpZiAoJGd1dHRlci10eXBlID09ICdtYXJnaW4nKSB7XG4gICAgJGd1dHRlcjogcmVtLWNhbGMoeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkYnJlYWtwb2ludCkgLyAyKTtcbiAgICAkb2Zmc2V0OiBpZigkZ3V0dGVyID09IDAsICRzaXplLCBjYWxjKCN7JHNpemV9ICsgI3skZ3V0dGVyfSkpO1xuICB9XG4gIEByZXR1cm4gJG9mZnNldDtcbn1cblxuLy8vIE9mZnNldHMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0L2JvdHRvbSBieSBgJG5gIGNvbHVtbnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge051bWJlcnxBcnJheXxLZXl3b3JkfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBmb3IgYCRndXR0ZXJzYC4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLiBJZiBhIGxpc3QgaXMgZ2l2ZW4sIG1lZGlhLXF1ZXJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIFNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb2Zmc2V0LiBJZiBzZXQgdG8gdHJ1ZSB3aWxsIGFwcGx5IG1hcmdpbi10b3AgaW5zdGVhZC5cbkBtaXhpbiB4eS1jZWxsLW9mZnNldChcbiAkbixcbiAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gJGJyZWFrcG9pbnQ6IG51bGwsXG4gJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50LCAkZGVmYXVsdDogJC16Zi16ZXJvLWJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwsICd0b3AnLCAkZ2xvYmFsLWxlZnQpO1xuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oJGJyZWFrcG9pbnQsICRtZWRpYS1xdWVyaWVzOiAnZm9yLWxpc3RzJykge1xuICAgICRvZmZzZXQ6IHh5LWNlbGwtb2Zmc2V0KCRuLCAkZ3V0dGVycywgJGd1dHRlci10eXBlKTtcbiAgICBtYXJnaW4tI3skZGlyZWN0aW9ufTogI3skb2Zmc2V0fTtcbiAgfVxufVxuIiwiLy8vIE1vZGlmaWVzIGEgZ3JpZCB0byBnaXZlIGl0IFwiZnJhbWVcIiBiZWhhdmlvciAobm8gb3ZlcmZsb3csIG5vIHdyYXAsIHN0cmV0Y2ggYmVoYXZpb3IpXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gSXMgZ3JpZCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBTaG91bGQgbWF0Y2ggZ3JpZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRuZXN0ZWQgW2ZhbHNlXSAtIElzIGdyaWQgbmVzdGVkIG9yIG5vdC4gSWYgbmVzdGVkIGlzIHRydWUgdGhpcyBzZXRzIHRoZSBmcmFtZSB0byAxMDAlIGhlaWdodCwgb3RoZXJ3aXNlIHdpbGwgYmUgMTAwdmguXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbbnVsbF0gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkaW5jbHVkZS1iYXNlIFt0cnVlXSAtIEluY2x1ZGUgdGhlIGJhc2Ugc3R5bGVzIHRoYXQgZG9uJ3QgdmFyeSBwZXIgYnJlYWtwb2ludC5cbkBtaXhpbiB4eS1ncmlkLWZyYW1lKFxuICAkdmVydGljYWw6IGZhbHNlLFxuICAkbmVzdGVkOiBmYWxzZSxcbiAgJGd1dHRlcnM6IG51bGwsXG4gICRicmVha3BvaW50OiBudWxsLFxuICAkaW5jbHVkZS1iYXNlOiB0cnVlXG4pIHtcblxuICBAaWYgJGluY2x1ZGUtYmFzZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cblxuICBAaWYgJGJyZWFrcG9pbnQgPT0gbnVsbCBhbmQgdHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcge1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKCR2ZXJ0aWNhbCwgJG5lc3RlZCwgJGd1dHRlcnMsICQtemYtc2l6ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgLy8gR2V0IG91ciBndXR0ZXJzIGlmIGFwcGxpY2FibGVcbiAgICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIGd1dHRlciwgYWRkIGl0IHRvIHRoZSB3aWR0aC9oZWlnaHRcbiAgICBAaWYgJGd1dHRlciB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2aCk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoI3skdW5pdH0gKyAjeyRndXR0ZXJ9KTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2dyk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICB3aWR0aDogY2FsYygjeyR1bml0fSArICN7JGd1dHRlcn0pO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICBoZWlnaHQ6IGlmKCRuZXN0ZWQgPT0gdHJ1ZSwgMTAwJSwgMTAwdmgpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHdpZHRoOiBpZigkbmVzdGVkID09IHRydWUsIDEwMCUsIDEwMHZ3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIE1vZGlmaWVzIGEgY2VsbCB0byBnaXZlIGl0IFwiYmxvY2tcIiBiZWhhdmlvciAob3ZlcmZsb3cgYXV0bywgaW5lcnRpYWwgc2Nyb2xsaW5nKVxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIElzIGdyaWQgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gU2hvdWxkIG1hdGNoIGdyaWQuXG5AbWl4aW4geHktY2VsbC1ibG9jayhcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRwcm9wZXJ0eTogaWYoJHZlcnRpY2FsID09IHRydWUsICdvdmVyZmxvdy15JywgJ292ZXJmbG93LXgnKTtcblxuICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICB9IEBlbHNlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG59XG5cbi8vLyBDb250YWluZXIgZm9yIGluc2lkZSBhIGdyaWQgZnJhbWUgY29udGFpbmluZyBtdWx0aXBsZSBibG9ja3MuIFR5cGljYWxseSB1c2VkXG4vLy8gYXMgYSBtb2RpZmllciBmb3IgYSBgLmNlbGxgIHRvIGFsbG93IHRoZSBjZWxsIHRvIHBhc3MgYWxvbmcgZmxleCBzaXppbmdcbi8vLyBjb25zdHJhaW50cyAvIGZyb20gcGFyZW50cyB0byBjaGlsZHJlbi5cbkBtaXhpbiB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogMTAwJTtcblxuICA+IC5ncmlkLXgge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b25cbi8vLy9cblxuLy8vIEZvbnQgZmFtaWx5IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gQHR5cGUgRm9udFxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gSWdub3JlZCBpZiBudWxsIChkZWZhdWx0KVxuLy8vIEB0eXBlIEZvbnQtV2VpZ2h0XG4kYnV0dG9uLWZvbnQtd2VpZ2h0OiBudWxsICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXBhZGRpbmc6IDAuODVlbSAxZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYXJvdW5kIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmaWxsIGZvciBidXR0b25zLiBDYW4gZWl0aGVyIGJlIGBzb2xpZGAgb3IgYGhvbGxvd2AuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGJ1dHRvbi1maWxsOiBzb2xpZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBDb2xvclxuJGJ1dHRvbi1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJ1dHRvbi1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgY29sb3IgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQWx0ZXJuYXRpdmUgZm9udCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWNvbG9yLWFsdDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHJhZGl1cyBmb3IgYnV0dG9ucywgZGVmYXVsdGVkIHRvIGdsb2JhbC1yYWRpdXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgZm9yIGJ1dHRvbnMsIHRyYW5zcGFyZW50IGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHdpZHRoIGZvciBob2xsb3cgb3V0bGluZSBidXR0b25zXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNpemVzIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1zaXplczogKFxuICB0aW55OiAwLjZyZW0sXG4gIHNtYWxsOiAwLjc1cmVtLFxuICBkZWZhdWx0OiAwLjlyZW0sXG4gIGxhcmdlOiAxLjI1cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIENvbG9yaW5nIGNsYXNzZXMuIEEgbWFwIG9mIGNsYXNzZXMgdG8gb3V0cHV0IGluIHlvdXIgQ1NTLCBsaWtlIGAuc2Vjb25kYXJ5YCwgYC5zdWNjZXNzYCwgYW5kIHNvIG9uLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gb3BhY2l0eSBmb3IgYSBkaXNhYmxlZCBidXR0b24uXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1vcGFjaXR5LWRpc2FibGVkOiAwLjI1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBsaWdodG5lc3Mgb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWJhY2tncm91bmQtaG92ZXItbGlnaHRuZXNzOiAtMjAlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyIGZvciBob2xsb3cgYnV0dG9ucy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b24taG9sbG93LWhvdmVyLWxpZ2h0bmVzczogLTUwJSAhZGVmYXVsdDtcblxuLy8gSW50ZXJuYWw6IGZsaXAgZnJvbSBtYXJnaW4tcmlnaHQgdG8gbWFyZ2luLWxlZnQgZm9yIGRlZmF1bHRzXG5AaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gJGdsb2JhbC1tYXJnaW4gIWRlZmF1bHQ7XG59XG5cbi8vLyB0cmFuc2l0aW9ucyBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gQWRkaXRpb25hbCByZXNwb25zaXZlIGNsYXNzZXMgZm9yIC5leHBhbmRlZFxuLy8vIEB0eXBlIEJvb2xlYW5cbiRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFRPRE86IERvY3VtZW50IGJ1dHRvbi1iYXNlKCkgbWl4aW5cbkBtaXhpbiBidXR0b24tYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW46ICRidXR0b24tbWFyZ2luO1xuXG4gIEBpZiAodHlwZS1vZigkYnV0dG9uLXBhZGRpbmcpID09ICdtYXAnKSB7XG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluICRidXR0b24tcGFkZGluZyB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nO1xuICB9XG5cbiAgYm9yZGVyOiAkYnV0dG9uLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gIHRyYW5zaXRpb246ICRidXR0b24tdHJhbnNpdGlvbjtcbiAgZm9udC1mYW1pbHk6ICRidXR0b24tZm9udC1mYW1pbHk7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcbiAgZm9udC13ZWlnaHQ6ICRidXR0b24tZm9udC13ZWlnaHQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vLy8gRXhwYW5kcyBhIGJ1dHRvbiB0byBtYWtlIGl0IGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFt0cnVlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBleHBhbmQgYmVoYXZpb3IuIFNldCB0byBgZmFsc2VgIHRvIHJldmVyc2UgdGhpcyBiZWhhdmlvci5cbkBtaXhpbiBidXR0b24tZXhwYW5kKCRleHBhbmQ6IHRydWUpIHtcbiAgQGlmICRleHBhbmQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IG9yIGNsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWZpbGwtc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZmlsbCBbJGJ1dHRvbi1maWxsXSAtIFR5cGUgb2YgZmlsbGluZyBiZXR3ZWVuIGBob2xsb3dgIGFuZCBgY2xlYXJgLiBgc29saWRgIGhhcyBubyBlZmZlY3RzLlxuQG1peGluIGJ1dHRvbi1maWxsKFxuICAkZmlsbDogJGJ1dHRvbi1maWxsXG4pIHtcbiAgQGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdztcbiAgfVxuICBAZWxzZSBpZiAkZmlsbCA9PSBjbGVhciB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWNsZWFyO1xuICB9XG59XG5cbi8vLyBTZXRzIHRoZSB2aXN1YWwgc3R5bGVzIG9mIGEgc29saWQvaG9sbG93L2NsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbnMgYGJ1dHRvbi1zdHlsZWAsIGBidXR0b24taG9sbG93LXN0eWxlYCBhbmQgYGJ1dHRvbi1jbGVhci1zdHlsZWAgZm9yIGVmZmVjdHMgb2YgdmlzdWFsIHN0eWxpbmcgcGFyYW1ldGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRmaWxsIFskYnV0dG9uLWZpbGxdIC0gVHlwZSBvZiBmaWxsaW5nIGJldHdlZW4gYGhvbGxvd2AgYW5kIGBjbGVhcmAuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRidXR0b24tYmFja2dyb3VuZF0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQtaG92ZXIgWyRidXR0b24tYmFja2dyb3VuZC1ob3Zlcl0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIC1cbkBtaXhpbiBidXR0b24tZmlsbC1zdHlsZShcbiAgJGZpbGw6ICRidXR0b24tZmlsbCxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yXG4pIHtcbiAgQGlmICRmaWxsID09IHNvbGlkIHtcbiAgICBAaW5jbHVkZSBidXR0b24tc3R5bGUoJGJhY2tncm91bmQsICRiYWNrZ3JvdW5kLWhvdmVyLCAkY29sb3IpO1xuICB9XG4gIEBlbHNlIGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdy1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbiAgQGVsc2UgaWYgJGZpbGwgPT0gY2xlYXIge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1jbGVhci1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGJ1dHRvbi1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZC1ob3ZlciBbJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgaG92ZXIgY29sb3IuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLXN0eWxlKFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzc1xuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIEBpZiAkYmFja2dyb3VuZC1ob3ZlciA9PSBhdXRvIHtcbiAgICAkYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJhY2tncm91bmQsICRsaWdodG5lc3M6ICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzcyk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGFuZCBkaXNhYmxlZCBzdGF0ZXNcbiAgJixcbiAgJi5kaXNhYmxlZCwgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQ6aG92ZXIsICZbZGlzYWJsZWRdOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzLCAmW2Rpc2FibGVkXTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBTZWUgbWl4aW4gYGJ1dHRvbi1ob2xsb3ctc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG5AbWl4aW4gYnV0dG9uLWhvbGxvdyB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgdmlzdWFsIHN0eWxlIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGFuZCBib3JkZXIgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkaG92ZXItbGlnaHRuZXNzIFskYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3NdIC0gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRib3JkZXItd2lkdGggWyRidXR0b24taG9sbG93LWJvcmRlci13aWR0aF0gLSBCb3JkZXIgd2lkdGggb2YgdGhlIGJ1dHRvbi5cbkBtaXhpbiBidXR0b24taG9sbG93LXN0eWxlKFxuICAkY29sb3I6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzLFxuICAkYm9yZGVyLXdpZHRoOiAkYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGhcbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3I7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3ItaG92ZXI7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgY2xlYXIgYnV0dG9uLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWNsZWFyLXN0eWxlYCBmb3IgdGhlIGZpbGxpbmcgc3R5bGVzLlxuQG1peGluIGJ1dHRvbi1jbGVhciB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGNsZWFyIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGNvbG9yIG9mIHRoZSBidXR0b24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGhvdmVyLWxpZ2h0bmVzcyBbJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzXSAtIENvbG9yIGxpZ2h0bmVzcyBvbiBob3Zlci5cbkBtaXhpbiBidXR0b24tY2xlYXItc3R5bGUoXG4gICRjb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkaG92ZXItbGlnaHRuZXNzOiAkYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3Ncbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cblxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGNvbG9yLWhvdmVyO1xuICB9XG59XG5cbi8vLyBBZGRzIGRpc2FibGVkIHN0eWxlcyB0byBhIGJ1dHRvbiBieSBmYWRpbmcgdGhlIGVsZW1lbnQgYW5kIHJlc2V0aW5nIHRoZSBjdXJzb3IuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcGFjaXR5IFskYnV0dG9uLW9wYWNpdHktZGlzYWJsZWRdIC0gT3BhY2l0eSBvZiB0aGUgZGlzYWJsZWQgYnV0dG9uLlxuQG1peGluIGJ1dHRvbi1kaXNhYmxlZChcbiAgJG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZFxuKSB7XG4gIG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8vIEFkZHMgYSBkcm9wZG93biBhcnJvdyB0byBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNpemUgWzAuNGVtXSAtIFNpemUgb2YgdGhlIGFycm93LiBXZSByZWNvbW1lbmQgdXNpbmcgYW4gYGVtYCB2YWx1ZSBzbyB0aGUgdHJpYW5nbGUgc2NhbGVzIHdoZW4gdXNlZCBpbnNpZGUgZGlmZmVyZW50IHNpemVzIG9mIGJ1dHRvbnMuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFt3aGl0ZV0gLSBDb2xvciBvZiB0aGUgYXJyb3cuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvZmZzZXQgWyRidXR0b24tcGFkZGluZ10gLSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBhcnJvdyBhbmQgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbi4gRGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIHJpZ2h0IHBhZGRpbmcgb2YgYSBidXR0b24gaXMuXG5AbWl4aW4gYnV0dG9uLWRyb3Bkb3duKFxuICAkc2l6ZTogMC40ZW0sXG4gICRjb2xvcjogJHdoaXRlLFxuICAkb2Zmc2V0OiBnZXQtc2lkZSgkYnV0dG9uLXBhZGRpbmcsIHJpZ2h0KVxuKSB7XG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHNpemUsICRjb2xvciwgZG93bik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMC40ZW07IC8vIEFsaWducyB0aGUgYXJyb3cgd2l0aCB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1yaWdodH07XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJG9mZnNldDtcbiAgfVxufVxuXG4vLy8gQWRkcyBhbGwgc3R5bGVzIGZvciBhIGJ1dHRvbi4gRm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIHN0eWxlcywgdXNlIHRoZSBpbmRpdmlkdWFsIGJ1dHRvbiBtaXhpbnMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFtmYWxzZV0gLSBTZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGJ1dHRvbiBmdWxsLXdpZHRoLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIFskYnV0dG9uLWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kLWhvdmVyIFskYnV0dG9uLWJhY2tncm91bmQtaG92ZXJdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uIG9uIGhvdmVyLiBTZXQgdG8gYGF1dG9gIHRvIGhhdmUgdGhlIG1peGluIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBob3ZlciBjb2xvci5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tY29sb3JdIC0gVGV4dCBjb2xvciBvZiB0aGUgYnV0dG9uLiBTZXQgdG8gYGF1dG9gIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBjb2xvciBiYXNlZCBvbiB0aGUgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHlsZSBbc29saWRdIC0gU2V0IHRvIGBob2xsb3dgIHRvIGNyZWF0ZSBhIGhvbGxvdyBidXR0b24uIFRoZSBjb2xvciBkZWZpbmVkIGluIGAkYmFja2dyb3VuZGAgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcmltYXJ5IGNvbG9yIG9mIHRoZSBidXR0b24uXG5AbWl4aW4gYnV0dG9uKFxuICAkZXhwYW5kOiBmYWxzZSxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yLFxuICAkc3R5bGU6ICRidXR0b24tZmlsbFxuKSB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1iYXNlO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbCgkc3R5bGUpO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkc3R5bGUsICRiYWNrZ3JvdW5kLCAkYmFja2dyb3VuZC1ob3ZlciwgJGNvbG9yKTtcblxuICBAaWYgJGV4cGFuZCB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1idXR0b24ge1xuICAuYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBidXR0b24oJHN0eWxlOiBub25lKTtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBmb250LXNpemU6ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmV4cGFuZGVkIHsgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDsgfVxuXG4gICAgQGlmICRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZCB7XG4gICAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBvbmx5KSB7XG4gICAgICAgICAgJi4jeyRzaXplfS1vbmx5LWV4cGFuZGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1leHBhbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAkc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBkb3duKSB7XG4gICAgICAgICAgICAmLiN7JHNpemV9LWRvd24tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoI3skc2l6ZX0pIHtcbiAgICAgICAgICAgICYuI3skc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvbGlkLCBob2xsb3cgJiBjbGVhciBzdHlsZXNcbiAgICBAZWFjaCAkZmlsbGluZyBpbiAoc29saWQgaG9sbG93IGNsZWFyKSB7XG4gICAgICAkc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkZmlsbGluZyk7XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcsICRjb2xvciwgYXV0bywgYXV0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAmLmRpc2FibGVkLCAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd24gYXJyb3dcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1kcm9wZG93bjtcblxuICAgICAgQGlmICRidXR0b24tZmlsbCA9PSBob2xsb3cge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuaG9sbG93LCAmLmNsZWFyIHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRidXR0b24tYmFja2dyb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1dHRvbiB3aXRoIGRyb3Bkb3duIGFycm93IG9ubHlcbiAgICAmLmFycm93LW9ubHk6OmFmdGVyIHtcbiAgICAgIHRvcDogLTAuMWVtO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIH1cbiAgfVxuXG4gIGEuYnV0dG9uIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b24tZ3JvdXBcbi8vLy9cblxuLy8vIE1hcmdpbiBmb3IgYnV0dG9uIGdyb3Vwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b25ncm91cC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3I6ICcuYnV0dG9uJyAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGJ1dHRvbnMgdGhhdCBjYW4gYmUgaW4gYW4gZXZlbi13aWR0aCBidXR0b24gZ3JvdXAuIChPbmx5IG5lZWRlZCB3aGVuICRnbG9iYWwtZmxleGJveDogZmFsc2U7KVxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDYgIWRlZmF1bHQ7XG5cbi8vLyBEZXRlcm1pbmVzIGlmICRidXR0b24tcmFkaXVzIGlzIGFwcGxpZWQgdG8gZWFjaCBidXR0b24gb3IgdGhlIGJ1dHRvbiBncm91cCBhcyBhIHdob2xlLiBVc2UgJGdsb2JhbC1yYWRpdXMgaW4gX3NldHRpbmdzLnNjc3MgdG8gY2hhbmdlIHJhZGl1cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBBZGQgc3R5bGVzIGZvciBhIGJ1dHRvbiBncm91cCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRjaGlsZC1zZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzcGFjaW5nIFskYnV0dG9uZ3JvdXAtc3BhY2luZ10gLSBTcGFjaW5nIGJldHdlZW4gYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAoXG4gICRjaGlsZC1zZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmdcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLWJvdHRvbTogJGJ1dHRvbmdyb3VwLW1hcmdpbjtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gRGlzYWJsZSBjbGVhcmZpeFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZm9udC1zaXplOiAwO1xuICB9XG5cbiAgI3skY2hpbGQtc2VsZWN0b3J9IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRzcGFjaW5nO1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBNYWtlIGJ1dHRvbnMgYm9uZGVkIHdpdGhvdXQgZ2FwIGJldHdlZW4gdGhlbS4gQm9yZGVycyBiZXR3ZWVuIGJ1dHRvbnMgYXJlIG1lcmdlZFxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcl0gLSBTZWxlY3RvciBmb3IgdGhlIGJ1dHRvbnMgaW5zaWRlIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1uby1nYXBzKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcixcbiAgJGJvcmRlci13aWR0aDogJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoXG4pIHtcbiAgI3skc2VsZWN0b3J9IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogcmVtLWNhbGMoLSRib3JkZXItd2lkdGgpO1xuXG4gICAgKyAjeyRzZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgZnVsbC13aWR0aCBidXR0b24gZ3JvdXAsIG1ha2luZyBlYWNoIGJ1dHRvbiBlcXVhbCB3aWR0aC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1leHBhbmQoXG4gICRzZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmcsXG4gICRjb3VudDogbnVsbFxuKSB7XG4gIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogLSRzcGFjaW5nO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIERpc2FibGUgY2xlYXJmaXhcbiAgICB9XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gT25lIGNoaWxkXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gI3skc3BhY2luZ30pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFR3byBvciBtb3JlIGNoaWxkcmVlblxuICAgICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkYnV0dG9uZ3JvdXAtZXhwYW5kLW1heCB7XG4gICAgICAgICY6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoI3skaX0pIHtcbiAgICAgICAgICAmLCAmOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKCN7JGl9KSB+ICN7JHNlbGVjdG9yfSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygje3BlcmNlbnRhZ2UoMSAvICRpKX0gLSAjeyRzcGFjaW5nfSk7XG4gICAgICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZyAqIC0kYnV0dG9uZ3JvdXAtZXhwYW5kLW1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFN0YWNrcyB0aGUgYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBVbi1zdGFja3MgdGhlIGJ1dHRvbnMgaW4gYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgdGhlIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAtdW5zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgQGlmIG5vdCAkYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2gge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJ1dHRvbi1ncm91cCB7XG4gIC5idXR0b24tZ3JvdXAge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cDtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0gI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgZm9udC1zaXplOiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBHcm91cFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLWV4cGFuZDtcbiAgICB9XG5cbiAgICAvLyBTb2xpZCwgaG9sbG93ICYgY2xlYXIgc3R5bGVzXG4gICAgQGVhY2ggJGZpbGxpbmcgaW4gKHNvbGlkIGhvbGxvdyBjbGVhcikge1xuICAgICAgJGJhc2Utc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skYmFzZS1zZWxlY3Rvcn0ge1xuICAgICAgICAvLyBEbyBub3QgZ2VuZXJhdGUgYnV0dG9uIGJhc2Ugc3R5bGVzIGZvciB0aGUgZGVmYXVsdCBmaWxsaW5nXG4gICAgICAgIEBpZigkYnV0dG9uLWZpbGwgIT0gJGZpbGxpbmcpIHtcbiAgICAgICAgICAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAkaW5kaXZpZHVhbC1zZWxlY3RvcjogaWYoJGJ1dHRvbi1maWxsID09ICRmaWxsaW5nLCBudWxsLCAnICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfS4jeyRuYW1lfScpO1xuXG4gICAgICAgICAgJi4jeyRuYW1lfSAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0sICN7JGluZGl2aWR1YWwtc2VsZWN0b3J9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1maWxsLXN0eWxlKCRmaWxsaW5nLCAkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi5uby1nYXBzIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1uby1nYXBzO1xuICAgIH1cblxuICAgICYuc3RhY2tlZCxcbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsLFxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1zdGFjaztcblxuICAgICAgJi5leHBhbmRlZCB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zdGFja2VkLWZvci1zbWFsbCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZ3JvdXAtdW5zdGFjaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC11bnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bS5leHBhbmRlZCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSBkb3duKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjbG9zZS1idXR0b25cbi8vLy9cblxuLy8vIERlZmF1bHQgcG9zaXRpb24gb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBgcmlnaHRgIG9yIGBsZWZ0YCwgYW5kIHRoZSBzZWNvbmQgdmFsdWUgc2hvdWxkIGJlIGB0b3BgIG9yIGBib3R0b21gLlxuLy8vIEB0eXBlIExpc3RcbiRjbG9zZWJ1dHRvbi1wb3NpdGlvbjogcmlnaHQgdG9wICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB6LWluZGV4IGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjbG9zZWJ1dHRvbi16LWluZGV4OiAxMCAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBzaXplIHRvIHVzZSBhcyBkZWZhdWx0XG4vLy8gQHR5cGUgU3RyaW5nXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tc2l6ZVxuLy8vIEBzZWUgJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsXG4kY2xvc2VidXR0b24tZGVmYXVsdC1zaXplOiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCAob3IgbGVmdCkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LWhvcml6b250YWw6IChcbiAgc21hbGw6IDAuNjZyZW0sXG4gIG1lZGl1bTogMXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUb3AgKG9yIGJvdHRvbSkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsOiAoXG4gIHNtYWxsOiAwLjMzZW0sXG4gIG1lZGl1bTogMC41cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIFNpemUocykgb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVXNlZCB0byBnZW5lcmF0ZSBzaXppbmcgbW9kaWZpZXJzLlxuLy8vIEB0eXBlIE51bWJlcnxNYXBcbiRjbG9zZWJ1dHRvbi1zaXplOiAoXG4gIHNtYWxsOiAxLjVlbSxcbiAgbWVkaXVtOiAyZW0sXG4pICFkZWZhdWx0O1xuXG4vLy8gVGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBjbG9zZSBidXR0b24uIEl0IGFmZmVjdHMgdGhlIHNwYWNpbmcgb2YgdGhlIGVsZW1lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gYmVpbmcgaG92ZXJlZCBvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yLWhvdmVyOiAkYmxhY2sgIWRlZmF1bHQ7XG5cblxuLy8vIEdldCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgY2xvc2UgYnV0dG9uLiBJZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQuIElmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIGNvbmZpZyBtYXAgYW5kIHRoZSBtYXAgaGFzIHRoZSBrZXkgYCRzaXplYCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkdmFsdWUgLSBBIG51bWJlciBvciBtYXAgdGhhdCByZXByZXNlbnRzIHRoZSBzaXplIG9yIHBvc2l0aW9uIHZhbHVlKHMpIG9mIHRoZSBjbG9zZSBidXR0b24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBjbG9zZSBidXR0b24gdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSBUaGUgZ2l2ZW4gbnVtYmVyIG9yIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgbWFwLlxuQGZ1bmN0aW9uIC16Zi1nZXQtc2l6ZS12YWwoJHZhbHVlLCAkc2l6ZSkge1xuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgLy8gSWYgaXQgaXMsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzaXplIG5hbWUgZXhpc3RzIGluIHRoZSB2YWx1ZSBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJHZhbHVlLCAkc2l6ZSkge1xuICAgIC8vIElmIGl0IGRvZXMsIHJldHVybiB0aGUgdmFsdWVcbiAgICBAcmV0dXJuIG1hcC1nZXQoJHZhbHVlLCAkc2l6ZSk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGEgY2xvc2UgYnV0dG9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgW21lZGl1bV0gLSBUaGUgc2l6ZSB0byB1c2UuIFNldCB0byBgc21hbGxgIHRvIGNyZWF0ZSBhIHNtYWxsIGNsb3NlIGJ1dHRvbi4gVGhlICdtZWRpdW0nIHZhbHVlcyBkZWZpbmVkIGluIGAkY2xvc2VidXR0b24tKmAgdmFyaWFibGVzIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgY2xvc2UgYnV0dG9uLlxuQG1peGluIGNsb3NlLWJ1dHRvbi1zaXplKCRzaXplKSB7XG4gICR4OiBudGgoJGNsb3NlYnV0dG9uLXBvc2l0aW9uLCAxKTtcbiAgJHk6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDIpO1xuXG4gICN7JHh9OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbCwgJHNpemUpO1xuICAjeyR5fTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsLCAkc2l6ZSk7XG4gIGZvbnQtc2l6ZTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tc2l6ZSwgJHNpemUpO1xuICBsaW5lLWhlaWdodDogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tbGluZWhlaWdodCwgJHNpemUpO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY2xvc2UgYnV0dG9uLCB1c2luZyB0aGUgc3R5bGVzIGluIHRoZSBzZXR0aW5ncyB2YXJpYWJsZXMuXG5AbWl4aW4gY2xvc2UtYnV0dG9uIHtcbiAgJHg6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDEpO1xuICAkeTogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMik7XG5cbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICRjbG9zZWJ1dHRvbi16LWluZGV4O1xuICBjb2xvcjogJGNsb3NlYnV0dG9uLWNvbG9yO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1jbG9zZS1idXR0b24ge1xuICAuY2xvc2UtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBjbG9zZS1idXR0b247XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIGFuZCBhIGNsYXNzIGZvciBlYWNoIHNpemVcbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJGNsb3NlYnV0dG9uLXNpemUge1xuICAgICAgQGF0LXJvb3Qge1xuICAgICAgICAlemYtY2xvc2UtYnV0dG9uLS0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgY2xvc2UtYnV0dG9uLXNpemUoJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAZXh0ZW5kICV6Zi1jbG9zZS1idXR0b24tLSN7JG5hbWV9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBieSBkZWZhdWx0IHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgZGVmYXVsdCBzaXplXG4gICAgQGV4dGVuZCAlemYtY2xvc2UtYnV0dG9uLS0jeyRjbG9zZWJ1dHRvbi1kZWZhdWx0LXNpemV9O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbGFiZWxcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRsYWJlbC1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXBhZGRpbmc6IDAuMzMzMzNyZW0gMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgb2YgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBHZW5lcmF0ZXMgYmFzZSBzdHlsZXMgZm9yIGEgbGFiZWwuXG5AbWl4aW4gbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6ICRsYWJlbC1wYWRkaW5nO1xuXG4gIGJvcmRlci1yYWRpdXM6ICRsYWJlbC1yYWRpdXM7XG5cbiAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1sYWJlbCB7XG4gIC5sYWJlbCB7XG4gICAgQGluY2x1ZGUgbGFiZWw7XG5cbiAgICBiYWNrZ3JvdW5kOiAkbGFiZWwtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkbGFiZWwtcGFsZXR0ZSB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgICAgICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkY29sb3IsICgkbGFiZWwtY29sb3IsICRsYWJlbC1jb2xvci1hbHQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHByb2dyZXNzIGJhciBjb250YWluZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAkcHJvZ3Jlc3MtaGVpZ2h0O1xuICBtYXJnaW4tYm90dG9tOiAkcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhY2tncm91bmQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIG1ldGVyIG9mIGEgcHJvZ3Jlc3MgYmFyLlxuQG1peGluIHByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGV4dCBpbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtbWV0ZXItdGV4dCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJHdoaXRlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRwcm9ncmVzcy1yYWRpdXM7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tcHJvZ3Jlc3MtYmFyIHtcbiAgLy8gUHJvZ3Jlc3MgYmFyXG4gIC5wcm9ncmVzcyB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtY29udGFpbmVyO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElubmVyIG1ldGVyXG4gIC5wcm9ncmVzcy1tZXRlciB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtbWV0ZXI7XG4gIH1cblxuICAvLyBJbm5lciBtZXRlciB0ZXh0XG4gIC5wcm9ncmVzcy1tZXRlci10ZXh0IHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1tZXRlci10ZXh0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vIFtUT0RPXSBDaGVjayBob3cgcGx1Z2luIGNvbmZpcm1zIGRpc2FibGVkIG9yIHZlcnRpY2FsIHN0YXR1c1xuLy8gW1RPRE9dIENoZWNrIGlmIHRyYW5zaXRpb246IGFsbDsgaXMgbmVjZXNzYXJ5XG5cbi8vLy9cbi8vLyBAZ3JvdXAgc2xpZGVyXG4vLy8vXG5cbi8vLyBEZWZhdWx0IHNsaWRlciB3aWR0aCBvZiBhIHZlcnRpY2FsIHNsaWRlci4gKERvZXNuJ3QgYXBwbHkgdG8gdGhlIG5hdGl2ZSBzbGlkZXIuKVxuLy8vIEB0eXBlIE51bWJlclxuJHNsaWRlci13aWR0aC12ZXJ0aWNhbDogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBzbGlkZXIgaGFuZGxlIGFuZCBmaWxsLiAoRG9lc24ndCBhcHBseSB0byB0aGUgbmF0aXZlIHNsaWRlci4pXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHNsaWRlci10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciBzbGlkZXJzLlxuQG1peGluIHNsaWRlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogJHNsaWRlci1oZWlnaHQ7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDIuMjVyZW07XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1iYWNrZ3JvdW5kO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3IgYWN0aXZlIGZpbGwgZm9yIHNsaWRlcnMuXG5AbWl4aW4gc2xpZGVyLWZpbGwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkc2xpZGVyLWhlaWdodDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWZpbGwtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciB0aGUgc2xpZGVyIGhhbmRsZXMuXG5AbWl4aW4gc2xpZGVyLWhhbmRsZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgQGluY2x1ZGUgdmVydGljYWwtY2VudGVyO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcblxuICBib3JkZXItcmFkaXVzOiAkc2xpZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1oYW5kbGUtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzY2FsZS1jb2xvcigkc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKTtcbiAgfVxuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuQG1peGluIHNsaWRlci1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6ICRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuQG1peGluIHNsaWRlci12ZXJ0aWNhbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItd2lkdGgtdmVydGljYWw7XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuXG4gIC5zbGlkZXItZmlsbCB7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkc2xpZGVyLXdpZHRoLXZlcnRpY2FsO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcbiAgICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zbGlkZXIge1xuICAvLyBDb250YWluZXJcbiAgLnNsaWRlciB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIEZpbGwgYXJlYVxuICAuc2xpZGVyLWZpbGwge1xuICAgIEBpbmNsdWRlIHNsaWRlci1maWxsO1xuICB9XG5cbiAgLy8gRHJhZ2dhYmxlIGhhbmRsZVxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWhhbmRsZTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gIC5zbGlkZXIuZGlzYWJsZWQsXG4gIC5zbGlkZXJbZGlzYWJsZWRdIHtcbiAgICBAaW5jbHVkZSBzbGlkZXItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBWZXJ0aWNhbCBzbGlkZXJcbiAgLnNsaWRlci52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gUlRMIHN1cHBvcnRcbiAgQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsIHtcbiAgICAuc2xpZGVyOm5vdCgudmVydGljYWwpIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHN3aXRjaFxuLy8vL1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGFjdGl2ZSBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2gsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0OiAycmVtICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgc3dpdGNoIHdpdGggLnRpbnkgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2ggd2l0aCAuc21hbGwgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbSAhZGVmYXVsdDtcblxuLy8vIEhlaWdodCBvZiBhIHN3aXRjaCB3aXRoIC5sYXJnZSBjbGFzcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIG9mIHRoZSBzd2l0Y2hcbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIGJvcmRlciBhcm91bmQgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzd2l0Y2ggY29udGFpbmVyIGFuZCBwYWRkbGUuXG4vLy8gQHR5cGUgQ29sb3JcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgYmV0d2VlbiBhIHN3aXRjaCBwYWRkbGUgYW5kIHRoZSBlZGdlIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtb2Zmc2V0OiAwLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gYm9yZGVyIHJhZGl1cyBvZiB0aGUgc3dpdGNoIHBhZGRsZVxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHN3aXRjaCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gT3BhY2l0eSBvZiBhIGRpc2FibGVkIHN3aXRjaC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtb3BhY2l0eS1kaXNhYmxlZDogLjUgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgZm9yIGEgZGlzYWJsZWQgc3dpdGNoLlxuLy8vIEB0eXBlIEN1cnNvclxuJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkICFkZWZhdWx0O1xuXG4vLyBtYWtlIHRoZW0gdmFyaWFibGVzXG4vLyBhc2sgYWJvdXQgYWNjZXNzaWJpbGl0eSBvbiBsYWJlbFxuLy8gY2hhbmdlIGNsYXNzIG5hbWUgZm9yIHRleHRcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBjb250YWluZXIgY2xhc3MuXG5AbWl4aW4gc3dpdGNoLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHN3aXRjaC1tYXJnaW47XG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gVGhlc2UgcHJvcGVydGllcyBjYXNjYWRlIGRvd24gdG8gdGhlIHN3aXRjaCB0ZXh0XG4gIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR3aGl0ZTtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBpbnB1dC4gQXBwbHkgdGhpcyB0byBhbiBgPGlucHV0PmAgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYmFja2dyb3VuZCBhbmQgcGFkZGxlIG9mIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIGEgYDxsYWJlbD5gIHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtcGFkZGxlIHtcbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHN3aXRjaC1wYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRzd2l0Y2gtcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWFjdGl2ZS1vZmZlc3Q6ICRzd2l0Y2gtd2lkdGggLSAkcGFkZGxlLXdpZHRoIC0gJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIGJvcmRlci1yYWRpdXM6ICRzd2l0Y2gtcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkc3dpdGNoLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzd2l0Y2gtcGFkZGxlLXRyYW5zaXRpb247XG5cbiAgLy8gUmVzZXR0aW5nIHRoZXNlIDxsYWJlbD4gcHJlc2V0cyBzbyB0eXBlIHN0eWxlcyBjYXNjYWRlIGRvd25cbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBOZWVkZWQgdG8gb3ZlcnJpZGUgc3BlY2lmaWNpdHlcbiAgaW5wdXQgKyAmIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBUaGUgcGFkZGxlIGl0c2VsZlxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1wYWRkbGUtcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ7XG4gICAgdHJhbnNpdGlvbjogJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgdmlzdWFsIHN0eWxlIHdoZW4gdGhlIHN3aXRjaCBpcyBhY3RpdmVcbiAgaW5wdXQ6Y2hlY2tlZCB+ICYge1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbmRpY2F0ZSBhIGRpc2FibGVkIHN3aXRjaFxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGN1cnNvcjogJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogJHN3aXRjaC1vcGFjaXR5LWRpc2FibGVkO1xuICB9XG5cbiAgaW5wdXQ6Zm9jdXMgfiAmIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIH1cbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIGFjdGl2ZS9pbmFjdGl2ZSB0ZXh0IGluc2lkZSBhIHN3aXRjaC4gQXBwbHkgdGhpcyB0byB0ZXh0IGVsZW1lbnRzIGluc2lkZSB0aGUgc3dpdGNoIGA8bGFiZWw+YC5cbkBtaXhpbiBzd2l0Y2gtdGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWN0aXZlIHN0YXRlIHRleHQgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC10ZXh0LWFjdGl2ZSB7XG4gICN7JGdsb2JhbC1sZWZ0fTogOCU7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5hY3RpdmUgc3RhdGUgdGV4dCB3aXRoaW4gYSBzd2l0Y2guXG5AbWl4aW4gc3dpdGNoLXRleHQtaW5hY3RpdmUge1xuICAjeyRnbG9iYWwtcmlnaHR9OiAxNSU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vLy8gQ2hhbmdlcyB0aGUgc2l6ZSBvZiBhIHN3aXRjaCBieSBtb2RpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGJvZHkgYW5kIHBhZGRsZS4gQXBwbHkgdGhpcyB0byBhIHN3aXRjaCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmb250LXNpemUgWzFyZW1dIC0gRm9udCBzaXplIG9mIGxhYmVsIHRleHQgd2l0aGluIHRoZSBzd2l0Y2guXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzd2l0Y2gtaGVpZ2h0IFsycmVtXSAtIEhlaWdodCBvZiB0aGUgc3dpdGNoIGJvZHkuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRwYWRkbGUtb2Zmc2V0IFswLjI1cmVtXSAtIFNwYWNpbmcgYmV0d2VlbiB0aGUgc3dpdGNoIHBhZGRsZSBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHN3aXRjaCBib2R5LlxuQG1peGluIHN3aXRjaC1zaXplKFxuICAkZm9udC1zaXplOiAxcmVtLFxuICAkc3dpdGNoLWhlaWdodDogMnJlbSxcbiAgJHBhZGRsZS1vZmZzZXQ6IDAuMjVyZW1cbikge1xuXG4gICRzd2l0Y2gtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0ICogMjtcbiAgJHBhZGRsZS13aWR0aDogJHN3aXRjaC1oZWlnaHQgLSAoJHBhZGRsZS1vZmZzZXQgKiAyKTtcbiAgJHBhZGRsZS1oZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRwYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtYWN0aXZlLW9mZmVzdDogJHN3aXRjaC13aWR0aCAtICRwYWRkbGUtd2lkdGggLSAkcGFkZGxlLW9mZnNldDtcblxuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICB3aWR0aDogJHN3aXRjaC13aWR0aDtcbiAgICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgdG9wOiAkcGFkZGxlLW9mZnNldDtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtb2Zmc2V0O1xuICAgIHdpZHRoOiAkcGFkZGxlLXdpZHRoO1xuICAgIGhlaWdodDogJHBhZGRsZS1oZWlnaHQ7XG4gIH1cblxuICBpbnB1dDpjaGVja2VkIH4gLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zd2l0Y2gge1xuICAvLyBDb250YWluZXIgY2xhc3NcbiAgLnN3aXRjaCB7XG4gICAgaGVpZ2h0OiAkc3dpdGNoLWhlaWdodDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtY29udGFpbmVyO1xuICB9XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50XG4gIC5zd2l0Y2gtaW5wdXQge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1pbnB1dDtcbiAgfVxuXG4gIC8vIDxsYWJlbD4gZWxlbWVudFxuICAuc3dpdGNoLXBhZGRsZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXBhZGRsZTtcbiAgfVxuXG4gIC8vIEJhc2UgbGFiZWwgdGV4dCBzdHlsZXNcbiAgJXN3aXRjaC10ZXh0IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dDtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAuc3dpdGNoLWFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtYWN0aXZlO1xuICB9XG5cbiAgLy8gSW5hY3RpdmUgbGFiZWwgdGV4dCBzdHlsZXNcbiAgLnN3aXRjaC1pbmFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtaW5hY3RpdmU7XG4gIH1cblxuICAvLyBTd2l0Y2ggc2l6ZXNcbiAgLnN3aXRjaC50aW55IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMCksICRzd2l0Y2gtaGVpZ2h0LXRpbnksICRzd2l0Y2gtcGFkZGxlLW9mZnNldCk7XG4gIH1cblxuICAuc3dpdGNoLnNtYWxsIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMiksICRzd2l0Y2gtaGVpZ2h0LXNtYWxsLCAkc3dpdGNoLXBhZGRsZS1vZmZzZXQpO1xuICB9XG5cbiAgLnN3aXRjaC5sYXJnZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXNpemUocmVtLWNhbGMoMTYpLCAkc3dpdGNoLWhlaWdodC1sYXJnZSwgJHN3aXRjaC1wYWRkbGUtb2Zmc2V0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFibGVcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIHRhYmxlIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGUgICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzY2FsZSBmb3IgZGFya2VuaW5nIHRoZSBzdHJpcGVkIHRhYmxlIHJvd3MgYW5kIHRoZSB0YWJsZSBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtY29sb3Itc2NhbGU6IDUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGFibGUgYm9yZGVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFibGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtcGFkZGluZzogcmVtLWNhbGMoOCAxMCAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNjYWxlIGZvciBkYXJrZW5pbmcgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtaG92ZXItc2NhbGU6IDIlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBzdGFuZGFyZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2Ygc3RyaXBlZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSkgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIHRhYmxlcyBhcmUgc3RyaXBlZCBieSBkZWZhdWx0IGFuZCBhbiAudW5zdHJpcGVkIGNsYXNzIGlzIGNyZWF0ZWQuIElmIGBmYWxzZWAsIGEgLnN0cmlwZWQgY2xhc3MgaXMgY3JlYXRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3Igc3RyaXBlZCByb3dzLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIHN0cmlwZSBvbiByb3dzIG9mIHRoZSB0YWJsZXMsIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGFuZCBmb290ZXIuIElmIGV2ZW4sIHRoZSBldmVuIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgb2RkLCB0aGUgb2RkIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgZW1wdHksIG9yIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRhYmxlIHJvd3Mgd2lsbCBoYXZlIG5vIHN0cmlwaW5nLlxuLy8vIEB0eXBlIEtleXdvcmRcbiR0YWJsZS1zdHJpcGU6IGV2ZW4gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWFkZXIgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWhlYWQtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSAvIDIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBoZWFkZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgZm9vdGVyIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1mb290LWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBmb290ZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBoZWFkZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1oZWFkLWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvb3Rlci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIGhlYWRlciB3aGVuIHVzaW5nIHN0YWNrZWQgdGFibGVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHN0YWNrZWQgdGFibGUgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0YWJsZS1zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGU6ICR0YWJsZS1zdHJpcGUpIHtcbiAgdHIge1xuICAgIC8vIElmIHN0cmlwZSBpcyBzZXQgdG8gZXZlbiwgZGFya2VuIHRoZSBldmVuIHJvd3MuXG4gICAgQGlmICRzdHJpcGUgPT0gZXZlbiB7XG4gICAgICAmOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc3RyaXBlIGlzIHNldCB0byBvZGQsIGRhcmtlbiB0aGUgb2RkIHJvd3MuXG4gICAgQGVsc2UgaWYgJHN0cmlwZSA9PSBvZGQge1xuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiAtemYtdGFibGUtdW5zdHJpcGUoKSB7XG4gIHRyIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICR0YWJsZS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZTogJHRhYmxlLXN0cmlwZSwgJGlzLXN0cmlwZWQ6ICR0YWJsZS1pcy1zdHJpcGVkKSB7XG4gIHRoZWFkLFxuICB0Ym9keSxcbiAgdGZvb3Qge1xuICAgIGJvcmRlcjogJHRhYmxlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC8vIENhcHRpb25cbiAgY2FwdGlvbiB7XG4gICAgcGFkZGluZzogJHRhYmxlLXBhZGRpbmc7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4gIH1cblxuICAvLyBUYWJsZSBoZWFkXG4gIHRoZWFkIHtcbiAgICBiYWNrZ3JvdW5kOiAkdGFibGUtaGVhZC1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkdGFibGUtaGVhZC1mb250LWNvbG9yO1xuICB9XG5cbiAgLy8gVGFibGUgZm9vdFxuICB0Zm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHRhYmxlLWZvb3QtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRhYmxlLWZvb3QtZm9udC1jb2xvcjtcbiAgfVxuXG4gIC8vIFRhYmxlIGhlYWQgYW5kIGZvb3RcbiAgdGhlYWQsXG4gIHRmb290IHtcbiAgICAvLyBSb3dzIHdpdGhpbiBoZWFkIGFuZCBmb290XG4gICAgdHIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gQ2VsbHMgd2l0aGluIGhlYWQgYW5kIGZvb3RcbiAgICB0aCxcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiAkdGFibGUtcGFkZGluZztcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuICAgICAgdGV4dC1hbGlnbjogI3skZ2xvYmFsLWxlZnR9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFRhYmxlIHJvd3NcbiAgdGJvZHkge1xuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6ICR0YWJsZS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRhYmxlcyBhcmUgc3RyaXBlZFxuICBAaWYgJGlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgdGJvZHkge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLXN0cmlwZSgkc3RyaXBlKTtcbiAgICB9XG5cbiAgICAmLnVuc3RyaXBlZCB7XG4gICAgICB0Ym9keSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS11bnN0cmlwZSgpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0YWJsZXMgYXJlIG5vdCBzdHJpcGVkXG4gIEBlbHNlIGlmICRpcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICB0Ym9keSB7XG4gICAgICBAaW5jbHVkZSAtemYtdGFibGUtdW5zdHJpcGUoKTtcbiAgICB9XG5cbiAgICAmLnN0cmlwZWQge1xuICAgICAgdGJvZHkge1xuICAgICAgICBAaW5jbHVkZSAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlcy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHJpcGUgWyR0YWJsZS1zdHJpcGVdIC0gVXNlcyBrZXl3b3JkcyBldmVuLCBvZGQsIG9yIG5vbmUgdG8gZGFya2VuIHJvd3Mgb2YgdGhlIHRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBldmVuLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJG5lc3QgW2ZhbHNlXSAtIE5lZWRlZCBpZiB5b3Ugb25seSB3YW50IHRvIGFwcGx5IHRoaXMgdG8gYSBzcGVjaWZpYyB0YWJsZS5cbkBtaXhpbiB0YWJsZShcbiAgJHN0cmlwZTogJHRhYmxlLXN0cmlwZSxcbiAgJG5lc3Q6IGZhbHNlXG4pIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuICBAaWYgJG5lc3Qge1xuICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBhdC1yb290IHtcbiAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHRoZSBhYmlsaXR5IHRvIGhvcml6b250YWxseSBzY3JvbGwgdGhlIHRhYmxlIHdoZW4gdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIGhvcml6b250YWxseS5cbkBtaXhpbiB0YWJsZS1zY3JvbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi8vLyBTbGlnaHRseSBkYXJrZW5zIHRoZSB0YWJsZSByb3dzIG9uIGhvdmVyLlxuQG1peGluIHRhYmxlLWhvdmVyIHtcbiAgdGhlYWQgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgaGVhZGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtaGVhZC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGZvb3QgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgZm9vdGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtZm9vdC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGJvZHkgdHIge1xuICAgIC8vRGFya2VucyB0aGUgbm9uLXN0cmlwZWQgdGFibGUgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgQGlmICR0YWJsZS1pcy1zdHJpcGVkID09IHRydWUge1xuICAgIC8vIERhcmtlbnMgdGhlIGV2ZW4gc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBpZigkdGFibGUtc3RyaXBlID09IGV2ZW4pIHtcbiAgICAgICY6bm90KC51bnN0cmlwZWQpIHRyOm50aC1vZi10eXBlKGV2ZW4pOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1zdHJpcGUtaG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGFya2VucyB0aGUgb2RkIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAZWxzZSBpZigkdGFibGUtc3RyaXBlID09IG9kZCkge1xuICAgICAgJjpub3QoLnVuc3RyaXBlZCkgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmICR0YWJsZS1pcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICAvLyBEYXJrZW5zIHRoZSBldmVuIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAaWYoJHRhYmxlLXN0cmlwZSA9PSBldmVuKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUoZXZlbik6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXJrZW5zIHRoZSBvZGQgc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBlbHNlIGlmKCR0YWJsZS1zdHJpcGUgPT0gb2RkKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc3RhY2tlZCB0YWJsZS4gVXNlZnVsIGZvciBzbWFsbC1zY3JlZW4gbGF5b3V0cy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRoZWFkZXIgWyRzaG93LWhlYWRlci1mb3Itc3RhY2tlZF0gLSBTaG93IHRoZSBmaXJzdCB0aCBvZiBoZWFkZXIgd2hlbiBzdGFja2VkLlxuQG1peGluIHRhYmxlLXN0YWNrKCRoZWFkZXI6ICRzaG93LWhlYWRlci1mb3Itc3RhY2tlZCkge1xuICBAaWYgJGhlYWRlciB7XG4gICAgdGhlYWQge1xuICAgICAgdGgge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIHRoZWFkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGZvb3Qge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICB0cixcbiAgdGgsXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRhYmxlKCRuZXN0OiBmYWxzZSkge1xuICB0YWJsZSB7XG4gICAgQGluY2x1ZGUgdGFibGUoJG5lc3Q6ICRuZXN0KTtcbiAgfVxuXG4gIHRhYmxlLnN0YWNrIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0YWJsZS1zdGFjay1icmVha3BvaW50IGRvd24pIHtcbiAgICAgIEBpbmNsdWRlIHRhYmxlLXN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlLnNjcm9sbCB7XG4gICAgQGluY2x1ZGUgdGFibGUtc2Nyb2xsO1xuICB9XG5cbiAgdGFibGUuaG92ZXIge1xuICAgIEBpbmNsdWRlIHRhYmxlLWhvdmVyO1xuICB9XG5cbiAgLnRhYmxlLXNjcm9sbCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBpbXBvcnQgJ21hdGgnO1xuXG4kY29udHJhc3Qtd2FybmluZ3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbi8vLyBDaGVja3MgdGhlIGx1bWluYW5jZSBvZiBgJGNvbG9yYC5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIGNoZWNrIHRoZSBsdW1pbmFuY2Ugb2YuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbHVtaW5hbmNlIG9mIGAkY29sb3JgLlxuQGZ1bmN0aW9uIGNvbG9yLWx1bWluYW5jZSgkY29sb3IpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICRyZ2JhOiByZWQoJGNvbG9yKSwgZ3JlZW4oJGNvbG9yKSwgYmx1ZSgkY29sb3IpO1xuICAkcmdiYTI6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggMyB7XG4gICAgJHJnYjogbnRoKCRyZ2JhLCAkaSk7XG4gICAgJHJnYjogJHJnYiAvIDI1NTtcblxuICAgICRyZ2I6IGlmKCRyZ2IgPCAwLjAzOTI4LCAkcmdiIC8gMTIuOTIsIHBvdygoJHJnYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpKTtcblxuICAgICRyZ2JhMjogYXBwZW5kKCRyZ2JhMiwgJHJnYik7XG4gIH1cblxuICBAcmV0dXJuIDAuMjEyNiAqIG50aCgkcmdiYTIsIDEpICsgMC43MTUyICogbnRoKCRyZ2JhMiwgMikgKyAwLjA3MjIgKiBudGgoJHJnYmEyLCAzKTtcbn1cblxuLy8vIENoZWNrcyB0aGUgY29udHJhc3QgcmF0aW8gb2YgdHdvIGNvbG9ycy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjEgLSBGaXJzdCBjb2xvciB0byBjb21wYXJlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjIgLSBTZWNvbmQgY29sb3IgdG8gY29tcGFyZS5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBjb250cmFzdCByYXRpbyBvZiB0aGUgY29tcGFyZWQgY29sb3JzLlxuQGZ1bmN0aW9uIGNvbG9yLWNvbnRyYXN0KCRjb2xvcjEsICRjb2xvcjIpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICRsdW1pbmFuY2UxOiBjb2xvci1sdW1pbmFuY2UoJGNvbG9yMSkgKyAwLjA1O1xuICAkbHVtaW5hbmNlMjogY29sb3ItbHVtaW5hbmNlKCRjb2xvcjIpICsgMC4wNTtcbiAgJHJhdGlvOiAkbHVtaW5hbmNlMSAvICRsdW1pbmFuY2UyO1xuXG4gIEBpZiAkbHVtaW5hbmNlMiA+ICRsdW1pbmFuY2UxIHtcbiAgICAkcmF0aW86IDEgLyAkcmF0aW87XG4gIH1cblxuICAkcmF0aW86IHJvdW5kKCRyYXRpbyAqIDEwKSAvIDEwO1xuXG4gIEByZXR1cm4gJHJhdGlvO1xufVxuXG4vLy8gQ2hlY2tzIHRoZSBsdW1pbmFuY2Ugb2YgYCRiYXNlYCwgYW5kIHJldHVybnMgdGhlIGNvbG9yIGZyb20gYCRjb2xvcnNgIChsaXN0IG9mIGNvbG9ycykgdGhhdCBoYXMgdGhlIG1vc3QgY29udHJhc3QuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFzZSAtIENvbG9yIHRvIGNoZWNrIGx1bWluYW5jZS5cbi8vLyBAcGFyYW0ge0xpc3R9ICRjb2xvcnMgWygkd2hpdGUsICRibGFjayldIC0gQ29sb3JzIHRvIGNvbXBhcmUuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0b2xlcmFuY2UgWyRnbG9iYWwtY29sb3ItcGljay1jb250cmFzdC10b2xlcmFuY2VdIC0gQ29udHJhc3QgdG9sZXJhbmNlLlxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSB0aGUgY29sb3IgZnJvbSBgJGNvbG9yc2AgKGxpc3Qgb2YgY29sb3JzKSB0aGF0IGhhcyB0aGUgbW9zdCBjb250cmFzdC5cbkBmdW5jdGlvbiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYXNlLCAkY29sb3JzOiAoJHdoaXRlLCAkYmxhY2spLCAkdG9sZXJhbmNlOiAkZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlKSB7XG4gICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAxKSk7XG4gICRiZXN0OiBudGgoJGNvbG9ycywgMSk7XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCBsZW5ndGgoJGNvbG9ycykge1xuICAgICRjdXJyZW50LWNvbnRyYXN0OiBjb2xvci1jb250cmFzdCgkYmFzZSwgbnRoKCRjb2xvcnMsICRpKSk7XG4gICAgQGlmICgkY3VycmVudC1jb250cmFzdCAtICRjb250cmFzdCA+ICR0b2xlcmFuY2UpIHtcbiAgICAgICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAkaSkpO1xuICAgICAgJGJlc3Q6IG50aCgkY29sb3JzLCAkaSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkY29udHJhc3Qtd2FybmluZ3MgYW5kICRjb250cmFzdCA8IDMpIHtcbiAgICBAd2FybiBcIkNvbnRyYXN0IHJhdGlvIG9mICN7JGJlc3R9IG9uICN7JGJhc2V9IGlzIHByZXR0eSBiYWQsIGp1c3QgI3skY29udHJhc3R9XCI7XG4gIH1cblxuICBAcmV0dXJuICRiZXN0O1xufVxuXG4vLy8gU2NhbGVzIGEgY29sb3IgdG8gYmUgZGFya2VyIGlmIGl0J3MgbGlnaHQsIG9yIGxpZ2h0ZXIgaWYgaXQncyBkYXJrLiBVc2UgdGhpcyBmdW5jdGlvbiB0byB0aW50IGEgY29sb3IgYXBwcm9wcmlhdGUgdG8gaXRzIGxpZ2h0bmVzcy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIHNjYWxlLlxuLy8vIEBwYXJhbSB7UGVyY2VudGFnZX0gJHNjYWxlIFs1JV0gLSBBbW91bnQgdG8gc2NhbGUgdXAgb3IgZG93bi5cbi8vLyBAcGFyYW0ge1BlcmNlbnRhZ2V9ICR0aHJlc2hvbGQgWzQwJV0gLSBUaHJlc2hvbGQgb2YgbGlnaHRuZXNzIHRvIGNoZWNrIGFnYWluc3QuXG4vLy9cbi8vLyBAcmV0dXJucyB7Q29sb3J9IEEgc2NhbGVkIGNvbG9yLlxuQGZ1bmN0aW9uIHNtYXJ0LXNjYWxlKCRjb2xvciwgJHNjYWxlOiA1JSwgJHRocmVzaG9sZDogNDAlKSB7XG4gIEBpZiBsaWdodG5lc3MoJGNvbG9yKSA+ICR0aHJlc2hvbGQge1xuICAgICRzY2FsZTogLSRzY2FsZTtcbiAgfVxuICBAcmV0dXJuIHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJHNjYWxlKTtcbn1cblxuLy8vIEdldCBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHBhcmFtIHtrZXl9IGNvbG9yIGtleSBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuQGZ1bmN0aW9uIGdldC1jb2xvcigka2V5KSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCAka2V5KSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsICRrZXkpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ2dpdmVuICRrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiAkZm91bmRhdGlvbi1wYWxldHRlJztcbiAgfVxufVxuXG4vLy8gVHJhbnNmZXJzIHRoZSBjb2xvcnMgaW4gdGhlIGAkZm91bmRhdGlvbi1wYWxldHRlYCBtYXAgaW50byB2YXJpYWJsZXMsIHN1Y2ggYXMgYCRwcmltYXJ5LWNvbG9yYCBhbmQgYCRzZWNvbmRhcnktY29sb3JgLiBDYWxsIHRoaXMgbWl4aW4gYmVsb3cgdGhlIEdsb2JhbCBzZWN0aW9uIG9mIHlvdXIgc2V0dGluZ3MgZmlsZSB0byBwcm9wZXJseSBtaWdyYXRlIHlvdXIgY29kZWJhc2UuXG5AbWl4aW4gYWRkLWZvdW5kYXRpb24tY29sb3JzKCkge1xuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICAgICRwcmltYXJ5LWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRwcmltYXJ5LWNvbG9yOiAjMTc3OWJhICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHNlY29uZGFyeSkge1xuICAgICRzZWNvbmRhcnktY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgc2Vjb25kYXJ5KSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc2Vjb25kYXJ5LWNvbG9yOiAjNzY3Njc2ICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHN1Y2Nlc3MpIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBzdWNjZXNzKSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogIzNhZGI3NiAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCB3YXJuaW5nKSB7XG4gICAgJHdhcm5pbmctY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgd2FybmluZykgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJHdhcm5pbmctY29sb3I6ICNmZmFlMDAgIWdsb2JhbDtcbiAgfVxuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpIHtcbiAgICAkYWxlcnQtY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRhbGVydC1jb2xvcjogI2NjNGIzNyAhZ2xvYmFsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYmFkZ2Vcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJhZGdlLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRiYWRnZS1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGluc2lkZSBiYWRnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtcGFkZGluZzogMC4zZW0gIWRlZmF1bHQ7XG5cbi8vLyBNaW5pbXVtIHdpZHRoIG9mIGEgYmFkZ2UuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtbWlud2lkdGg6IDIuMWVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1mb250LXNpemU6IDAuNnJlbSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyB0aGUgYmFzZSBzdHlsZXMgZm9yIGEgYmFkZ2UuXG5AbWl4aW4gYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogJGJhZGdlLW1pbndpZHRoO1xuICBwYWRkaW5nOiAkYmFkZ2UtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgZm9udC1zaXplOiAkYmFkZ2UtZm9udC1zaXplO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJhZGdlIHtcbiAgLmJhZGdlIHtcbiAgICBAaW5jbHVkZSBiYWRnZTtcblxuICAgIGJhY2tncm91bmQ6ICRiYWRnZS1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkYmFkZ2UtY29sb3I7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRiYWRnZS1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gICAgICAgIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRjb2xvciwgKCRiYWRnZS1jb2xvciwgJGJhZGdlLWNvbG9yLWFsdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGJyZWFkY3J1bWJzXG4vLy8vXG5cbi8vLyBNYXJnaW4gYXJvdW5kIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luIDAgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTEpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGFjdGl2ZSBicmVhZGNydW1iIGxpbmsuXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWN1cnJlbnQ6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIE9wYWNpdHkgb2YgZGlzYWJsZWQgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBicmVhZGNydW1iIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBtYWtlcyBicmVhZGNydW1iIGxpbmtzIHVwcGVyY2FzZS5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2U6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFkZHMgYSBzZXBlcmF0b3IgYmV0d2VlbiBicmVhZGNydW1iIGxpbmtzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvcjogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gSWYgaXQgZXhpc3RzICRicmVhZGNydW1icy1pdGVtLXNsYXNoIGlzIHVzZWQgdG8gYnVpbGQgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gpIHtcbiAgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zbGFzaDtcbn1cblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJyAhZGVmYXVsdDtcblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IgaW4gcnRsIG1vZGUuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW0tcnRsOiAnXFxcXCcgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBicmVhZGNydW1iIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLyBJZiBpdCBleGlzdHMgJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3IgaXMgdXNlZCB0byBidWlsZCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbi5cbkBpZiB2YXJpYWJsZS1leGlzdHMoYnJlYWRjcnVtYnMtaXRlbS1zbGFzaC1jb2xvcikge1xuICAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I6ICRicmVhZGNydW1icy1pdGVtLXNsYXNoLWNvbG9yO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLCBhbG9uZyB3aXRoIHRoZSBzdHlsZXMgZm9yIHRoZSBgPGxpPmAgYW5kIGA8YT5gIGVsZW1lbnRzIGluc2lkZSBvZiBpdC5cbkBtaXhpbiBicmVhZGNydW1icy1jb250YWluZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luOiAkYnJlYWRjcnVtYnMtbWFyZ2luO1xuICBsaXN0LXN0eWxlOiBub25lO1xuXG4gIC8vIEl0ZW0gd3JhcHBlclxuICBsaSB7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1sZWZ0fTtcblxuICAgIGZvbnQtc2l6ZTogJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplO1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgIEBpZiAkYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2Uge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICBAaWYgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yIHtcbiAgICAgIC8vIE5lZWQgdG8gZXNjYXBlIHRoZSBiYWNrc2xhc2hcbiAgICAgICRzZXBhcmF0b3I6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gJ2x0cicsICRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItaXRlbS1ydGwpO1xuXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG1hcmdpbjogMCAkYnJlYWRjcnVtYnMtaXRlbS1tYXJnaW47XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICBjb250ZW50OiAkc2VwYXJhdG9yO1xuICAgICAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRicmVhZGNydW1icy1pdGVtLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAvLyBQYWdlIGxpbmtzXG4gIGEge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJyZWFkY3J1bWJzIHtcbiAgLmJyZWFkY3J1bWJzIHtcbiAgICBAaW5jbHVkZSBicmVhZGNydW1icy1jb250YWluZXI7XG5cbiAgICAuZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjYWxsb3V0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZmFkZSB2YWx1ZSBmb3IgY2FsbG91dCBiYWNrZ3JvdW5kcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjYWxsb3V0LWJhY2tncm91bmQtZmFkZTogODUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgc3R5bGUgZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIExpc3RcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FsbG91dC1tYXJnaW46IDAgMCAxcmVtIDAgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgQ2FsbG91dCBwYWRkaW5ncy5cbi8vLyBAdHlwZSBNYXBcbiRjYWxsb3V0LXNpemVzOiAoXG4gIHNtYWxsOiAwLjVyZW0sXG4gIGRlZmF1bHQ6IDFyZW0sXG4gIGxhcmdlOiAzcmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBjb2xvciBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGNhbGxvdXRzLCBpZiB0aGUgY2FsbG91dCBoYXMgYSBkYXJrIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3ItYWx0OiAkYm9keS1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgcmFkaXVzIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhbGxvdXQtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEFtb3VudCB0byB0aW50IGxpbmtzIHVzZWQgd2l0aGluIGNvbG9yZWQgcGFuZWxzLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbi8vLyBAdHlwZSBOdW1iZXIgfCBCb29sZWFuXG4kY2FsbG91dC1saW5rLXRpbnQ6IDMwJSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzaWMgc3R5bGVzIGZvciBhIGNhbGxvdXQsIGluY2x1ZGluZyBwYWRkaW5nIGFuZCBtYXJnaW4uXG5AbWl4aW4gY2FsbG91dC1iYXNlKCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJGNhbGxvdXQtbWFyZ2luO1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRjYWxsb3V0LXNpemVzLCBkZWZhdWx0KTtcblxuICBib3JkZXI6ICRjYWxsb3V0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGNhbGxvdXQtcmFkaXVzO1xuXG4gIC8vIFJlc3BlY3QgdGhlIHBhZGRpbmcsIGZvb2wuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgcXVpY2sgc3R5bGVzIGZvciBhIGNhbGxvdXQgdXNpbmcgYSBzaW5nbGUgY29sb3IgYXMgYSBiYXNlbGluZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRjYWxsb3V0LWJhY2tncm91bmRdIC0gQ29sb3IgdG8gdXNlLlxuQG1peGluIGNhbGxvdXQtc3R5bGUoJGNvbG9yOiAkY2FsbG91dC1iYWNrZ3JvdW5kKSB7XG4gICRiYWNrZ3JvdW5kOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRjYWxsb3V0LWJhY2tncm91bmQtZmFkZSk7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGNhbGxvdXQtZm9udC1jb2xvciwgJGNhbGxvdXQtZm9udC1jb2xvci1hbHQpKTtcbn1cblxuQG1peGluIGNhbGxvdXQtc2l6ZSgkcGFkZGluZykge1xuICBwYWRkaW5nLXRvcDogJHBhZGRpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmc7XG4gIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG59XG5cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhbGxvdXQuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskY2FsbG91dC1iYWNrZ3JvdW5kXSAtIENvbG9yIHRvIHVzZS5cbkBtaXhpbiBjYWxsb3V0KCRjb2xvcjogJGNhbGxvdXQtYmFja2dyb3VuZCkge1xuICBAaW5jbHVkZSBjYWxsb3V0LWJhc2U7XG4gIEBpbmNsdWRlIGNhbGxvdXQtc3R5bGUoJGNvbG9yKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FsbG91dCB7XG4gIC5jYWxsb3V0IHtcbiAgICBAaW5jbHVkZSBjYWxsb3V0O1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXN0eWxlKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluIG1hcC1yZW1vdmUoJGNhbGxvdXQtc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXNpemUoJHBhZGRpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNhcmRcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYXJkcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlLlxuLy8vIEB0eXBlIExpc3RcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjYXJkIHNoYWRvdy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FyZC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTGlzdFxuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4uXG4vLy8gQHR5cGUgbnVtYmVyXG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgY29udGFpbmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgLSBmb250IGNvbG9yIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIC0gQm90dG9tIG1hcmdpbiBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRib3JkZXIgLSBCb3JkZXIgYXJvdW5kIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TGlzdH0gJHJhZGl1cyAtIGJvcmRlciByYWRpdXMgb2YgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtMaXN0fSAkc2hhZG93IC0gYm94IHNoYWRvdyBvZiB0aGUgY2FyZC5cbkBtaXhpbiBjYXJkLWNvbnRhaW5lcihcbiAgJGJhY2tncm91bmQ6ICRjYXJkLWJhY2tncm91bmQsXG4gICRjb2xvcjogJGNhcmQtZm9udC1jb2xvcixcbiAgJG1hcmdpbjogJGNhcmQtbWFyZ2luLWJvdHRvbSxcbiAgJGJvcmRlcjogJGNhcmQtYm9yZGVyLFxuICAkcmFkaXVzOiAkY2FyZC1ib3JkZXItcmFkaXVzLFxuICAkc2hhZG93OiAkY2FyZC1zaGFkb3dcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG5cbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcblxuICBib3JkZXI6ICRib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG5cbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgZGl2aWRlci5cbkBtaXhpbiBjYXJkLWRpdmlkZXIoXG4gICRiYWNrZ3JvdW5kOiAkY2FyZC1kaXZpZGVyLWJhY2tncm91bmQsXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAwIDEgYXV0bztcbiAgfVxuXG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgc2VjdGlvbi5cbkBtaXhpbiBjYXJkLXNlY3Rpb24oXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gIH1cblxuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FyZCB7XG4gIC5jYXJkIHtcbiAgICBAaW5jbHVkZSBjYXJkLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC5jYXJkLWRpdmlkZXIge1xuICAgIEBpbmNsdWRlIGNhcmQtZGl2aWRlcjtcbiAgfVxuXG4gIC5jYXJkLXNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIGNhcmQtc2VjdGlvbjtcbiAgfVxuXG4gIC8vIEZvciBJRSAxMSAtIEZsZXhidWdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncy9pc3N1ZXMvNzVcbiAgLmNhcmQtaW1hZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duXG4vLy8vXG5cbi8vLyBQYWRkaW5nIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWZvbnQtc2l6ZTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFdpZHRoIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bi13aWR0aDogMzAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgZHJvcGRvd24gcGFuZXMuIEVhY2ggc2l6ZSBpcyBhIENTUyBjbGFzcyB5b3UgY2FuIGFwcGx5LlxuLy8vIEB0eXBlIE1hcFxuJGRyb3Bkb3duLXNpemVzOiAoXG4gIHRpbnk6IDEwMHB4LFxuICBzbWFsbDogMjAwcHgsXG4gIGxhcmdlOiA0MDBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgYSBiYXNpYyBkcm9wZG93bi5cbkBtaXhpbiBkcm9wZG93bi1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgd2lkdGg6ICRkcm9wZG93bi13aWR0aDtcbiAgcGFkZGluZzogJGRyb3Bkb3duLXBhZGRpbmc7XG5cbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBib3JkZXI6ICRkcm9wZG93bi1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRkcm9wZG93bi1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1iYWNrZ3JvdW5kO1xuXG4gIGZvbnQtc2l6ZTogJGRyb3Bkb3duLWZvbnQtc2l6ZTtcblxuXG4gIC8vIEFsbG93IGFuIGludGVybWl0dGVudCBzdGF0ZSB0byBkbyBwb3NpdGlvbmluZyBiZWZvcmUgbWFraW5nIHZpc2libGUuXG4gICYuaXMtb3BlbmluZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZHJvcGRvd24ge1xuICAuZHJvcGRvd24tcGFuZSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tY29udGFpbmVyO1xuICB9XG5cbiAgQGVhY2ggJG5hbWUsICRzaXplIGluICRkcm9wZG93bi1zaXplcyB7XG4gICAgLmRyb3Bkb3duLXBhbmUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIHdpZHRoOiAkc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBwYWdpbmF0aW9uXG4vLy8vXG5cbi8vLyBGb250IHNpemUgb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIG9mIHRoZSBwYWdpbmF0aW9uIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGluc2lkZSBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKSAhZGVmYXVsdDtcblxuLy8vIFJpZ2h0IG1hcmdpbiB0byBzZXBhcmF0ZSBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1zcGFjaW5nOiByZW0tY2FsYygxKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtcyBvbiBob3Zlci5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtIGZvciB0aGUgY3VycmVudCBwYWdlLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtY3VycmVudDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBwYWdpbmF0aW9uIGl0ZW0gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhIGRpc2FibGVkIHBhZ2luYXRpb24gaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGVsbGlwc2lzIGluIGEgcGFnaW5hdGlvbiBtZW51LlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1lbGxpcHNpcy1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gSWYgYGZhbHNlYCwgZG9uJ3QgZGlzcGxheSBwYWdlIG51bWJlciBsaW5rcyBvbiBtb2JpbGUsIG9ubHkgbmV4dC9wcmV2aW91cyBsaW5rc1xuLy8vIGFuZCBvcHRpb25hbGx5IGN1cnJlbnQgcGFnZSBudW1iZXIuXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIG51bWJlciBvbiBtb2JpbGUgZXZlbiBpZiBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zYCBpcyBzZXQgdG8gYGZhbHNlYC5cbi8vLyBUaGlzIHBhcmFtZXRlciB3aWxsIG9ubHkgb3ZlcnJpZGUgdGhlIHZpc2liaWxpdHkgc2V0dGluZyBvZiB0aGUgY3VycmVudCBpdGVtIGZvciBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZTtgLFxuLy8vIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgY3VycmVudCBwYWdlIG51bWJlciB2aXNpYmlsaXR5IHdoZW4gYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtc2AgaXMgc2V0IHRvIGB0cnVlYC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYXJyb3dzIGFyZSBhZGRlZCB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbGlua3Mgb2YgcGFnaW5hdGlvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgcHJldmlvdXMgYXJyb3cgd2hlbiBgJHBhZ2luYXRpb24tYXJyb3dzYCBpcyBgdHJ1ZWBcbi8vLyBAdHlwZSBTdHJpbmdcbiRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzOiAnXFwwMEFCJyAhZGVmYXVsdDtcblxuLy8vIENvbnRlbnQgZm9yIHRoZSBuZXh0IGFycm93IHdoZW4gYCRwYWdpbmF0aW9uLWFycm93c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFnaW5hdGlvbi1hcnJvdy1uZXh0OiAnXFwwMEJCJyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHBhZ2luYXRpb24gY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIGEgYDx1bD5gLlxuQG1peGluIHBhZ2luYXRpb24tY29udGFpbmVyIChcbiAgJG1hcmdpbi1ib3R0b206ICRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b20sXG4gICRmb250LXNpemU6ICRwYWdpbmF0aW9uLWZvbnQtc2l6ZSxcbiAgJHNwYWNpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZyxcbiAgJHJhZGl1czogJHBhZ2luYXRpb24tcmFkaXVzLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWl0ZW0tY29sb3IsXG4gICRwYWRkaW5nOiAkcGFnaW5hdGlvbi1pdGVtLXBhZGRpbmcsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXJcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbi1ib3R0b207XG5cbiAgLy8gTGlzdCBpdGVtXG4gIGxpIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG5cbiAgICBAaWYgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cblxuICAgICAgQGlmICRwYWdpbmF0aW9uLW1vYmlsZS1jdXJyZW50LWl0ZW0ge1xuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBsaW5rc1xuICBhLFxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBpdGVtLiBBcHBseSB0aGlzIHRvIGFuIGA8YT5gLlxuQG1peGluIHBhZ2luYXRpb24taXRlbS1jdXJyZW50IChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtY3VycmVudDogJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQsXG4gICRjb2xvci1jdXJyZW50OiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnRcbikge1xuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtY3VycmVudDtcbiAgY29sb3I6ICRjb2xvci1jdXJyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gYW4gYDxhPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1pdGVtLWRpc2FibGVkIChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGNvbG9yOiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWRpc2FibGVkXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBlbGxpcHNpcyBmb3IgdXNlIGluIGEgcGFnaW5hdGlvbiBsaXN0LlxuQG1peGluIHBhZ2luYXRpb24tZWxsaXBzaXMgKFxuICAkcGFkZGluZzogJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbnRlbnQ6ICdcXDIwMjYnO1xuICBjb2xvcjogJGNvbG9yO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wYWdpbmF0aW9uIHtcbiAgLnBhZ2luYXRpb24ge1xuICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tY29udGFpbmVyO1xuXG4gICAgLmN1cnJlbnQge1xuICAgICAgQGluY2x1ZGUgcGFnaW5hdGlvbi1pdGVtLWN1cnJlbnQ7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24taXRlbS1kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tZWxsaXBzaXM7XG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWdpbmF0aW9uLWFycm93cyB7XG4gICAgLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuICAgIC5wYWdpbmF0aW9uLXByZXZpb3VzLmRpc2FibGVkOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDAuNXJlbTtcbiAgICAgIGNvbnRlbnQ6ICRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzO1xuICAgIH1cblxuICAgIC5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4gICAgLnBhZ2luYXRpb24tbmV4dC5kaXNhYmxlZDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMC41cmVtO1xuICAgICAgY29udGVudDogJHBhZ2luYXRpb24tYXJyb3ctbmV4dDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0b29sdGlwXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGN1cnNvciBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoYXMtdGlwLWN1cnNvcjogaGVscCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgb2YgdGhlIGRlZmluZWQgdGVybS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGJvdHRvbSBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIExpc3RcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIHRvb2x0aXAgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgdG9vbHRpcCBmb250LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9vbHRpcC1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIHRoZSB0b29sdGlwIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXggd2lkdGggZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIG9mIHRoZSB0b29sdGlwIHRleHQuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCBhIHNtYWxsZXIgZm9udCBzaXplIHRoYW4gdGhlIGJvZHkgY29weS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIHdpZHRoIGZvciB0b29sdGlwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIGhlaWdodCBmb3IgdG9vbHRpcHMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvb2x0aXAgd29yZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuQG1peGluIGhhcy10aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBib3JkZXItYm90dG9tOiAkaGFzLXRpcC1ib3JkZXItYm90dG9tO1xuICBmb250LXdlaWdodDogJGhhcy10aXAtZm9udC13ZWlnaHQ7XG4gIGN1cnNvcjogJGhhcy10aXAtY3Vyc29yO1xufVxuXG5AbWl4aW4gdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDEwMCUgKyAjeyR0b29sdGlwLXBpcC1oZWlnaHR9KTtcbiAgei1pbmRleDogMTIwMDtcblxuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogJHRvb2x0aXAtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJhY2tncm91bmQtY29sb3I7XG4gIGZvbnQtc2l6ZTogJHRvb2x0aXAtZm9udC1zaXplO1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAmLmJvdHRvbSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHVwKTtcbiAgICAgIGJvdHRvbTogMTAwJTtcbiAgICB9XG5cbiAgICAmLmFsaWduLWNlbnRlcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnRvcCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGRvd24pO1xuICAgICAgdG9wOiAxMDAlO1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgIH1cblxuICAgICYuYWxpZ24tY2VudGVyOjpiZWZvcmUge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHJpZ2h0KTtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnJpZ2h0IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCR0b29sdGlwLXBpcC13aWR0aCwgJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgbGVmdCk7XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXRvcDo6YmVmb3JlIHtcbiAgICBib3R0b206IGF1dG87XG4gICAgdG9wOiAxMCU7XG4gIH1cblxuICAmLmFsaWduLWJvdHRvbTo6YmVmb3JlIHtcbiAgICBib3R0b206IDEwJTtcbiAgICB0b3A6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLWxlZnQ6OmJlZm9yZSB7XG4gICAgbGVmdDogMTAlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodDo6YmVmb3JlIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAxMCU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9vbHRpcCB7XG4gIC5oYXMtdGlwIHtcbiAgICBAaW5jbHVkZSBoYXMtdGlwO1xuICB9XG5cbiAgLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIHRvb2x0aXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb25cbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY2NvcmRpb24gZ3JvdXAuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBhZGRzIHBsdXMgYW5kIG1pbnVzIGljb25zIHRvIHRoZSBzaWRlIG9mIGVhY2ggYWNjb3JkaW9uIHRpdGxlLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQ29udGVudCBmb3IgdGhlIHBsdXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLXBsdXMtY29udGVudDogJ1xcMDAyQicgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgbWludXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ6ICdcXDIwMTMnICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIGFjY29yZGlvbiB0aXRsZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIGZvciBpdGVtcyBpbiBhIE1lbnUuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGl0ZW1zIGluIGEgTWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIGFuIGFjY29yZGlvbiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24taXRlbS1wYWRkaW5nOiAxLjI1cmVtIDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1jb250ZW50LWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGFuIGFjY29yZGlvbiBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gdGhlIHNhbWUgZWxlbWVudCB0aGF0IGdldHMgYGRhdGEtYWNjb3JkaW9uYC5cbkBtaXhpbiBhY2NvcmRpb24tY29udGFpbmVyIChcbiAgJGJhY2tncm91bmQ6ICRhY2NvcmRpb24tYmFja2dyb3VuZFxuKSB7XG4gIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgJltkaXNhYmxlZF0ge1xuICAgIC5hY2NvcmRpb24tdGl0bGUge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWNjb3JkaW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gdGhlIGxpc3QgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHVsLlxuQG1peGluIGFjY29yZGlvbi1pdGVtIHtcbiAgJjpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgJGdsb2JhbC1yYWRpdXMgMCAwO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAkZ2xvYmFsLXJhZGl1cyAkZ2xvYmFsLXJhZGl1cztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiBhbiBhY2NvcmRpb24gaXRlbS4gQXBwbHkgdGhpcyB0byB0aGUgbGluayB3aXRoaW4gYW4gYWNjb3JkaW9uIGl0ZW0uXG5AbWl4aW4gYWNjb3JkaW9uLXRpdGxlIChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24taXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkYWNjb3JkaW9uLWl0ZW0tY29sb3IsXG4gICRib3JkZXI6ICRhY2NvcmRpb24tY29udGVudC1ib3JkZXIsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuXG4gIGJvcmRlcjogJGJvcmRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkOm5vdCguaXMtYWN0aXZlKSA+ICYge1xuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwICRnbG9iYWwtcmFkaXVzICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtaG92ZXI7XG4gIH1cblxuICBAaWYgJGFjY29yZGlvbi1wbHVzbWludXMge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAgICAgY29udGVudDogJGFjY29yZGlvbi1wbHVzLWNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLmlzLWFjdGl2ZSA+ICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAkYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYWNjb3JkaW9uIGNvbnRlbnQuIEFwcGx5IHRoaXMgdG8gdGhlIGNvbnRlbnQgcGFuZSBiZWxvdyBhbiBhY2NvcmRpb24gaXRlbSdzIHRpdGxlLlxuQG1peGluIGFjY29yZGlvbi1jb250ZW50IChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nLFxuICAkYm9yZGVyOiAkYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyLFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJGFjY29yZGlvbi1jb250ZW50LWNvbG9yXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgYm9yZGVyOiAkYm9yZGVyO1xuICBib3JkZXItYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcblxuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkID4gJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbiB7XG4gIC5hY2NvcmRpb24ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1jb250YWluZXI7XG4gIH1cblxuICAuYWNjb3JkaW9uLWl0ZW0ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1pdGVtO1xuICB9XG5cbiAgLmFjY29yZGlvbi10aXRsZSB7XG4gICAgQGluY2x1ZGUgYWNjb3JkaW9uLXRpdGxlO1xuICB9XG5cbiAgLmFjY29yZGlvbi1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tY29udGVudDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG1lZGlhLW9iamVjdFxuLy8vL1xuXG4vLy8gQm90dG9tIG1hcmdpbiBvZiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIExlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgb24gc2VjdGlvbnMgd2l0aGluIGEgbWVkaWEgb2JqZWN0LlxuLy8vIEB0eXBlIE51bWJlclxuJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gV2lkdGggb2YgaW1hZ2VzIHdpdGhpbiBhIG1lZGlhIG9iamVjdCwgd2hlbiB0aGUgb2JqZWN0IGlzIHN0YWNrZWQgdmVydGljYWxseS4gU2V0IHRvICdhdXRvJyB0byB1c2UgdGhlIGltYWdlJ3MgbmF0dXJhbCB3aWR0aC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbWVkaWEgb2JqZWN0IGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaWYoJGdsb2JhbC1mbGV4Ym94LCBmbGV4LCBibG9jayk7XG4gIG1hcmdpbi1ib3R0b206ICRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAmLnN0YWNrLWZvci0jeyQtemYtemVyby1icmVha3BvaW50fSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRpbmcgWyRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmddIC0gUGFkZGluZyBiZXR3ZWVuIHNlY3Rpb25zLlxuQG1peGluIG1lZGlhLW9iamVjdC1zZWN0aW9uKCRwYWRkaW5nOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLSN7JGdsb2JhbC1yaWdodH06ICRwYWRkaW5nO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkOm5vdCg6bnRoLWNoaWxkKDIpKSB7XG4gICAgcGFkZGluZy0jeyRnbG9iYWwtbGVmdH06ICRwYWRkaW5nO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5zdGFjay1mb3ItI3skLXpmLXplcm8tYnJlYWtwb2ludH0gJiB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkLXpmLXplcm8tYnJlYWtwb2ludCBvbmx5KSB7XG4gICAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgJi5tYWluLXNlY3Rpb24ge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICYubWlkZGxlIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJi5ib3R0b20ge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRvIHN0YWNrIHNlY3Rpb25zIG9mIGEgbWVkaWEgb2JqZWN0LiBBcHBseSB0aGlzIHRvIHRoZSBzZWN0aW9uIGVsZW1lbnRzLCBub3QgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3Qtc3RhY2sge1xuICBwYWRkaW5nOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZztcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBpbWcge1xuICAgIHdpZHRoOiAkbWVkaWFvYmplY3QtaW1hZ2Utd2lkdGgtc3RhY2tlZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1tZWRpYS1vYmplY3Qge1xuICAubWVkaWEtb2JqZWN0IHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3QtY29udGFpbmVyO1xuICB9XG5cbiAgLm1lZGlhLW9iamVjdC1zZWN0aW9uIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc2VjdGlvbjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG9yYml0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBhY3RpdmUgY29sb3IgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlhbWV0ZXIgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtZGlhbWV0ZXI6IDEuMnJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbWFyZ2luIGJldHdlZW4gT3JiaXQncyBidWxsZXRzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWJ1bGxldC1tYXJnaW46IDAuMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBzbGlkZSByZWdpb24gZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDogMC44cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIGZyb20gT3JiaXQncyBidWxsZXRzIHRvIHdoYXRldmVyIGNvbnRlbnQgbWF5IGx1cmsgYmVsb3cgaXQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC41KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjb250cm9scyB3aGVuIGhvdmVyZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGZvciBPcmJpdCdzIGNvbnRyb2xzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgei1pbmRleCBmb3IgT3JiaXQncyBjb250cm9scy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTAgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIG91dGVyIE9yYml0IHdyYXBwZXIuIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5uZXIgT3JiaXQgc2xpZGUgY29udGFpbmVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY29udGFpbmVyYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDsgLy8gUHJldmVudCBGT1VDIGJ5IG5vdCBzaG93aW5nIHVudGlsIEpTIHNldHMgaGVpZ2h0XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5kaXZpZHVhbCBzbGlkZXMgb2YgYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtc2xpZGVgIGNsYXNzLlxuQG1peGluIG9yYml0LXNsaWRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLm5vLW1vdGlvbnVpIHtcbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gb3JiaXQtZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc2xpZGUgY29udGFpbmluZyBhbiBpbWFnZS4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWltYWdlYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBvcmJpdCBzbGlkZSBjYXB0aW9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY2FwdGlvbmAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogJG9yYml0LWNhcHRpb24tcGFkZGluZztcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kO1xuICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kKTtcbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMgaW4gYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBgLm9yYml0LW5leHRgIGFuZCBgLm9yYml0LXByZXZpb3VzYCBjbGFzc2VzIGluIHRoZSBkZWZhdWx0IENTUy5cbkBtaXhpbiBvcmJpdC1jb250cm9sIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBAaW5jbHVkZSB2ZXJ0aWNhbC1jZW50ZXI7XG4gIHotaW5kZXg6ICRvcmJpdC1jb250cm9sLXppbmRleDtcbiAgcGFkZGluZzogJG9yYml0LWNvbnRyb2wtcGFkZGluZztcbiAgY29sb3I6ICR3aGl0ZTtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWNvbnRyb2wtYmFja2dyb3VuZC1ob3ZlcjtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1wcmV2aW91c2AgY2xhc3MuXG5AbWl4aW4gb3JiaXQtcHJldmlvdXMge1xuICAjeyRnbG9iYWwtbGVmdH06IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IG5leHQgYnV0dG9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtbmV4dGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtbmV4dCB7XG4gICN7JGdsb2JhbC1sZWZ0fTogYXV0bztcbiAgI3skZ2xvYmFsLXJpZ2h0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNvbnRhaW5lciBvZiBPcmJpdCBidWxsZXRzLiAvLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1idWxsZXRzYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1idWxsZXRzIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDtcbiAgbWFyZ2luLWJvdHRvbTogJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgYnV0dG9uIHtcbiAgICB3aWR0aDogJG9yYml0LWJ1bGxldC1kaWFtZXRlcjtcbiAgICBoZWlnaHQ6ICRvcmJpdC1idWxsZXQtZGlhbWV0ZXI7XG4gICAgbWFyZ2luOiAkb3JiaXQtYnVsbGV0LW1hcmdpbjtcblxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU7XG4gICAgfVxuXG4gICAgJi5pcy1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tb3JiaXQge1xuICAub3JiaXQge1xuICAgIEBpbmNsdWRlIG9yYml0LXdyYXBwZXI7XG4gIH1cblxuICAub3JiaXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jb250YWluZXI7XG4gIH1cblxuICAub3JiaXQtc2xpZGUge1xuICAgIEBpbmNsdWRlIG9yYml0LXNsaWRlO1xuICB9XG5cbiAgLm9yYml0LWZpZ3VyZSB7XG4gICAgQGluY2x1ZGUgb3JiaXQtZmlndXJlO1xuICB9XG5cbiAgLm9yYml0LWltYWdlIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1pbWFnZTtcbiAgfVxuXG4gIC5vcmJpdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jYXB0aW9uO1xuICB9XG5cbiAgJW9yYml0LWNvbnRyb2wge1xuICAgIEBpbmNsdWRlIG9yYml0LWNvbnRyb2w7XG4gIH1cblxuICAub3JiaXQtcHJldmlvdXMge1xuICAgIEBleHRlbmQgJW9yYml0LWNvbnRyb2w7XG4gICAgQGluY2x1ZGUgb3JiaXQtcHJldmlvdXM7XG4gIH1cblxuICAub3JiaXQtbmV4dCB7XG4gICAgQGV4dGVuZCAlb3JiaXQtY29udHJvbDtcbiAgICBAaW5jbHVkZSBvcmJpdC1uZXh0O1xuICB9XG5cbiAgLm9yYml0LWJ1bGxldHMge1xuICAgIEBpbmNsdWRlIG9yYml0LWJ1bGxldHM7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCByZXNwb25zaXZlLWVtYmVkXG4vLy8vXG5cbi8vLyBNYXJnaW4gYmVsb3cgYSByZXNwb25zaXZlIGVtYmVkIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEFzcGVjdCByYXRpb3MgdXNlZCB0byBkZXRlcm1pbmUgcGFkZGluZy1ib3R0b20gb2YgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXJzLlxuLy8vIEB0eXBlIE1hcFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zOiAoXG4gIGRlZmF1bHQ6IDQgYnkgMyxcbiAgd2lkZXNjcmVlbjogMTYgYnkgOSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd8TGlzdH0gJHJhdGlvIFtkZWZhdWx0XSAtIFJhdGlvIG9mIHRoZSBjb250YWluZXIuIENhbiBiZSBhIGtleSBmcm9tIHRoZSBgJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zYCBtYXAgb3IgYSBsaXN0IGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbkBtaXhpbiByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCkge1xuICBAaWYgdHlwZS1vZigkcmF0aW8pID09ICdzdHJpbmcnIHtcbiAgICAkcmF0aW86IG1hcC1nZXQoJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zLCAkcmF0aW8pO1xuICB9XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tO1xuICBwYWRkaW5nLWJvdHRvbTogcmF0aW8tdG8tcGVyY2VudGFnZSgkcmF0aW8pO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkIHtcbiAgLnJlc3BvbnNpdmUtZW1iZWQsXG4gIC5mbGV4LXZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCk7XG5cbiAgICAkcmF0aW9zOiBtYXAtcmVtb3ZlKCRyZXNwb25zaXZlLWVtYmVkLXJhdGlvcyxkZWZhdWx0KTtcblxuICAgIEBlYWNoICRuYW1lLCAkcmF0aW8gaW4gJHJhdGlvcyB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJhdGlvLXRvLXBlcmNlbnRhZ2UoJHJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0YWJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBvZiB0aGUgdGFiIGJhci5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGNvbG9yIG9mIHRhYiBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEFjdGl2ZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kLWFjdGl2ZTogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBBY3RpdmUgZm9udCBjb2xvciBvZiB0YWIgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIHRhYiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgaXRlbXMgaW4gYSBNZW51LlxuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBvZiBhIHRhYiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlclxuJHRhYi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1ib3JkZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byBhIGA8dWw+YC5cbkBtaXhpbiB0YWJzLWNvbnRhaW5lciAoXG4gICRtYXJnaW46ICR0YWItbWFyZ2luLFxuICAkYmFja2dyb3VuZDogJHRhYi1iYWNrZ3JvdW5kLFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbjogJG1hcmdpbjtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRhaW5lciB0byBoYXZlIHZlcnRpY2FsIHRhYnMuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGFpbmVyKClgLlxuQG1peGluIHRhYnMtY29udGFpbmVyLXZlcnRpY2FsIHtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgbGlua3Mgd2l0aGluIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byB0aGUgYDxsaT5gIGVsZW1lbnRzIGluc2lkZSBhIHRhYiBjb250YWluZXIuXG5AbWl4aW4gdGFicy10aXRsZSAoXG4gICRwYWRkaW5nOiAkdGFiLWl0ZW0tcGFkZGluZyxcbiAgJGZvbnQtc2l6ZTogJHRhYi1pdGVtLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkdGFiLWNvbG9yLFxuICAkY29sb3ItYWN0aXZlOiAkdGFiLWFjdGl2ZS1jb2xvcixcbiAgJGJhY2tncm91bmQtaG92ZXI6ICR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkYmFja2dyb3VuZC1hY3RpdmU6ICR0YWItYmFja2dyb3VuZC1hY3RpdmVcbikge1xuICBmbG9hdDogI3skZ2xvYmFsLWxlZnR9O1xuXG4gID4gYSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGNvbG9yO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZC1ob3ZlcjtcbiAgICAgIGNvbG9yOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6IC0xNCUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMsXG4gICAgJlthcmlhLXNlbGVjdGVkPSd0cnVlJ10ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtYWN0aXZlO1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgdGhhdCBzdXJyb3VuZHMgYSB0YWIgZ3JvdXAncyBjb250ZW50IHBhbmVzLlxuQG1peGluIHRhYnMtY29udGVudCAoXG4gICRiYWNrZ3JvdW5kOiAkdGFiLWNvbnRlbnQtYmFja2dyb3VuZCxcbiAgJGNvbG9yOiAkdGFiLWNvbnRlbnQtY29sb3IsXG4gICRib3JkZXItY29sb3I6ICR0YWItY29udGVudC1ib3JkZXJcbikge1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBib3JkZXItdG9wOiAwO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRjb2xvcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRlbnQgY29udGFpbmVyIHRvIGhhdmUgYSB2ZXJ0aWNhbCBzdHlsZSwgYnkgc2hpZnRpbmcgdGhlIGJvcmRlciBhcm91bmQuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGVudCgpYC5cbkBtaXhpbiB0YWJzLWNvbnRlbnQtdmVydGljYWwgKFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBpbmRpdmlkdWFsIHRhYiBjb250ZW50IHBhbmVsIHdpdGhpbiB0aGUgdGFiIGNvbnRlbnQgY29udGFpbmVyLlxuQG1peGluIHRhYnMtcGFuZWwgKFxuICAkcGFkZGluZzogJHRhYi1jb250ZW50LXBhZGRpbmdcbikge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGFicyB7XG4gIC50YWJzIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsXG4gIC50YWJzLnZlcnRpY2FsIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lci12ZXJ0aWNhbDtcbiAgfVxuXG4gIC8vIFNpbXBsZVxuICAudGFicy5zaW1wbGUge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmltYXJ5IGNvbG9yXG4gIC50YWJzLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuXG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJHByaW1hcnktY29sb3IpO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCRwcmltYXJ5LWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudGFicy10aXRsZSB7XG4gICAgQGluY2x1ZGUgdGFicy10aXRsZTtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudDtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQudmVydGljYWwge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudC12ZXJ0aWNhbDtcbiAgfVxuXG4gIC50YWJzLXBhbmVsIHtcbiAgICBAaW5jbHVkZSB0YWJzLXBhbmVsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGh1bWJuYWlsXG4vLy8vXG5cbi8vLyBCb3JkZXIgYXJvdW5kIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kdGh1bWJuYWlsLWJvcmRlcjogNHB4IHNvbGlkICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGh1bWJuYWlsLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyB1bmRlciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIFNoYWRvd1xuJHRodW1ibmFpbC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKCRibGFjaywgMC4yKSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgdW5kZXIgdGh1bWJuYWlsIGltYWdlcy5cbi8vLyBAdHlwZSBTaGFkb3dcbiR0aHVtYm5haWwtc2hhZG93LWhvdmVyOiAwIDAgNnB4IDFweCByZ2JhKCRwcmltYXJ5LWNvbG9yLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wcnRpZXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHRodW1ibmFpbC10cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGh1bWJuYWlsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHRodW1ibmFpbCBzdHlsZXMgdG8gYW4gZWxlbWVudC5cbkBtaXhpbiB0aHVtYm5haWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tO1xuXG4gIGJvcmRlcjogJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtcmFkaXVzO1xuICBib3gtc2hhZG93OiAkdGh1bWJuYWlsLXNoYWRvdztcblxuICBsaW5lLWhlaWdodDogMDtcbn1cblxuQG1peGluIHRodW1ibmFpbC1saW5rIHtcbiAgdHJhbnNpdGlvbjogJHRodW1ibmFpbC10cmFuc2l0aW9uO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6ICR0aHVtYm5haWwtc2hhZG93LWhvdmVyO1xuICB9XG5cbiAgaW1hZ2Uge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGh1bWJuYWlsIHtcbiAgLnRodW1ibmFpbCB7XG4gICAgQGluY2x1ZGUgdGh1bWJuYWlsO1xuICB9XG5cbiAgYS50aHVtYm5haWwge1xuICAgIEBpbmNsdWRlIHRodW1ibmFpbC1saW5rO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbWVudVxuLy8vL1xuXG4vLy8gTWFyZ2luIG9mIGEgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIExlZnQtaGFuZCBtYXJnaW4gb2YgYSBuZXN0ZWQgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3IgaXRlbXMgaW4gYSBwaWxsIG1lbnUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIG1hcmdpbiBmb3IgaXRlbXMgaW4gYSBzaW1wbGUgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRtZW51LWl0ZW0tY29sb3ItYWN0aXZlOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGl2ZSB0ZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmU6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gYWN0aXZlIG1lbnUgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBiZXR3ZWVuIGFuIGljb24gYW5kIHRleHQgaW4gYSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pY29uLXNwYWNpbmc6IDAuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IHN0YXRlLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgYWN0aXZlYCB3aXRoIGBpcy1hY3RpdmVgLiBcbi8vLyBCdXQgcGxlYXNlIG5vdGUgdGhhdCBgYWN0aXZlYCB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgdmVyc2lvbnMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IGNlbnRlcmVkLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgLm1lbnUtY2VudGVyZWQgPiAubWVudWAgd2l0aCBgLm1lbnUuYWxpZ24tY2VudGVyYC4gXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgYG1lbnUtY2VudGVyZWRgIHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHVzaW5nIGBpY29uLSpgIGNsYXNzZXMgd2l0aG91dCBgLmljb25zYCBjbGFzc2VzXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgdGhpcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1pY29ucy1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIENyZWF0ZXMgdGhlIGJhc2Ugc3R5bGVzIGZvciBhIE1lbnUuXG5AbWl4aW4gbWVudS1iYXNlIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICBsaSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICB9XG5cbiAgYSxcbiAgLmJ1dHRvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LWl0ZW1zLXBhZGRpbmc7XG4gIH1cblxuICAvLyBSZXNldCBzdHlsZXMgb2YgaW5uZXIgZWxlbWVudHNcbiAgaW5wdXQsXG4gIHNlbGVjdCxcbiAgYSxcbiAgYnV0dG9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG4vLy8gRXhwYW5kcyB0aGUgaXRlbXMgb2YgYSBNZW51LCBzbyBlYWNoIGl0ZW0gaXMgdGhlIHNhbWUgd2lkdGguXG5AbWl4aW4gbWVudS1leHBhbmQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBsaSB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWxpZ24gbWVudSBpdGVtcy5cbkBtaXhpbiBtZW51LWFsaWduKCRhbGlnbm1lbnQpIHtcbiAgQGlmICRhbGlnbm1lbnQgPT0gbGVmdCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGFsaWdubWVudCA9PSByaWdodCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLnZlcnRpY2FsIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcblxuICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICB0ZXh0LWFsaWduOiAkZ2xvYmFsLWxlZnQ7XG4gICAgICB9XG5cbiAgICAgICYudmVydGljYWwge1xuICAgICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkYWxpZ25tZW50ID09IGNlbnRlciB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgIC5zdWJtZW51IGxpIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGRpcmVjdGlvbiBvZiBhIE1lbnUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFtob3Jpem9udGFsXSAtIERpcmVjdGlvbiBvZiB0aGUgTWVudS4gQ2FuIGJlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLlxuQG1peGluIG1lbnUtZGlyZWN0aW9uKCRkaXI6IGhvcml6b250YWwpIHtcbiAgQGlmICRkaXIgPT0gaG9yaXpvbnRhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBtZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2ltcGxlIE1lbnUsIHdoaWNoIGhhcyBubyBwYWRkaW5nIG9yIGhvdmVyIHN0YXRlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpciBbJGdsb2JhbC1sZWZ0XSAtIERpcmVjdGlvbiBvZiB0aGUgbWVudS4gVGhpcyBlZmZlY3RzIHRoZSBzaWRlIG9mIHRoZSBgPGxpPmAgdGhhdCByZWNlaXZlcyB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIFskbWVudS1zaW1wbGUtbWFyZ2luXSAtIFRoZSBtYXJnaW4gdG8gYXBwbHkgdG8gZWFjaCBgPGxpPmAuXG5AbWl4aW4gbWVudS1zaW1wbGUoJGRpcjogJGdsb2JhbC1sZWZ0LCAkbWFyZ2luOiAkbWVudS1zaW1wbGUtbWFyZ2luKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICBsaSArIGxpIHtcbiAgICBtYXJnaW4tI3skZGlyfTogJG1hcmdpbjtcbiAgfVxuXG4gIGEge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG5lc3RlZCBNZW51LCBieSBhZGRpbmcgYG1hcmdpbi1sZWZ0YCB0byB0aGUgbWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkbWFyZ2luIFskbWVudS1uZXN0ZWQtbWFyZ2luXSAtIExlbmd0aCBvZiB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG5lc3RlZC1hbGlnbm1lbnQgW2xlZnRdIC0gQWxpZ25tZW50IG9mIHRoZSBuZXN0ZWQgY2xhc3NcbkBtaXhpbiBtZW51LW5lc3RlZChcbiAgJG1hcmdpbjogJG1lbnUtbmVzdGVkLW1hcmdpbixcbiAgJG5lc3RlZC1hbGlnbm1lbnQ6IGxlZnRcbikge1xuICBAaWYgJG5lc3RlZC1hbGlnbm1lbnQgPT0gcmlnaHQge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkbWFyZ2luO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIH1cbiAgQGVsc2Uge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRtYXJnaW47XG4gIH1cblxufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGljb25zIGluIG1lbnVzLlxuQG1peGluIG1lbnUtaWNvbnMoKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGEge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIGltZyxcbiAgICBpLFxuICAgIHN2ZyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICArIHNwYW4ge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBwb3NpdGlvbiBjbGFzc2VzIGZvciBpY29ucyB3aXRoaW4gYSBtZW51LlxuQG1peGluIG1lbnUtaWNvbi1wb3NpdGlvbigkcG9zaXRpb246IGxlZnQsICRzcGFjaW5nOiAkbWVudS1pY29uLXNwYWNpbmcpIHtcbiAgQGlmICRwb3NpdGlvbiA9PSBsZWZ0IHtcbiAgICBsaSBhIHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgaW1nLFxuICAgICAgaSxcbiAgICAgIHN2ZyB7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRzcGFjaW5nO1xuXG4gICAgICAgIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgbGkgYSB7XG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG8gJHNwYWNpbmc7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBpbWcsXG4gICAgICBpLFxuICAgICAgc3ZnIHtcbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogJHNwYWNpbmcgYXV0byAwO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWVudS10ZXh0IHtcbiAgcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG5cbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuQG1peGluIG1lbnUtc3RhdGUtYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZSwgKCRtZW51LWl0ZW0tY29sb3ItYWN0aXZlLCAkbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmUpKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tbWVudSB7XG4gIC5tZW51IHtcbiAgICBAaW5jbHVkZSBtZW51LWJhc2U7XG5cbiAgICAvLyBEZWZhdWx0IG9yaWVudGF0aW9uOiBob3Jpem9udGFsXG4gICAgJiwgJi5ob3Jpem9udGFsIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIG9yaWVudGF0aW9uIG1vZGlmaWVyXG4gICAgJi52ZXJ0aWNhbCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWRpcmVjdGlvbih2ZXJ0aWNhbCk7XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBtb2RpZmllciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlXG4gICAgJi5zaW1wbGUge1xuICAgICAgQGluY2x1ZGUgbWVudS1zaW1wbGU7XG4gICAgfVxuXG4gICAgLy8gQnJlYWtwb2ludCBzcGVjaWZpYyB2ZXJzaW9uc1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoJHNtYWxsOiBmYWxzZSkge1xuICAgICAgJi4jeyQtemYtc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS12ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWV4cGFuZDtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tc2ltcGxlIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmVzdGluZ1xuICAgICYubmVzdGVkIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkO1xuICAgIH1cblxuICAgIC8vIEljb24gQmFzZSBTdHlsZXNcbiAgICAmLmljb25zIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbnM7XG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LWljb25zLWJhY2stY29tcGF0IHtcbiAgICAgICYuaWNvbi10b3AsXG4gICAgICAmLmljb24tcmlnaHQsXG4gICAgICAmLmljb24tYm90dG9tLFxuICAgICAgJi5pY29uLWxlZnQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWljb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEljb24gTGVmdFxuICAgICYuaWNvbi1sZWZ0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihsZWZ0KTtcbiAgICB9XG5cbiAgICAvLyBJY29uIFJpZ2h0XG4gICAgJi5pY29uLXJpZ2h0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihyaWdodCk7XG4gICAgfVxuXG4gICAgLy8gSWNvbiBUb3BcbiAgICAmLmljb24tdG9wIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbih0b3ApO1xuICAgIH1cblxuICAgIC8vIEljb24gQm90dG9tXG4gICAgJi5pY29uLWJvdHRvbSB7XG4gICAgICBAaW5jbHVkZSBtZW51LWljb24tcG9zaXRpb24oYm90dG9tKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAuaXMtYWN0aXZlID4gYSB7XG4gICAgICBAaW5jbHVkZSBtZW51LXN0YXRlLWFjdGl2ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LXN0YXRlLWJhY2stY29tcGF0IHtcbiAgICAgIC5hY3RpdmUgPiBhIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1zdGF0ZS1hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gbGVmdFxuICAgICYuYWxpZ24tI3skZ2xvYmFsLWxlZnR9IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24obGVmdCk7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gcmlnaHRcbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihyaWdodCk7XG5cbiAgICAgIC5uZXN0ZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkbmVzdGVkLWFsaWdubWVudDogcmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsaWduIGNlbnRlclxuICAgICYuYWxpZ24tY2VudGVyIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24oY2VudGVyKTtcbiAgICB9XG5cbiAgICAubWVudS10ZXh0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtdGV4dDtcbiAgICB9XG4gIH1cblxuICBAaWYgJG1lbnUtY2VudGVyZWQtYmFjay1jb21wYXQge1xuICAgIC5tZW51LWNlbnRlcmVkIHtcbiAgICAgID4gLm1lbnUge1xuICAgICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihjZW50ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByZXZlbnQgRk9VQyB3aGVuIHVzaW5nIHRoZSBSZXNwb25zaXZlIE1lbnUgcGx1Z2luXG4gIC5uby1qcyBbZGF0YS1yZXNwb25zaXZlLW1lbnVdIHVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCJAbWl4aW4gZm91bmRhdGlvbi1tZW51LWljb24ge1xuICAubWVudS1pY29uIHtcbiAgICBAaW5jbHVkZSBoYW1idXJnZXIoJGNvbG9yOiAkdGl0bGViYXItaWNvbi1jb2xvciwgJGNvbG9yLWhvdmVyOiAkdGl0bGViYXItaWNvbi1jb2xvci1ob3Zlcik7XG4gIH1cblxuICAubWVudS1pY29uLmRhcmsge1xuICAgIEBpbmNsdWRlIGhhbWJ1cmdlcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb24tbWVudVxuLy8vL1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IG5lc3RlZCBtYXJnaW5cbi8vLyBAdHlwZSBOdW1iZXJcbiRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBzdWJtZW51IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc6ICRhY2NvcmRpb25tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGlmIGFjY29yZGlvbiBtZW51cyBoYXZlIHRoZSBkZWZhdWx0IGFycm93IHN0eWxlcy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWNjb3JkaW9ubWVudS1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1pdGVtLWJhY2tncm91bmQ6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gYm9yZGVyLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1ib3JkZXI6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gcGFkZGluZy5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIExpc3RcbiRhY2NvcmRpb24tc3VibWVudS10b2dnbGUtYm9yZGVyOiAkYWNjb3JkaW9ubWVudS1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IHN1Ym1lbnUgdG9nZ2xlIGJhY2tncm91bmQgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDogNDBweCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgc3VibWVudSB0b2dnbGUgYmFja2dyb3VuZCBoZWlnaHQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBhcnJvdyBzaXplIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kYWNjb3JkaW9ubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbkBtaXhpbiB6Zi1hY2NvcmRpb24tbWVudS1sZWZ0LXJpZ2h0LWFycm93cyB7XG4gIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRhY2NvcmRpb25tZW51LWFycm93LXNpemUsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbWFyZ2luLXRvcDogLTEgKiAoJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgI3skZ2xvYmFsLXJpZ2h0fTogMXJlbTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLWxlZnQgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCA+IGE6OmFmdGVyIHtcbiAgICByaWdodDogMXJlbTtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodCAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbi1tZW51IHtcblxuICAuYWNjb3JkaW9uLW1lbnUge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAkYWNjb3JkaW9ubWVudS1ib3JkZXI7XG4gICAgICAgIGJvcmRlci1yaWdodDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgICBib3JkZXItbGVmdDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgfVxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBAaWYgJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kO1xuICAgICAgfVxuICAgICAgcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgYSB7XG4gICAgICBwYWRkaW5nOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkKCRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW4sIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtYXJyb3dzIHtcbiAgICAgIEBpbmNsdWRlIHpmLWFjY29yZGlvbi1tZW51LWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50W2FyaWEtZXhwYW5kZWQ9J3RydWUnXSA+IGE6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgbGkge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmhhcy1zdWJtZW51LXRvZ2dsZSA+IGEge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDtcbiAgfVxuXG4gIC8vIFN1Ym1lbnUgdG9nZ2xlXG4gIC5zdWJtZW51LXRvZ2dsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICAjeyRnbG9iYWwtcmlnaHR9OiAwO1xuXG4gICAgd2lkdGg6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuICAgIGhlaWdodDogJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtaGVpZ2h0O1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogJGFjY29yZGlvbi1zdWJtZW51LXRvZ2dsZS1ib3JkZXI7XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgYXJyb3cgdG8gdGhlIHRvZ2dsZVxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSg2cHgsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcblxuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJvdGF0ZSB0aGUgYXJyb3cgd2hlbiBtZW51IGlzIG9wZW5cbiAgLnN1Ym1lbnUtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9J3RydWUnXTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGVZKC0xKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xuICB9XG5cbiAgLnN1Ym1lbnUtdG9nZ2xlLXRleHQge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZHJpbGxkb3duXG4vLy8vXG5cbi8vLyBUcmFuc2l0aW9uIHByb3BlcnR5IHRvIHVzZSBmb3IgYW5pbWF0aW5nIG1lbnVzLlxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhciAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYXJyb3dzIHRvIGRyaWxsZG93biBpdGVtcyB3aXRoIHN1Ym1lbnVzLCBhcyB3ZWxsIGFzIHRoZSBiYWNrIGJ1dHRvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZHJpbGxkb3duLWFycm93czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgZHJpbGxkb3duIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyaWxsZG93bi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBtZW51IGl0ZW0gcGFkZGluZyBpbiB0aGUgc3VibWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nOiAkZHJpbGxkb3duLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBkcmlsbGRvd24gc3VibWVudXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJpbGxkb3duLWFycm93LXNpemUsICRkcmlsbGRvd24tYXJyb3ctY29sb3IsICRnbG9iYWwtcmlnaHQpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcmlsbGRvd24tYXJyb3ctc2l6ZTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgfVxuICB9XG5cbiAgJi5hbGlnbi1sZWZ0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgcmlnaHQpO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgbGVmdCk7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMXJlbTtcbiAgfVxuXG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyaWxsZG93bi1tZW51IHtcbiAgLy8gQXBwbGllZCB0byB0aGUgTWVudSBjb250YWluZXJcbiAgLmlzLWRyaWxsZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBsaSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmLmFuaW1hdGUtaGVpZ2h0IHtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSB0b3AgbGV2ZWwgPHVsPlxuICAuZHJpbGxkb3duIHtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRkcmlsbGRvd24tYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAvLyBBcHBsaWVkIHRvIHN1Ym1lbnUgPHVsPnNcbiAgICAuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgI3skZ2xvYmFsLWxlZnR9OiAxMDAlO1xuICAgICAgei1pbmRleDogLTE7XG5cbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogJGRyaWxsZG93bi1zdWJtZW51LWJhY2tncm91bmQ7XG4gICAgICB0cmFuc2l0aW9uOiAkZHJpbGxkb3duLXRyYW5zaXRpb247XG5cbiAgICAgICYuaXMtYWN0aXZlIHtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IGx0ciwgLTEwMCUsIDEwMCUpKTtcbiAgICAgIH1cblxuICAgICAgJi5pcy1jbG9zaW5nIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gbHRyLCAxMDAlLCAtMTAwJSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtZW51IGl0ZW0gcGFkZGluZ1xuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgQGluY2x1ZGUgbWVudS1uZXN0ZWQoJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAuZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgJGRyaWxsZG93bi1hcnJvd3Mge1xuICAgICAgQGluY2x1ZGUgemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuanMtZHJpbGxkb3duLWJhY2sgPiBhOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyaWxsZG93bi1hcnJvdy1zaXplLCAkZHJpbGxkb3duLWFycm93LWNvbG9yLCAkZ2xvYmFsLWxlZnQpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwLjc1cmVtOyAvLyBDcmVhdGVzIHNwYWNlIGJldHdlZW4gdGhlIGFycm93IGFuZCB0aGUgdGV4dFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duLW1lbnVcbi8vLy9cblxuLy8vIEVuYWJsZXMgYXJyb3dzIGZvciBpdGVtcyB3aXRoIGRyb3Bkb3duIG1lbnVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBkcm9wZG93biBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3I6ICRhbmNob3ItY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgc2l6ZSBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgcGFkZGluZyBmb3IgYWxpZ25pbmcgdGhlIGFycm93IGNvcnJlY3RseS5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYXJyb3ctcGFkZGluZzogMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gTWluaW11bSB3aWR0aCBvZiBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0b3AgbGV2ZWwgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGRyb3Bkb3ducy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyb3Bkb3dubWVudS1zdWJtZW51LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3dubWVudS1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3Igc3ViLW1lbnUgaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGRyb3Bkb3dubWVudS1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGZvciBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3dubWVudS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vIEJvcmRlciB3aWR0aCBmb3IgZHJvcGRvd24gc3ViLW1lbnVzLlxuLy8gVXNlZCB0byBhZGp1c3QgdG9wIG1hcmdpbiBvZiBhIHN1Yi1tZW51IGlmIGEgYm9yZGVyIGlzIHVzZWQuXG4vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYm9yZGVyLXdpZHRoOiBudGgoJGRyb3Bkb3dubWVudS1ib3JkZXIsIDEpO1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuQG1peGluIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgPiBhOjphZnRlciB7XG4gICAgI3skZ2xvYmFsLXJpZ2h0fTogMTRweDtcbiAgfVxuXG4gICYub3BlbnMtbGVmdCA+IGE6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplLCAkZHJvcGRvd25tZW51LWFycm93LWNvbG9yLCBsZWZ0KTtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiA1cHg7XG4gIH1cblxuICAmLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJvcGRvd25tZW51LWFycm93LXNpemUsICRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3IsIHJpZ2h0KTtcbiAgfVxufVxuXG5AbWl4aW4gZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICA+IGxpLm9wZW5zLWxlZnQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gbGkub3BlbnMtcmlnaHQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tcXVhbGlmeWluZy1lbGVtZW50c1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgZG93bik7XG4gICAgICAgICN7JGdsb2JhbC1yaWdodH06IDVweDtcbiAgICAgICAgI3skZ2xvYmFsLWxlZnR9OiBhdXRvO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqICgkZHJvcGRvd25tZW51LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgPiBsaSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1sZWZ0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1yaWdodCB7XG4gICAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmICRkcm9wZG93bm1lbnUtYXJyb3dzIHtcbiAgICAgICAgQGluY2x1ZGUgemYtZHJvcGRvd24tbGVmdC1yaWdodC1hcnJvd3M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBkcm9wZG93bi1tZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyb3Bkb3duLW1lbnUge1xuICAuZHJvcGRvd24ubWVudSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oaG9yaXpvbnRhbCk7XG5cbiAgICBhIHtcbiAgICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbVxuICAgID4gbGkgPiBhIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDtcbiAgICAgIHBhZGRpbmc6ICRkcm9wZG93bm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbSBhY3RpdmUgc3RhdGVcbiAgICA+IGxpLmlzLWFjdGl2ZSA+IGEge1xuICAgICAgYmFja2dyb3VuZDogJGRyb3Bkb3duLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAubm8tanMgJiB1bCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkZHJvcGRvd25tZW51LW5lc3RlZC1tYXJnaW4pO1xuICAgIH1cblxuICAgICYudmVydGljYWwge1xuICAgICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgICAgICAgICYuI3skc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLiN7JHNpemV9LXZlcnRpY2FsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsaWduLXJpZ2h0IHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51LmZpcnN0LXN1YiB7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwge1xuICAgIHdpZHRoOiAxMDBweDtcblxuICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgYTo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICAjeyRnbG9iYWwtcmlnaHR9OiA1cHg7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTtcbiAgICB9XG5cbiAgICAmLm9wZW5zLWlubmVyID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuXG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBAaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAmLm9wZW5zLXJpZ2h0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtaW4td2lkdGg6ICRkcm9wZG93bm1lbnUtbWluLXdpZHRoO1xuXG4gICAgYm9yZGVyOiAkZHJvcGRvd25tZW51LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kOiAkZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDtcblxuICAgIC5kcm9wZG93biAmIGEge1xuICAgICAgcGFkZGluZzogJGRyb3Bkb3dubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IHtcbiAgICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICAgIEBpbmNsdWRlIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAodHlwZS1vZigkZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgbWFyZ2luLXRvcDogKC0kZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBsaSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvLyBbVE9ET10gQ3V0IGJhY2sgc3BlY2lmaWNpdHlcbiAgICAvLyY6bm90KC5qcy1kcm9wZG93bi1ub2hvdmVyKSA+IC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudDpob3ZlciA+ICYsIC8vIHdoeSBpcyB0aGlzIGxpbmUgbmVlZGVkPyBPcGVuaW5nIGlzIGhhbmRsZWQgYnkgSlMgYW5kIHRoaXMgY2F1c2VzIHNvbWUgdWdseSBmbGlja2VyaW5nIHdoZW4gdGhlIHN1YiBpcyByZS1wb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkuLi5cbiAgICAmLmpzLWRyb3Bkb3duLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBvZmYtY2FudmFzXG4vLy8vXG5cbi8vLyBXaWR0aCBtYXAgb2YgYSBsZWZ0L3JpZ2h0IG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgTWFwXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gIHNtYWxsOiAyNTBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgbWFwIG9mIGEgdG9wL2JvdHRvbSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE1hcFxuJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKFxuICBzbWFsbDogMjUwcHgsXG4pICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyBmb3IgdGhlIG9mZi1jYW52YXMgb3ZlcmxhcCBwYW5lbC5cbi8vLyBAdHlwZSBTaGFkb3dcbiRvZmZjYW52YXMtc2hhZG93OiAwIDAgMTBweCByZ2JhKCRibGFjaywgMC43KSAhZGVmYXVsdDtcblxuLy8vIElubmVyIGJveCBzaGFkb3cgc2l6ZSBmb3IgdGhlIG9mZi1jYW52YXMgcHVzaCBwYW5lbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vLyBJbm5lciBib3ggc2hhZG93IGNvbG9yIGZvciB0aGUgb2ZmLWNhbnZhcyBwdXNoIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1jb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIGNvbnRlbnQgb3ZlcmxheS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXg6IDExICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHdpdGggdGhlIGBwdXNoYCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1wdXNoLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBaLWluZGV4IG9mIGFuIG9mZi1jYW52YXMgcGFuZWwgd2l0aCB0aGUgYG92ZXJsYXBgIHRyYW5zaXRpb24uXG4vLy8gQHR5cGUgTnVtYmVyXG4kb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4OiAxMyAhZGVmYXVsdDtcblxuLy8vIFotaW5kZXggb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbCB1c2luZyB0aGUgYHJldmVhbC1mb3ItKmAgY2xhc3NlcyBvciBtaXhpbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtcmV2ZWFsLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBMZW5ndGggb2YgdGhlIGFuaW1hdGlvbiBvbiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cyAhZGVmYXVsdDtcblxuLy8vIFRpbWluZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uIG9uIGFuIG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgS2V5d29yZFxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLXRpbWluZzogZWFzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYSByZXZlYWxlZCBvZmYtY2FudmFzIHdpbGwgYmUgZml4ZWQtcG9zaXRpb24sIGFuZCBzY3JvbGwgd2l0aCB0aGUgc2NyZWVuLlxuLy8vIEB0eXBlIEJvb2xcbiRvZmZjYW52YXMtZml4ZWQtcmV2ZWFsOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIG92ZXJsYXkgdGhhdCBhcHBlYXJzIHdoZW4gYW4gb2ZmLWNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWV4aXQtYmFja2dyb3VuZDogcmdiYSgkd2hpdGUsIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gQ1NTIGNsYXNzIHVzZWQgZm9yIHRoZSBtYWluIGNvbnRlbnQgYXJlYS4gVGhlIG9mZi1jYW52YXMgbWl4aW5zIHVzZSB0aGlzIHRvIHRhcmdldCB0aGUgcGFnZSBjb250ZW50LlxuJG1haW5jb250ZW50LWNsYXNzOiAnb2ZmLWNhbnZhcy1jb250ZW50JyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzZWxpbmUgc3R5bGVzIGZvciBvZmYtY2FudmFzLiBUaGlzIENTUyBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBvdGhlciBwaWVjZXMgd29yay5cbkBtaXhpbiBvZmYtY2FudmFzLWJhc2ljcyB7XG5cbiAgLy8vIFRyYW5zZm9ybSBkZXByZWNhdGVkIHNpemUgc2V0dGluZ3MgaW50byBtYXAgJiBzaG93IHdhcm5pbmdcbiAgQGlmIHZhcmlhYmxlLWV4aXN0cyhvZmZjYW52YXMtc2l6ZSkge1xuICAgICRvZmZjYW52YXMtc2l6ZXM6IChzbWFsbDogJG9mZmNhbnZhcy1zaXplLCBtZWRpdW06ICRvZmZjYW52YXMtc2l6ZSkgIWdsb2JhbDtcbiAgICBAd2FybiAnJG9mZmNhbnZhcy1zaXplIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCB1c2VkIGFueW1vcmUhIFBsZWFzZSB1cGRhdGUgeW91ciBzZXR0aW5ncyBhbmQgdXNlIHRoZSBtYXAgJG9mZmNhbnZhcy1zaXplcyBpbnN0ZWFkJztcbiAgfVxuICBAaWYgdmFyaWFibGUtZXhpc3RzKG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSB7XG4gICAgJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKHNtYWxsOiAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUsIG1lZGl1bTogJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSAhZ2xvYmFsO1xuICAgIEB3YXJuICckb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHVzZWQgYW55bW9yZSEgUGxlYXNlIHVwZGF0ZSB5b3VyIHNldHRpbmdzIGFuZCB1c2UgdGhlIG1hcCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzIGluc3RlYWQnO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHRoZSB6LWluZGV4ZXMgYW5kIGluY3JlYXNlIHRoZW0gZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBvdmVybGF5J3Mgei1pbmRleCBpcyBuZXcgc2luY2UgdjYuNCBhbmQgbWF5IGJlIGlkZW50aWNhbCB0byB0aGUgdXNlciBjdXN0b20gc2V0dGluZ3Mgb2YgdGhlIHB1c2ggei1pbmRleC5cbiAgQGlmICRvZmZjYW52YXMtcHVzaC16aW5kZXggPD0gJG9mZmNhbnZhcy1vdmVybGF5LXppbmRleCB7ICRvZmZjYW52YXMtcHVzaC16aW5kZXg6ICRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXggPD0gJG9mZmNhbnZhcy1wdXNoLXppbmRleCB7ICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXg6ICRvZmZjYW52YXMtcHVzaC16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCA8PSAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4IHsgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4ICsgMSAhZ2xvYmFsOyB9XG5cbiAgLy8gSGlkZXMgb3ZlcmZsb3cgb24gYm9keSB3aGVuIGFuIG9mZi1jYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgLmlzLW9mZi1jYW52YXMtb3BlbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgb3ZlcmxheSAoZ2VuZXJhdGVkIGJ5IEphdmFTY3JpcHQpXG4gIC5qcy1vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkb2ZmY2FudmFzLXRyYW5zaXRpb24tbGVuZ3RoICRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmcsIHZpc2liaWxpdHkgJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuXG4gICAgYmFja2dyb3VuZDogJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ7XG5cbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmlzLXZpc2libGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG5cbiAgICAmLmlzLW92ZXJsYXktZml4ZWQge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRzIGJhc2ljIHN0eWxlcyBmb3IgYW4gb2ZmLWNhbnZhcyB3cmFwcGVyLlxuQG1peGluIG9mZi1jYW52YXMtd3JhcHBlcigpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1iYXNlKFxuICAkYmFja2dyb3VuZDogJG9mZmNhbnZhcy1iYWNrZ3JvdW5kLFxuICAkdHJhbnNpdGlvbjogJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nLFxuICAkZml4ZWQ6IHRydWVcbikge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG5cbiAgQGlmICRmaXhlZCA9PSB0cnVlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgb2ZmLWNhbnZhcyB6LWluZGV4LlxuICB6LWluZGV4OiAkb2ZmY2FudmFzLXB1c2gtemluZGV4O1xuXG4gIC8vIEluY3JlYXNlIENTUyBzcGVjaWZpY2l0eVxuICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1wdXNoLXppbmRleDtcbiAgfVxuXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuXG4gIC8vIEhpZGUgaW5hY3RpdmUgb2ZmLWNhbnZhcyB3aXRoaW4gdGhlIGNvbnRlbnQgdGhhdCBoYXZlIHRoZSBzYW1lIHBvc2l0aW9uXG4gICYuaXMtY2xvc2VkIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBPdmVybGFwIG9ubHkgc3R5bGVzLlxuICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDtcblxuICAgICYuaXMtb3BlbiB7XG4gICAgICBib3gtc2hhZG93OiAkb2ZmY2FudmFzLXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHRyYW5zZm9ybSB0byAwIHRvIHNob3cgYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbiAgJi5pcy1vcGVuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgdG8gcG9zaXRpb24gYW4gb2ZmLWNhbnZhcyBwYW5lbCB0byB0aGUgbGVmdC9yaWdodC90b3AvYm90dG9tLlxuQG1peGluIG9mZi1jYW52YXMtcG9zaXRpb24oXG4gICRwb3NpdGlvbjogbGVmdCxcbiAgJG9yaWVudGF0aW9uOiBob3Jpem9udGFsLFxuICAkc2l6ZXM6IGlmKCRvcmllbnRhdGlvbiA9PSBob3Jpem9udGFsLCAkb2ZmY2FudmFzLXNpemVzLCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzKVxuKSB7XG4gIEBpZiAkcG9zaXRpb24gPT0gbGVmdCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgd2lkdGg6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcblxuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICB3aWR0aDogJHNpemU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgcG9zaXRpb24gZm9yIG5lc3RlZCBvZmYtY2FudmFzIGVsZW1lbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IC5vZmYtY2FudmFzLnBvc2l0aW9uLSN7JHBvc2l0aW9ufSB7XG5cbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYuaXMtdHJhbnNpdGlvbi1vdmVybGFwLmlzLW9wZW4ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBvcGVuIHBvc2l0aW9uIGZvciB0aGUgY29udGVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30uaXMtb3Blbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIHBvc2l0aW9uIGZvciBuZXN0ZWQgb2ZmLWNhbnZhcyBlbGVtZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfSAub2ZmLWNhbnZhcy5wb3NpdGlvbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcC5pcy1vcGVuIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9LmlzLW9wZW4tI3skcG9zaXRpb259IHtcbiAgICAgICYuaGFzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmICRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemUgaXMgc2V0LCBhZGQgaW5uZXIgYm94LXNoYWRvdy5cbiAgLy8gVGhpcyBtaW1pY3MgdGhlIG9mZi1jYW52YXMgcGFuZWwgaGF2aW5nIGEgbG93ZXIgei1pbmRleCwgd2l0aG91dCBoYXZpbmcgdG8gaGF2ZSBvbmUuXG4gIEBpZiAkb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1zaXplIHtcbiAgICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICBAaWYgJHBvc2l0aW9uID09IGxlZnQge1xuICAgICAgICBAaW5jbHVkZSBpbm5lci1zaWRlLXNoYWRvdyhyaWdodCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHJpZ2h0IHtcbiAgICAgICAgQGluY2x1ZGUgaW5uZXItc2lkZS1zaGFkb3cobGVmdCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KGJvdHRvbSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KHRvcCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbi8vLyBTZXRzIHRoZSBzdHlsZXMgZm9yIHRoZSBjb250ZW50IGNvbnRhaW5lci5cbkBtaXhpbiBvZmYtY2FudmFzLWNvbnRlbnQoKSB7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEJpbmQgdG8gaGFzLXRyYW5zaXRpb24tWCBjbGFzcyB0byBwcmV2ZW50IHRyYW5zaXRpb24gZm9yIHRyYW5zZm9ybTpub25lXG4gICYuaGFzLXRyYW5zaXRpb24tb3ZlcmxhcCxcbiAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNjb3BlIHVudGlsIHRoZSBlbGVtZW50IGlzIGNsb3NlZCAobWFrZXMgc3VyZSB0cmFuc2l0aW9uZW5kIGdldHMgdHJpZ2dlcmVkKVxuICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG5cbiAgLy8gQ29uc2lkZXIgZWxlbWVudCAmIGNvbnRlbnQsIG5lc3RlZCBpbiBhbm90aGVyIGNvbnRlbnRcbiAgLm9mZi1jYW52YXMuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRoYXQgcmV2ZWFsIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1yZXZlYWwoXG4kcG9zaXRpb246IGxlZnQsXG4kemluZGV4OiAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsXG4kY29udGVudDogJG1haW5jb250ZW50LWNsYXNzLFxuJGJyZWFrcG9pbnQ6IHNtYWxsXG4pIHtcbiAgdHJhbnNmb3JtOiBub25lO1xuICB6LWluZGV4OiAkemluZGV4O1xuICB0cmFuc2l0aW9uOiBub25lO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXG4gIEBpZiBub3QgJG9mZmNhbnZhcy1maXhlZC1yZXZlYWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5jbG9zZS1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBDb25zaWRlciByZXZlYWxlZCBlbGVtZW50IGlzIG5lc3RlZCBpbiBjb250ZW50XG4gIC4jeyRtYWluY29udGVudC1jbGFzc30gJiB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgQGF0LXJvb3QgLiN7JGNvbnRlbnR9Lmhhcy1yZXZlYWwtI3skcG9zaXRpb259IHtcbiAgICBtYXJnaW4tI3skcG9zaXRpb259OiAtemYtZ2V0LWJwLXZhbCgkb2ZmY2FudmFzLXNpemVzLCAkYnJlYWtwb2ludCk7XG4gIH1cblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAocHJpb3IgdG8gdjYuNClcbiAgJiB+IC4jeyRjb250ZW50fSB7XG4gICAgbWFyZ2luLSN7JHBvc2l0aW9ufTogLXpmLWdldC1icC12YWwoJG9mZmNhbnZhcy1zaXplcywgJGJyZWFrcG9pbnQpO1xuICB9XG59XG5cbi8vLyBPdmVycmlkZXMgdGhlIG9mZi1jYW52YXMgc3R5bGVzXG5AbWl4aW4gaW4tY2FudmFzKCkge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcblxuICAvLyBJbmNyZWFzZSBDU1Mgc3BlY2lmaWNpdHlcbiAgJi5wb3NpdGlvbi1sZWZ0LFxuICAmLnBvc2l0aW9uLXJpZ2h0LFxuICAmLnBvc2l0aW9uLXRvcCxcbiAgJi5wb3NpdGlvbi1ib3R0b20ge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1vZmYtY2FudmFzIHtcbiAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNpY3M7XG5cbiAgLy8gT2ZmLWNhbnZhcyB3cmFwcGVyXG4gIC5vZmYtY2FudmFzLXdyYXBwZXIge1xuICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtd3JhcHBlcjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgY29udGFpbmVyXG4gIC5vZmYtY2FudmFzIHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWJhc2U7XG5cbiAgICAvLyBGb3JjZSBwb3NpdGlvbiBhYnNvbHV0ZSBmb3IgbmVzdGVkIG9mZi1jYW52YXMgYmVjYXVzZSBmaXhlZCBkb2Vzbid0IHdvcmsgZm9yIHB1c2ggdHJhbnNpdGlvbiB3aXRoaW4gdGhlIHRyYW5zZm9ybSBzY29wZS5cbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9ICYge1xuICAgICAgLy8gTk9URTogc2luY2Ugb3ZlcmxhcCB0cmFuc2l0aW9uIGlzIGN1cnJlbnRseSBmb3JjZWQgaWYgbmVzdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgcG9zaXRpb24gYWJzb2x1dGUgdW50aWwgbmVzdGVkIHB1c2ggdHJhbnNpdGlvbiBpcyBzdXBwb3J0ZWQuXG4gICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBjb250YWluZXIgd2l0aCBhYnNvbHV0ZSBwb3NpdGlvblxuICAub2ZmLWNhbnZhcy1hYnNvbHV0ZSB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlKCRmaXhlZDogZmFsc2UpO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBwb3NpdGlvbiBjbGFzc2VzXG4gIC5wb3NpdGlvbi1sZWZ0ICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihsZWZ0LCAgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi1yaWdodCAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihyaWdodCwgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi10b3AgICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbih0b3AsICAgIHZlcnRpY2FsKTsgfVxuICAucG9zaXRpb24tYm90dG9tICB7IEBpbmNsdWRlIG9mZi1jYW52YXMtcG9zaXRpb24oYm90dG9tLCB2ZXJ0aWNhbCk7IH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWNvbnRlbnQ7XG4gIH1cblxuICAvLyBSZXZlYWwgb2ZmLWNhbnZhcyBwYW5lbCBvbiBsYXJnZXIgc2NyZWVuc1xuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkbmFtZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKGxlZnQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwocmlnaHQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKHRvcCwgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4LCAkbWFpbmNvbnRlbnQtY2xhc3MsICRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwoYm90dG9tLCAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsICRtYWluY29udGVudC1jbGFzcywgJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW92ZSBpbi1jYW52YXMgZm9yIGxhcmdlciBzY3JlZW5zXG4gIEBlYWNoICRuYW1lLCAkdmFsdWUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgQGlmICRuYW1lICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgLm9mZi1jYW52YXMuaW4tY2FudmFzLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgaW4tY2FudmFzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tc3RpY2t5IHtcbiAgLnN0aWNreS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5zdGlja3kge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAuc3RpY2t5LmlzLXN0dWNrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuaXMtYXQtdG9wIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgLnN0aWNreS5pcy1hbmNob3JlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGl0bGUtYmFyXG4vLy8vXG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgV2VpZ2h0XG4kdGl0bGViYXItdGV4dC1mb250LXdlaWdodDogYm9sZCAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIG1lbnUgaWNvbnMgaW5zaWRlIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgbWVudSBpY29ucyBpbnNpZGUgYSB0aXRsZSBiYXIgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gdGhlIG1lbnUgaWNvbiBhbmQgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi10aXRsZS1iYXIge1xuICAudGl0bGUtYmFyIHtcbiAgICBwYWRkaW5nOiAkdGl0bGViYXItcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkdGl0bGViYXItYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRpdGxlYmFyLWNvbG9yO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgfVxuXG4gICAgLm1lbnUtaWNvbiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkdGl0bGViYXItaWNvbi1zcGFjaW5nO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICR0aXRsZWJhci1pY29uLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRpdGxlLWJhci1sZWZ0LFxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG5cbiAgICAudGl0bGUtYmFyLXJpZ2h0IHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRpdGxlLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnRpdGxlLWJhci10aXRsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC13ZWlnaHQ6ICR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdG9wLWJhclxuLy8vL1xuXG4vLy8gUGFkZGluZyBmb3IgdGhlIHRvcCBiYXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXBhZGRpbmc6IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0b3AgYmFyLiBUaGlzIGNvbG9yIGFsc28gY2FzY2FkZXMgdG8gbWVudXMgd2l0aGluIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBzdWJtZW51cyB3aXRoaW4gdGhlIHRvcCBiYXIuIFVzZWZ1bGwgaWYgJHRvcGJhci1iYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZDogJHRvcGJhci1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBmb3IgdGhlIHRvcCBiYXIgdGl0bGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwICFkZWZhdWx0O1xuXG4vLy8gTWF4aW11bSB3aWR0aCBvZiBgPGlucHV0PmAgZWxlbWVudHMgaW5zaWRlIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHRvcCBiYXIgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0b3BiYXItdW5zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSB0b3AgYmFyIGNvbnRhaW5lci5cbkBtaXhpbiB0b3AtYmFyLWNvbnRhaW5lciB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9XG5cbiAgcGFkZGluZzogJHRvcGJhci1wYWRkaW5nO1xuXG4gICYsXG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiAkdG9wYmFyLWJhY2tncm91bmQgaXMgZGlmZmVybnQgZnJvbSAkdG9wYmFyLWJhY2tncm91bmQtc3VibWVudVxuICBAaWYgKCR0b3BiYXItYmFja2dyb3VuZCAhPSAkdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZCkge1xuICAgIHVsIHVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RyYWluIHdpZHRoIG9mIGlucHV0cyBieSBkZWZhdWx0IHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gYXJyYW5nZVxuICBpbnB1dCB7XG4gICAgbWF4LXdpZHRoOiAkdG9wYmFyLWlucHV0LXdpZHRoO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAxcmVtO1xuICB9XG5cbiAgLy8gVGhlIGFib3ZlIHN0eWxlcyBzaG91bGRuJ3QgYXBwbHkgdG8gaW5wdXQgZ3JvdXAgZmllbGRzXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gIH1cblxuICBpbnB1dC5idXR0b24geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4vLy8gTWFrZXMgc2VjdGlvbnMgb2YgYSB0b3AgYmFyIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuQG1peGluIHRvcC1iYXItc3RhY2tlZCB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgIC8vIFN1Yi1zZWN0aW9uc1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBTdWItc2VjdGlvbnNcbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gVW5kb2VzIHRoZSBDU1MgYXBwbGllZCBieSB0aGUgYHRvcC1iYXItc3RhY2tlZCgpYCBtaXhpbi5cbkBtaXhpbiB0b3AtYmFyLXVuc3RhY2sge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcblxuICAgIC50b3AtYmFyLWxlZnQge1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRvcC1iYXIge1xuICAvLyBUb3AgYmFyIGNvbnRhaW5lclxuICAudG9wLWJhciB7XG4gICAgQGluY2x1ZGUgdG9wLWJhci1jb250YWluZXI7XG5cbiAgICAvLyBTdGFjayBvbiBzbWFsbCBzY3JlZW5zIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0b3BiYXItdW5zdGFjay1icmVha3BvaW50KSB7XG4gICAgICBAaW5jbHVkZSB0b3AtYmFyLXVuc3RhY2s7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2xhc3NlcyBmb3Igc3RhY2tpbmcgb24gZWFjaCBzY3JlZW4gc2l6ZSAoZGVmaW5lZCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzKVxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgJi5zdGFja2VkLWZvci0jeyRzaXplfSB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBkb3duKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXNlY3Rpb25zXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgbWFyZ2luOiAkdG9wYmFyLXRpdGxlLXNwYWNpbmc7XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgcGFkZGluZzogJHRvcGJhci10aXRsZS1zcGFjaW5nO1xuXG4gICAgICAubWVudS1pY29uIHtcbiAgICAgICAgYm90dG9tOiAycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG5cbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZmxvYXRcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcyB7XG4gIC5mbG9hdC1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmZsb2F0LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5mbG9hdC1jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5jbGVhcmZpeCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH1cbn1cbiIsIkBmdW5jdGlvbiAtemYtZmxleC1qdXN0aWZ5KCR0ZXh0LWRpcmVjdGlvbil7XG4gICQtemYtZmxleC1qdXN0aWZ5OiAoXG4gICAgJ2xlZnQnOiBpZigkdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBmbGV4LWVuZCwgZmxleC1zdGFydCksXG4gICAgJ3JpZ2h0JzogaWYoJHRleHQtZGlyZWN0aW9uID09IHJ0bCwgZmxleC1zdGFydCwgZmxleC1lbmQpLFxuICAgICdjZW50ZXInOiBjZW50ZXIsXG4gICAgJ2p1c3RpZnknOiBzcGFjZS1iZXR3ZWVuLFxuICAgICdzcGFjZWQnOiBzcGFjZS1hcm91bmQsXG4gICk7XG5cbiAgQHJldHVybiAkLXpmLWZsZXgtanVzdGlmeTtcbn1cblxuXG4kLXpmLWZsZXgtYWxpZ246IChcbiAgJ3RvcCc6IGZsZXgtc3RhcnQsXG4gICdib3R0b20nOiBmbGV4LWVuZCxcbiAgJ21pZGRsZSc6IGNlbnRlcixcbiAgJ3N0cmV0Y2gnOiBzdHJldGNoLFxuKTtcblxuJC16Zi1mbGV4LWRpcmVjdGlvbjogKFxuICAncm93Jzogcm93LFxuICAncm93LXJldmVyc2UnOiByb3ctcmV2ZXJzZSxcbiAgJ2NvbHVtbic6IGNvbHVtbixcbiAgJ2NvbHVtbi1yZXZlcnNlJzogY29sdW1uLXJldmVyc2UsXG4pO1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGJ5IGFkZGluZyBgZGlzcGxheTogZmxleGAgdG8gdGhlIGVsZW1lbnQuXG5AbWl4aW4gZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbnMgdGhlIGl0ZW1zIHdpdGhpbiBhIGZsZXggY29udGFpbmVyLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeCBbbnVsbF0gLSBIb3Jpem9udGFsIGFsaWdubWVudCB0byB1c2UuIENhbiBiZSBgbGVmdGAsIGByaWdodGAsIGBjZW50ZXJgLCBganVzdGlmeWAsIG9yIGBzcGFjZWRgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgaG9yaXpvbnRhbCBhbGlnbm1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeSBbbnVsbF0gLSBWZXJ0aWNhbCBhbGlnbm1lbnQgdG8gdXNlLiBDYW4gYmUgYHRvcGAsIGBib3R0b21gLCBgbWlkZGxlYCwgb3IgYHN0cmV0Y2hgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgdmVydGljYWwgYWxpZ25tZW50LlxuQG1peGluIGZsZXgtYWxpZ24oJHg6IG51bGwsICR5OiBudWxsKSB7XG4gIEBpZiAkeCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCQtemYtZmxleC1qdXN0aWZ5LCAkeCkge1xuICAgICAgJHg6IG1hcC1nZXQoJC16Zi1mbGV4LWp1c3RpZnksICR4KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHdhcm4gJ2ZsZXgtZ3JpZC1yb3ctYWxpZ24oKTogI3skeH0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGhvcml6b250YWwgYWxpZ25tZW50LiBVc2UgbGVmdCwgcmlnaHQsIGNlbnRlciwganVzdGlmeSwgb3Igc3BhY2VkLic7XG4gICAgfVxuICB9XG5cbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtcm93LWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAganVzdGlmeS1jb250ZW50OiAkeDtcbiAgYWxpZ24taXRlbXM6ICR5O1xufVxuXG4vLy8gVmVydGljYWxseSBhbGlnbiBhIHNpbmdsZSBjb2x1bW4gd2l0aGluIGEgZmxleCByb3cuIEFwcGx5IHRoaXMgbWl4aW4gdG8gYSBmbGV4IGNvbHVtbi5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHkgW251bGxdIC0gVmVydGljYWwgYWxpZ25tZW50IHRvIHVzZS4gQ2FuIGJlIGB0b3BgLCBgYm90dG9tYCwgYG1pZGRsZWAsIG9yIGBzdHJldGNoYC4gT3IsIHNldCBpdCB0byBgbnVsbGAgKHRoZSBkZWZhdWx0KSB0byBub3Qgc2V0IHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiBmbGV4LWFsaWduLXNlbGYoJHk6IG51bGwpIHtcbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtY29sdW1uLWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAgYWxpZ24tc2VsZjogJHk7XG59XG5cbi8vLyBDaGFuZ2VzIHRoZSBzb3VyY2Ugb3JkZXIgb2YgYSBmbGV4IGNoaWxkLiBDaGlsZHJlbiB3aXRoIGxvd2VyIG51bWJlcnMgYXBwZWFyIGZpcnN0IGluIHRoZSBsYXlvdXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcmRlciBbMF0gLSBPcmRlciBudW1iZXIgdG8gYXBwbHkuXG5AbWl4aW4gZmxleC1vcmRlcigkb3JkZXI6IDApIHtcbiAgb3JkZXI6ICRvcmRlcjtcbn1cblxuLy8vIENoYW5nZSBmbGV4LWRpcmVjdGlvblxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpcmVjdGlvbiBbcm93XSAtIEZsZXggZGlyZWN0aW9uIHRvIHVzZS4gQ2FuIGJlXG4vLy8gICAtIHJvdyAoZGVmYXVsdCk6IHNhbWUgYXMgdGV4dCBkaXJlY3Rpb25cbi8vLyAgIC0gcm93LXJldmVyc2U6IG9wcG9zaXRlIHRvIHRleHQgZGlyZWN0aW9uXG4vLy8gICAtIGNvbHVtbjogc2FtZSBhcyByb3cgYnV0IHRvcCB0byBib3R0b21cbi8vLyAgIC0gY29sdW1uLXJldmVyc2U6IHNhbWUgYXMgcm93LXJldmVyc2UgdG9wIHRvIGJvdHRvbVxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCRkaXJlY3Rpb246IHJvdykge1xuICBmbGV4LWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBGbGV4Ym94IFV0aWxpdGllc1xuLy8vL1xuLy9cbi8vLyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY291bnQgb2Ygc291cmNlIG9yZGVyaW5nYFxuLy8vIEB0eXBlIE51bWJlclxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2ICFkZWZhdWx0O1xuXG4vLy8gUXVpY2tseSBkaXNhYmxlL2VuYWJsZSBSZXNwb25zaXZlIGJyZWFrcG9pbnRzIGZvciBWYW5pbGxhIEZsZXggSGVscGVycy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzOiB0cnVlICFkZWZhdWx0O1xuXG5AbWl4aW4gZmxleC1oZWxwZXJzIHtcbiAgLmZsZXgtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBmbGV4O1xuICB9XG5cbiAgLmZsZXgtY2hpbGQtYXV0byB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gIH1cblxuICAuZmxleC1jaGlsZC1ncm93IHtcbiAgICBmbGV4OiAxIDAgYXV0bztcbiAgfVxuXG4gIC5mbGV4LWNoaWxkLXNocmluayB7XG4gICAgZmxleDogMCAxIGF1dG87XG4gIH1cblxuICBAZWFjaCAkZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtZGlyZWN0aW9uIHtcbiAgICAuZmxleC1kaXItI3skZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzKSB7XG4gICAgLy8gTG9vcCB0aHJvdWdoIFJlc3BvbnNpdmUgQnJlYWtwb2ludHNcbiAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jb250YWluZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jaGlsZC1hdXRvIHtcbiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC4jeyRzaXplfS1mbGV4LWNoaWxkLWdyb3cge1xuICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLiN7JHNpemV9LWZsZXgtY2hpbGQtc2hyaW5rIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEBlYWNoICRkaXIsICRwcm9wIGluICQtemYtZmxleC1kaXJlY3Rpb24ge1xuICAgICAgICAgICAgLiN7JHNpemV9LWZsZXgtZGlyLSN7JGRpcn0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZsZXgtY2xhc3NlcyB7XG4gIC8vIEhvcml6b250YWwgYWxpZ25tZW50IHVzaW5nIGp1c3RpZnktY29udGVudFxuICBAZWFjaCAkaGRpciwgJHByb3AgaW4gJC16Zi1mbGV4LWp1c3RpZnkge1xuICAgIC5hbGlnbi0jeyRoZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR4OiAkaGRpcik7XG4gICAgfVxuICB9XG4gIFxuICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBTcGVjaWZpY2FsbHkgZm9yIFZlcnRpY2FsIE1lbnVcbiAgQGVhY2ggJGhkaXIsICRwcm9wIGluIG1hcC1yZW1vdmUoJC16Zi1mbGV4LWp1c3RpZnksICdqdXN0aWZ5JywgJ3NwYWNlZCcpIHtcbiAgICAuYWxpZ24tI3skaGRpcn0ge1xuICAgICAgJi52ZXJ0aWNhbCB7XG4gICAgICAgICYubWVudSA+IGxpID4gYSB7XG4gICAgICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogJGhkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWwgYWxpZ25tZW50IHVzaW5nIGFsaWduLWl0ZW1zIGFuZCBhbGlnbi1zZWxmXG4gIEBlYWNoICR2ZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtYWxpZ24ge1xuICAgIC5hbGlnbi0jeyR2ZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR5OiAkdmRpcik7XG4gICAgfVxuXG4gICAgLmFsaWduLXNlbGYtI3skdmRpcn0ge1xuICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbi1zZWxmKCR5OiAkdmRpcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VudHJhbCBhbGlnbm1lbnQgb2YgY29udGVudFxuICAuYWxpZ24tY2VudGVyLW1pZGRsZSB7XG4gICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogY2VudGVyLCAkeTogbWlkZGxlKTtcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAvLyBTb3VyY2Ugb3JkZXJpbmdcbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZmxleC1zb3VyY2Utb3JkZXJpbmctY291bnQge1xuICAgICAgLiN7JC16Zi1zaXplfS1vcmRlci0jeyRpfSB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtb3JkZXIoJGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbmlsbGEgRmxleGJveCBIZWxwZXJzXG4gIEBpbmNsdWRlIGZsZXgtaGVscGVycztcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3IoJHNpemUpIHtcbiAgJHNpemU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkc2l6ZSk7XG4gIC8vIE1heCB2YWx1ZSBpcyAwLjJweCB1bmRlciB0aGUgbmV4dCBicmVha3BvaW50ICgwLjAyIC8gMTYgPSAwLjAwMTI1KS5cbiAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMTMxM1xuICAkc2l6ZTogLXpmLWJwLXRvLWVtKCRzaXplKSAtIC4wMDEyNTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgd2l0aGluIGEgY2VydGFpbiBicmVha3BvaW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3Itb25seSgkc2l6ZSkge1xuICAkbG93ZXItYm91bmQtc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHVwcGVyLWJvdW5kLXNpemU6IC16Zi1tYXAtbmV4dCgkYnJlYWtwb2ludHMsICRzaXplKTtcblxuICAvLyBtb3JlIG9mdGVuIHRoYW4gbm90IHRoaXMgd2lsbCBiZSBjb3JyZWN0LCBqdXN0IG9uZSB0aW1lIHJvdW5kIHRoZSBsb29wIGl0IHdvbid0IHNvIHNldCBpbiBzY29wZSBoZXJlXG4gICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKSAtIC4wMDEyNTtcbiAgLy8gdGVzdCBhY3R1YWwgbG93ZXItYm91bmQtc2l6ZSwgaWYgMCBzZXQgaXQgdG8gMGVtXG4gIEBpZiBzdHJpcC11bml0KCRsb3dlci1ib3VuZC1zaXplKSA9PSAwIHtcbiAgICAkbG93ZXItYm91bmQ6IC16Zi1icC10by1lbSgkbG93ZXItYm91bmQtc2l6ZSk7XG4gIH1cblxuICBAaWYgJHVwcGVyLWJvdW5kLXNpemUgPT0gbnVsbCB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGxvd2VyLWJvdW5kKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdXBwZXItYm91bmQ6IC16Zi1icC10by1lbSgkdXBwZXItYm91bmQtc2l6ZSk7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbG93ZXItYm91bmQpLCBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR1cHBlci1ib3VuZCkge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vLyBTaG93IGFuIGVsZW1lbnQgYnkgZGVmYXVsdCwgYW5kIGhpZGUgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gaGlkZS1mb3IoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLy8gU2hvdyBhbiBlbGVtZW50IGJ5IGRlZmF1bHQsIGFuZCBoaWRlIGl0IGFib3ZlIGEgY2VydGFpbiBzY3JlZW4gc2l6ZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzaXplIC0gQnJlYWtwb2ludCB0byB1c2UuICoqTXVzdCBiZSBhIGJyZWFrcG9pbnQgZGVmaW5lZCBpbiBgJGJyZWFrcG9pbnRzYC4qKlxuQG1peGluIGhpZGUtZm9yLW9ubHkoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBvbmx5KSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXZpc2liaWxpdHktY2xhc3NlcyB7XG4gIC8vIEJhc2ljIGhpZGluZyBjbGFzc2VzXG4gIC5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaW52aXNpYmxlIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBSZXNwb25zaXZlIHZpc2liaWxpdHkgY2xhc3Nlc1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgLmhpZGUtZm9yLSN7JHNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgaGlkZS1mb3IoJHNpemUpO1xuICAgICAgfVxuXG4gICAgICAuc2hvdy1mb3ItI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBzaG93LWZvcigkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhpZGUtZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgaGlkZS1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuXG4gICAgLnNob3ctZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgc2hvdy1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2NyZWVuIHJlYWRlciB2aXNpYmlsaXR5IGNsYXNzZXNcbiAgLy8gTmVlZCBhIFwiaGlkZS1mb3Itc3JcIiBjbGFzcz8gQWRkIGFyaWEtaGlkZGVuPSd0cnVlJyB0byB0aGUgZWxlbWVudFxuICAuc2hvdy1mb3Itc3IsXG4gIC5zaG93LW9uLWZvY3VzIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZTtcbiAgfVxuXG4gIC8vIE9ubHkgZGlzcGxheSB0aGUgZWxlbWVudCB3aGVuIGl0J3MgZm9jdXNlZFxuICAuc2hvdy1vbi1mb2N1cyB7XG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZS1vZmY7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFuZHNjYXBlIGFuZCBwb3J0cmFpdCB2aXNpYmlsaXR5XG4gIC5zaG93LWZvci1sYW5kc2NhcGUsXG4gIC5oaWRlLWZvci1wb3J0cmFpdCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQocG9ydHJhaXQpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuaGlkZS1mb3ItbGFuZHNjYXBlLFxuICAuc2hvdy1mb3ItcG9ydHJhaXQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChwb3J0cmFpdCkge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbiIsIiN0b2FzdC1jb250YWluZXIge1xuXG4gIHotaW5kZXg6IDEwMDAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuXG4gIHBhZGRpbmc6IDguNXZoIDAgMCAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICBkaXYudG9hc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXG4gICAgJi50b2FzdC10ZW1wbGF0ZSB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgc3Bhbi5tZXNzYWdlIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG5cbiAgICAgIHotaW5kZXg6IDEwMDAxO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XG5cbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MjYyNjI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmI2YjZiO1xuICAgICAgcGFkZGluZzogLjNlbSAuNmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAvL29wYWNpdHk6IC45O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogLjQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSIsIi5iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwMDAwO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU1LCA1NSwgNTUsIDAuNik7XG5cbiAgLm1vZGFsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG5cbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogODAlO1xuICAgIG1heC13aWR0aDogbnRoKG50aCgkYnJlYWtwb2ludHMsIDQpLCAyKTtcblxuICAgICYuc21hbGwtbWFyZ2luIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICB3aWR0aDogOTUlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50cyB7XG4gICAgICAmLm1heC0je250aCgkc2l6ZSwgMSl9IHtcbiAgICAgICAgbWF4LXdpZHRoOiBudGgoJHNpemUsIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gICAgfVxuXG4gICAgLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAubG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jbG9zZSB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIC8vY29sb3I6ICNhYWE7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIC8vY29sb3I6IGJsYWNrO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuXG4gICAgICAuYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwLjZlbSAwLjhlbTtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jaG9vc2UtZGlhbG9nLXZhbHVlLXJvd3tcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgICAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogMC4zcmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgfVxuXG4gICAgLy9BZGRpdGlvbmFsIGNsYXNzZXNcbiAgICAmLm5vLXRpdGxlIHtcbiAgICAgIC50aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iLCJAaW1wb3J0IFwibGliL2NvcmVTZXR0aW5nc1wiO1xuQGltcG9ydCBcImZvdW5kYXRpb25TZXR0aW5nc1wiO1xuXG4kZGVmYXVsdFRoZW1lVmFsdWVzOiAoXG4gICAgICAgIGNsYXNzOiBcIlwiLFxuICAvL3RoZW1lQ29sb3I6ICMzODM4MzgsXG4gICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgIG5hdkJhclRleHRDb2xvcjogaW5oZXJpdCxcbiAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNjYWNhY2EsXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYsXG4gICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgaGlnaGxpZ2h0OiAjRDU2QjUyLFxuICAgICAgICB0ZXh0Q29sb3JPbmU6ICNiY2JiYmIsXG4gICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICBjb2xvclR3bzogIzNCM0IzQixcbiAgICAgICAgY29sb3JUaHJlZTogI0ZGRixcbiAgICAgICAgYnV0dG9uQm9yZGVyOiBub25lLFxuICAgICAgICBidXR0b25Db2xvcjogd2hpdGUsXG4pO1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgLy90aGVtZUNvbG9yOiAjMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiBpbmhlcml0LFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6ICNENTZCNTIsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yT25lOiAjYmNiYmJiLFxuICAgICAgICAgICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICAgICAgICAgIGNvbG9yVHdvOiAjM0IzQjNCLFxuICAgICAgICAgICAgICAgIGNvbG9yVGhyZWU6ICNGRkYsXG4gICAgICAgICAgICAgICAgYnV0dG9uQm9yZGVyOiAxcHggc29saWQgYmxhY2ssXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29sb3I6IGJsYWNrLFxuICAgICAgICApLFxuICAgICAgICByZWQ6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiByZWQsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmMDAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM4NzAwMTUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2I3MWMxYSxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmx1ZTooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGJsdWUsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzJjNThhZSxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMxYTMwNjIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzY3M0FCNyxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZ3JlZW46KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBncmVlbixcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzAwMzYxMyxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBwaW5rOihcbiAgICAgICAgICAgICAgICBjbGFzczogcGluayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzcwMzc0YSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBkYXJrOiAoXG4gICAgICAgICAgICAgICAgY2xhc3M6IGRhcmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzM3MzczNyxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM5YjliOWIsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwXG4gICAgICAgIClcbik7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIG5hdmJhckNvbG9yOiByZ2JhKDAsIDIwNSwgMCwgMC41KSwgLy9UT0RPIGJlbnV0emVuXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNmZWZlZmUsXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTtcblxuJHRoZW1lczogbWFwLW1lcmdlKCR0aGVtZXMsIChkYXJrOiAoXG4gICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuKSkpO1xuXG5AZnVuY3Rpb24gcmVjdXJzaXZlLW1hcC1tZXJnZSgkcGFyZW50LW1hcCwgJGNoaWxkLW1hcCkge1xuICAkcmVzdWx0OiAkcGFyZW50LW1hcDtcbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRjaGlsZC1tYXAge1xuICAgIEBpZiAobm90IG1hcC1oYXMta2V5KCRyZXN1bHQsICRrZXkpKSBvciAodHlwZS1vZihtYXAtZ2V0KCRyZXN1bHQsICRrZXkpKSAhPSB0eXBlLW9mKCR2YWx1ZSkpIG9yIChub3QgKHR5cGUtb2YobWFwLWdldCgkcmVzdWx0LCAka2V5KSkgPT0gbWFwIGFuZCB0eXBlLW9mKCR2YWx1ZSkgPT0gbWFwKSkge1xuICAgICAgJHJlc3VsdDogbWFwLW1lcmdlKCRyZXN1bHQsICgka2V5OiAkdmFsdWUpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXN1bHQ6IG1hcC1tZXJnZSgkcmVzdWx0LCAoJGtleTogbm9uLWRlc3RydWN0aXZlLW1hcC1tZXJnZShtYXAtZ2V0KCRyZXN1bHQsICRrZXkpLCAkdmFsdWUpKSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAkdGhlbWVNYXAgOiByZWN1cnNpdmUtbWFwLW1lcmdlKCRkZWZhdWx0VGhlbWVWYWx1ZXMsICR2YWx1ZXMpO1xuICAkdGhlbWVzOiBtYXAtbWVyZ2UoJHRoZW1lcywgKCR0aGVtZTogJHRoZW1lTWFwKSlcbn1cblxuJGJyZWFrcG9pbnRzOiAoXG4gICAgICAgIHNtYWxsOiAwLFxuICAgICAgICBzbWVkaXVtOiA0MDBweCxcbiAgICAgICAgbWVkaXVtOiA2NDBweCxcbiAgICAgICAgbGFyZ2U6IDEwMjRweCxcbiAgICAgICAgeGxhcmdlOiAxMjAwcHgsXG4gICAgICAgIHh4bGFyZ2U6IDE0NDBweCxcbik7XG5cbiRtYXJnaW5zOiAoXG4gICAgICAgIHNtYWxsOiAwLjYyNXJlbSxcbiAgLy9zbWVkaXVtOiAwLjYyNXJlbSxcbiAgICAgICAgbWVkaXVtOiAwLjkzNzVyZW0sXG4gIC8vbGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94bGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94eGxhcmdlOiAwLjkzNzVyZW0sXG4pO1xuXG4kcm90YXRpb25EZWdyZWVzOiAoOTAgMTgwIDI3MCAzNjApO1xuJGFuaW1hdGlvbkR1cmF0aW9uOiAuMjVzO1xuXG4vLyRkZWdyZWVNYXRyaXg6IChcbi8vICAgICAgICAvLzA6bWF0cml4KDEsIDAsIDAsIDEsIDAsIDApLFxuLy8gICAgICAgIDA6cm90YXRlKDBkZWcpLFxuLy8gICAgICAgIDkwOm1hdHJpeCgwLCAxLCAtMSwgMCwgMCwgMCksXG4vLyAgICAgICAgMTgwOm1hdHJpeCgtMSwgMCwgMCwgLTEsIDAsIDApLFxuLy8gICAgICAgIDI3MDptYXRyaXgoMCwgLTEsIDEsIDAsIDAsIDApLFxuLy8gICAgICAgIC8vMzYwOm1hdHJpeCgwLjk5OTk5LCAwLCAwLCAwLjk5OTk5LCAwLCAwKSxcbi8vICAgICAgICAvLzQ1MDptYXRyaXgoMCwgMSwgLTEsIDAsIDAsIDApLFxuLy8gICAgICAgICAgMzYwOnJvdGF0ZSgzNjBkZWcpLFxuLy8gICAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuLy8pO1xuJGRlZ3JlZU1hdHJpeDogKFxuICAgICAgICAwOnJvdGF0ZSgwZGVnKSxcbiAgICAgICAgOTA6cm90YXRlKDkwZGVnKSxcbiAgICAgICAgMTgwOnJvdGF0ZSgxODBkZWcpLFxuICAgICAgICAyNzA6cm90YXRlKDI3MGRlZyksXG4gICAgICAgIDM2MDpyb3RhdGUoMzYwZGVnKSxcbiAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuKTsiLCIkaW52YWxpZEJveFNoYWRvdzogMCAwIDJweCAycHggI2ZmNjc3NjtcbiRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjogcmdiKDIzMCwgMjMwLCAyMzApO1xuJGlucHV0Qm9yZGVyQm90dG9tOiBzb2xpZCAxcHggIzYyNjI2MjtcblxubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sXG4gIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sXG4gIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT0ndGV4dCddLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogJGlucHV0Qm9yZGVyQm90dG9tO1xuICAgIG91dGxpbmU6IDA7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcblxuICAgICY6aW52YWxpZCB7XG4gICAgICBib3gtc2hhZG93OiAkaW52YWxpZEJveFNoYWRvdztcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b206ICRpbnB1dEJvcmRlckJvdHRvbTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG5cbiAgICAgICY6aW52YWxpZCB7XG4gICAgICAgIGJveC1zaGFkb3c6ICRpbnZhbGlkQm94U2hhZG93O1xuICAgICAgfVxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpLCAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIHRvcDogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgfiBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGJvdHRvbTogMTBweDtcbiAgICAgIHRvcDogN3B4O1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcbiAgICAgIGNvbG9yOiAjNjI2MjYyO1xuICAgIH1cbiAgfVxuXG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IDEwcmVtO1xuICAgIC8vYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMzYsIDEzNiwgMTM2LCAwLjMxKTtcbiAgICAvL2JveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICB9XG5cbiAgW3R5cGU9XCJjaGVja2JveFwiXS5iZWZvcmUtdGV4dCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ+Zm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuJG5hdkNvbG9yQmxhY2s6ICMwMDAgIWRlZmF1bHQ7XG4kbmF2Qm9yZGVyQ29sb3JCbGFjazogIzdGN0Y3RiAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kQmxhY2s6ICNmZmYgIWRlZmF1bHQ7XG5cbiRuYXZDb2xvcldoaXRlOiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yV2hpdGU6ICMxZTFjMWMgIWRlZmF1bHQ7XG4kbmF2QmFja2dyb3VuZFdoaXRlOiAjMDAwICFkZWZhdWx0O1xuXG4kbmF2Q29sb3JEZWZhdWx0OiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yRGVmYXVsdDogIzFlMWMxYyAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kRGVmYXVsdDogIzAwMCAhZGVmYXVsdDtcblxuJG5hdkJhY2tncm91bmRXaXRoSW1hZ2U6IHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG5uYXYudG9wLWJhciB7XG4gIHotaW5kZXg6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmREZWZhdWx0O1xuICBjb2xvcjogJG5hdkNvbG9yRGVmYXVsdDtcbiAgc3Ryb2tlOiAkbmF2Q29sb3JEZWZhdWx0O1xuICBwYWRkaW5nOiAwO1xuXG4gICY6bm90KC53aXRoLWltYWdlKSB7XG5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCwgJHZhbHVlIGluICRtYXJnaW5zIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLSR2YWx1ZTtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgKyAjezIqJHZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiBzcGFuIHtcbiAgICA+IHNwYW4ge1xuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmFjay1idXR0b24ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDAuNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgfVxuXG4gICAgICAmLmhpZGRlbiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudG9wLWJhci10aXRsZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgIH1cblxuICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHotaW5kZXg6IDg5OTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgLm1lbnUtaWNvbiB7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvckRlZmF1bHQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JEZWZhdWx0LCAwIDE0cHggMCAkbmF2Q29sb3JEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5tZW51LWljb24ge1xuICAgICAgICAvL25vaW5zcGVjdGlvbiBDc3NJbnZhbGlkUHJvcGVydHlWYWx1ZVxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLXdlYmtpdC1iYXNlbGluZS1taWRkbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIC8vcmlnaHQ6IC0xMDAlO1xuICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dDtcblxuICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3JEZWZhdWx0O1xuICAgICAgICAvL3BhZGRpbmc6IDAuMnJlbTtcbiAgICAgICAgcGFkZGluZzogNC41cmVtIDEuNjVyZW0gMHJlbSAyLjc1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICByaWdodDogLTEwMDAlOyAvL2bDvHIga2xlaW5lIEJpbGRzY2hpcm1lLCB0YXVjaHQgZXMgcmVjaHRzIHdpZWRlciBhdWYsIGZhbGxzIG51ciAxMDAlXG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4xNXJlbTtcblxuICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJi5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuXG4gICAgICAgICAgICB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICAgICAgdG9wOiBhdXRvO1xuXG4gICAgICAgICAgICAgID4gbGksID4gLmNsb3NlLWxpc3RlbmVyIHtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gYTphZnRlciB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICBib3JkZXI6IDZweCBpbnNldDtcbiAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZmZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgICAgKyBzcGFuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICAgICAgICAmLnNtZWRpdW0ge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAmLm1lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAgICYubGFyZ2Uge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYubmV2ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmFsd2F5cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5uYXZiYXItbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiBpbml0aWFsO1xuXG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHotaW5kZXg6IDkwMDA7XG5cbiAgICAgIGEge1xuICAgICAgICBpbWcgKyBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuXG4gICAgICAgICYuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQge1xuICAgICAgICAgIHotaW5kZXg6IDkwMDE7XG4gICAgICAgIH1cblxuICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5uZXZlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubWVudSwgJi5tZW51IHtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIC8vdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC42OHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm5vdCguaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNjhyZW07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuaW1nIGEge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkgPiB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XG5cbiAgICAgICAgICBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkub3BlbnMtcmlnaHQgPiBhIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgcmlnaHQ6IDAuMXJlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc3VibWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgJi53aXRoLWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdpdGhJbWFnZTtcblxuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cywgYmFja2dyb3VuZCAwLjBzO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJhY2tncm91bmQgMC4wcztcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgIH1cblxuICAgIC5iYWNrZ3JvdW5kLWltZyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLSR2YWx1ZTtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtaW4td2lkdGg6IDIuNSokdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHNwYW4ge1xuICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcblxuICAgICAgPiBzcGFuID4gc3BhbiB7XG4gICAgICAgIC8vQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIC8vICBAaW5jbHVkZSBicmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgICAgIC8vICAgIHBhZGRpbmctbGVmdDogJHZhbHVlO1xuICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IDIqJHZhbHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIC8vfVxuICAgICAgICAvL31cbiAgICAgIH1cblxuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICB9XG5cbiAgICAgIC50b3AtYmFyLXRpdGxlIHtcblxuICAgICAgfVxuXG4gICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyLWNvbnRhaW5lciB7XG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgei1pbmRleDogOTEwMDtcbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG5cbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5jb2xvci1ibGFjayB7XG4gICAgICBjb2xvcjogJG5hdkNvbG9yQmxhY2s7XG4gICAgICBzdHJva2U6ICRuYXZDb2xvckJsYWNrO1xuXG4gICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG5hdkJvcmRlckNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgICAubWVudS1pY29uOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JCbGFjaywgMCAxNHB4IDAgJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgY29sb3I6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgc3Ryb2tlOiAkbmF2Q29sb3JXaGl0ZTtcblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICAgIC5oaWRkZW4tbWVudSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRuYXZCb3JkZXJDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgLm1lbnUtaWNvbjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgN3B4IDAgJG5hdkNvbG9yV2hpdGUsIDAgMTRweCAwICRuYXZDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5zdWJtZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnNvbGlkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kRGVmYXVsdDtcblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLy9iYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICAgIH1cblxuICAgICAgICAudG9wLWJhci10aXRsZSB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItbWVudS12aXNpYmxlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuXG4gICAgICAgIH1cblxuICAgICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2Qm9yZGVyQ29sb3JCbGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLW1lbnUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5jb2xvci1ibGFjayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kQmxhY2s7XG4gICAgICB9XG5cbiAgICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyNsb2dvIHtcbi8vICBtYXgtd2lkdGg6IDJyZW07XG4vLyAgdHJhbnNpdGlvbjogbm9uZTtcbi8vfVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5kcm9wZG93bi5tZW51IC5hY2NvcmRpb24tbWVudSAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50Om5vdCguaGFzLXN1Ym1lbnUtdG9nZ2xlKSxcbiNuYXZiYXItbWVudS1oaWRkZW4gLmFjY29yZGlvbi1tZW51IC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4ge1xuICBhIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAwLjFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwgYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUuaXMtYWNjb3JkaW9uLXN1Ym1lbnUge1xuICBtYXJnaW4tbGVmdDogMC43cmVtO1xufVxuXG4ubWVudSB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgdHJhbnNpdGlvbjogMC4yNXM7XG4gIC8vb3ZlcmZsb3cteTpoaWRkZW47XG59XG5cblxuI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUgYnV0dG9uIHtcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG59XG5cbi5kcm9wZG93bi5tZW51ID4gbGkuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50IHtcbiAgLy8+IGE6YWZ0ZXIge1xuICAvLyAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAvL31cblxuICA+IHVsLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cblxuI25hdmJhci1mcmFnbWVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubG9nbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAubG9nby1pbWcge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICAgIG1heC13aWR0aDogMi4zNXJlbTtcbiAgfVxufVxuIiwiJGJvcmRlci1jb2xvcjogI0U2RTZFNjtcblxuLnRhYi1mcmFnbWVudCB7XG4gIC50YWItbmFtZXMge1xuICAgIC50YWItYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIHBhZGRpbmc6IDAuM3JlbTtcblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWItY29udGVudCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIC50YWItc2l0ZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnRhYi1idXR0b24tdGVtcGxhdGUsIC50YWItc2l0ZS10ZW1wbGF0ZXtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJvcmRlci1ib3R0b20ge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICB9XG59IiwiLmFscGhhYmV0aWMtbGlzdHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1jb250YWluZXJ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1zaWRlYWxwaGFiZXR7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC5hbHBoYWJldC1zY3JvbGwtdG8ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgaGVpZ2h0OiAzLjglO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pe1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi53aW5kb3ctY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2IxYjFiMTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjdXJzb3I6IGdyYWI7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMTByZW07XG4gIG1pbi1oZWlnaHQ6IDNyZW07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB6LWluZGV4OiAxMDAwO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgJi5hY3RpdmUtd2luZG93e1xuICAgIHotaW5kZXg6IDExMDA7XG4gIH1cblxuICAud2luZG93LXJlc2l6ZSB7XG4gICAgJHJlc2l6ZVdpZHRoOiA0cHg7XG5cbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICYuZWRnZSB7XG4gICAgICB3aWR0aDogJHJlc2l6ZVdpZHRoO1xuICAgICAgaGVpZ2h0OiAkcmVzaXplV2lkdGg7XG5cbiAgICAgICYubnd7XG4gICAgICAgIGN1cnNvcjogbnctcmVzaXplO1xuICAgICAgfVxuICAgICAgJi5uZXtcbiAgICAgICAgY3Vyc29yOiBuZS1yZXNpemU7XG4gICAgICB9XG4gICAgICAmLnN3e1xuICAgICAgICBjdXJzb3I6IHN3LXJlc2l6ZTtcbiAgICAgIH1cbiAgICAgICYuc2V7XG4gICAgICAgIGN1cnNvcjogc2UtcmVzaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAmLmJvdHRvbSwgJi50b3B7XG4gICAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcbiAgICAgIGhlaWdodDogJHJlc2l6ZVdpZHRoO1xuICAgIH1cbiAgICAmLmxlZnQsICYucmlnaHR7XG4gICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgIHdpZHRoOiAkcmVzaXplV2lkdGg7XG4gICAgfVxuICB9XG5cbiAgI3RpdGxlIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAvL21hcmdpbjogMCAwIDAuNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAvL2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYjZiNmI2O1xuICB9XG5cbiAgI3RpdGxlLWJ1dHRvbnMge1xuICAgIC50aXRsZS1idXR0b24ge1xuICAgICAgbWF4LWhlaWdodDogMXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJi5tb3Zpbmcge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gIH1cblxuICAmLm1pbmltaXplZCB7XG4gICAgcGFkZGluZzogMC4ycmVtO1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgICAud2luZG93IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxle1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAjdGl0bGUtYnV0dG9ucyAudGl0bGUtYnV0dG9uLmhpZGUtbWluaW1pemVke1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmLm1heGltaXplZCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLW1heGltaXplZHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5wb3B1cCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLXBvcHVwe1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAud2luZG93IHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBjdXJzb3I6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8vbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgLy9tYXgtd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG59IiwiQGltcG9ydCBcInRvYXN0XCI7XG5AaW1wb3J0IFwiZGlhbG9nXCI7XG5AaW1wb3J0IFwiZm9ybVwiO1xuQGltcG9ydCBcIm5hdmJhclwiO1xuQGltcG9ydCBcInN3aXBlRnJhZ21lbnRcIjtcbkBpbXBvcnQgXCJ0YWJiZWRGcmFnbWVudFwiO1xuQGltcG9ydCBcImFscGhhYmV0aWNMaXN0XCI7XG5AaW1wb3J0IFwiYWJzdHJhY3RXaW5kb3dcIjtcblxuLm1heC1oZWlnaHQtMTAwe1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn0iLCIkcmlnaHRzOiBbYWRtaW4sIGxvZ2dlZEluLCBsb2dnZWRPdXQsIG9ubGluZSwgb2ZmbGluZSwgZGVmYXVsdCBdO1xuXG5ib2R5IHtcbiAgQGVhY2ggJHJpZ2h0IGluICRyaWdodHMge1xuICAgICY6bm90KC5hY2Nlc3MtI3skcmlnaHR9KSAuYWNjZXNzLSN7JHJpZ2h0fSB7XG4gICAgICBkaXNwbGF5OiBub25lXG4gICAgfVxuICB9XG59XG4iLCIuc2hhcmUtaWNvbiB7XG4gIHdpZHRoOiAxLjVyZW07XG4gIG1heC13aWR0aDogMS41cmVtO1xuICBtYXJnaW46IDAuMXJlbTtcblxuICBzdmd7XG4gICAgd2lkdGg6IDEuNXJlbTtcbiAgICBtYXgtd2lkdGg6IDEuNXJlbTtcbiAgfVxufVxuIiwiLy9AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3VuZGF0aW9uXCI7XG5cbiosIDphZnRlciwgOmJlZm9yZSB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5cbmh0bWwge1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAvL2ZvbnQtc2l6ZTogMThweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbn1cblxuLm1heC1oZWlnaHQge1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBiYWNrZ3JvdW5kOiAjZmVmZWZlO1xuICBjb2xvcjogIzBhMGEwYTtcbn1cblxuZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogI2Q4ZDhkOCBzb2xpZCAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRvcC1iYXIgLnRvcC1iYXItdGl0bGUgc3Ryb25nIHtcbiAgLy9tYXJnaW4tdG9wOiA3cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyptYXJnaW4tbGVmdDogOHB4OyovXG59XG5cbm5hdi50b3AtYmFyIHtcblxuICBjb2xvcjogI0ZGRjtcbiAgLy9iYWNrZ3JvdW5kOiAjM0Y1MUI1O1xuICAvL2JhY2tncm91bmQ6IHJlZDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCA5cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgNHB4IDJweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgcGFkZGluZzogMC42cmVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuYnV0dG9uLmJ1dHRvbiwgYS5idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIC8vYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICAmLmRpc2FibGVkLCAmLmRpc2FibGVkOmhvdmVyLCAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6IHJlZDtcbiAgfVxuICAmOmZvY3VzLCAmOmhvdmVyIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICNlMDAwMDA7XG4gIH1cbn1cblxuLmZpbGwtbWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAmLnZlcnRpY2FsIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG4gIC5ncm93IHtcbiAgICBmbGV4OiAxO1xuICB9XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvL2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBkaXNwbGF5OiBmbGV4O1xuICAvL21hcmdpbjogYXV0bztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgPiAqIHtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG59XG5cbi5tZW51IGEsIC5kcm9wZG93bi5tZW51IGEge1xuICBwYWRkaW5nOiAuNHJlbSAuNXJlbVxufVxuXG5zdmcgcGF0aCB7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuZGl2Lm1haW5Db250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGZsZXg6IDE7XG4gIG1hcmdpbjogMC41cmVtO1xuICA+IC5yb3csICNtYWluLWNvbnRlbnQsICNzaXRlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICAvL2xlZnQ6IC42MjVyZW07XG4gICAgcmlnaHQ6IDA7XG4gICAgLy9yaWdodDogLjYyNXJlbTtcbiAgfVxufVxuXG4uaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ucmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG5cbiNsb2dvLWltZyB7XG4gIG1heC1oZWlnaHQ6IDIuMnJlbTtcbn1cblxuYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYS5oaWRkZW4tbGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmxhYmVsIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYWxpZ24tcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLnZpZXctcGFuZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubG9hZGVyIHtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICYuaW5saW5lIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHRvcDogaW5pdGlhbDtcbiAgICBwb3NpdGlvbjogaW5pdGlhbDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gICYuc21hbGwgI3NwaW5uZXIge1xuXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpO1xuICB9XG5cbiAgI3NwaW5uZXIge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgc3Ryb2tlOiAjYjcxYzFhO1xuICAgIHN0cm9rZS13aWR0aDogM3B4O1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcbiAgICBhbmltYXRpb246IGxpbmUgMS42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlLCByb3RhdGUgMS42cyBsaW5lYXIgaW5maW5pdGU7XG4gIH1cbn1cblxuQGtleWZyYW1lcyByb3RhdGUge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDUwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxpbmUge1xuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogNjUuOTczLCAyMS45OTExO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTY1Ljk3MztcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIH1cbn1cblxuI3ByaW50LWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uYWN0aW9uLWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDEuN3JlbTtcbiAgbWFyZ2luLWxlZnQ6IDAuNHJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjRyZW07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICRob3ZlckNvbG9yRGFyaztcbiAgfVxufVxuXG4udmNlbnRlci1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgLy9kaXNwbGF5OiBmbGV4O1xuICAvL2p1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvL2ZsZXgtd3JhcDogd3JhcDtcblxuICAudmNlbnRlciB7XG4gICAgLy9kaXNwbGF5OiBmbGV4O1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG59XG5cbi5tYXgtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cblxuaW5wdXQsIGJ1dHRvbiB7XG4gIGxldHRlci1zcGFjaW5nOiAxcHggIWltcG9ydGFudDtcbn1cblxuLm5vLXBhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbi5jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIG5hdiwgLm1haW5Db250YWluZXIsIGZvb3RlciwgI3N0eWxlcyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gICNwcmludC1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5vdmVyZmxvdy15LWF1dG8ge1xuICBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7XG59XG5cbi5yb3cubm8tYWZ0ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBpbml0aWFsO1xufVxuXG4ubWFyZ2luLWJvdHRvbSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSkge1xuICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoeGxhcmdlKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNXJlbTtcbiAgfVxufVxuXG4uZm9udC1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC43ZW07XG59XG5cbi5ib3JkZXItYm90dG9tIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRwcm90b3R5cGUtYm9yZGVyLWNvbG9yO1xufVxuXG4uYm9yZGVyLXJpZ2h0IHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbi5ib3JkZXItbGVmdCB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbmltZy5sb2dvIHtcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDEuMXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5hbGlnbi1jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbmhyLnNlcGFyYXRvciB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuXG4uYnV0dG9uLWxpbmUge1xuICBkaXNwbGF5OiBmbGV4O1xuICAuYnV0dG9uIHtcbiAgICBmbGV4OiAxO1xuICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcHg7XG4gICAgcGFkZGluZzogMC41cmVtIDAuNzdyZW07XG4gIH1cbn1cblxuLnNtYWxsLXNtYWxsIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgZm9udC1zaXplOiBzbWFsbDtcbiAgfVxufVxuXG5zZWxlY3Qge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjNyZW07XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubm8tdHJhbnNpdGlvbiB7XG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbn1cblxuaW1nLmFjdGlvbi1pbWFnZSB7XG4gIG1heC1oZWlnaHQ6IDEuNHJlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5pbWcuYmFjay1idXR0b24ge1xuICBtYXgtaGVpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xufVxuXG4ubm8tbWFyZ2luLWJvdHRvbSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4iLCJcbiRob3ZlckNvbG9yOiAjZjJmMmYyO1xuJGhvdmVyQ29sb3JEYXJrOiAjZThlOGU4O1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIHJlZDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJlZCxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmYwMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzg3MDAxNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjYjcxYzFhLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBibHVlOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmx1ZSxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMmM1OGFlLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzFhMzA2MixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjNjczQUI3LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBncmVlbjooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGdyZWVuLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDgwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMDAzNjEzLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDgwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIHBpbms6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBwaW5rLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjY5YjQsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjNzAzNzRhLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNmZjY5YjQsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMzNTM1MzUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTsiLCIvL0BpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuLnNldHRpbmdzLWNvbnRhaW5lciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIHBhZGRpbmc6IDAuM3JlbTtcblxuICAjc2V0dGluZ3MtZnJhZ21lbnRzLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG4gICAgfVxuXG4gICAgI3NldHRpbmdzLWZyYWdtZW50cyB7XG4gICAgICA+ICoge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uc3dpdGNoIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogaW5pdGlhbDtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICBmb250LXNpemU6IDAuNmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgZm9udC1zaXplOiAwLjdlbTtcbiAgfVxuXG4gIGlucHV0IHtcblxuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAmOmNoZWNrZWQgKyAuc2xpZGVyIHtcbiAgICAgIC8vYmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMztcbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuNWVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzICsgLnNsaWRlciB7XG4gICAgICAvL2JveC1zaGFkb3c6IDAgMCAxcHggIzIxOTZGMztcbiAgICB9XG4gIH1cblxuICAuc2xpZGVyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogM2VtO1xuICAgIGhlaWdodDogMS41ZW07XG4gICAgYm9yZGVyLXJhZGl1czogMS41ZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYztcbiAgICB0cmFuc2l0aW9uOiAuNHM7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBtYXJnaW4tdG9wOiAwO1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGhlaWdodDogMS4xZW07XG4gICAgICB3aWR0aDogMS4xZW07XG4gICAgICBsZWZ0OiAwLjE1ZW07XG4gICAgICBib3R0b206IDAuMTVlbTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgdHJhbnNpdGlvbjogLjRzO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIH1cbiAgfVxuXG4gIGltZywgc3ZnIHtcbiAgICB3aWR0aDogMS40ZW07XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xuXG4gICAgcGF0aCB7XG4gICAgICBzdHJva2UtY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbmxhYmVsIHtcbiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDtcblxufVxuXG4uc2V0dGluZy1yb3c6bm90KC5oaWRkZW4pIHtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAuNXJlbSAwLjRyZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgd2lkdGg6IDEwMCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogcmdiYSgxOTUsIDE5NSwgMTk1LCAwLjEzKTtcblxuICA+ICoge1xuICAgIGZsZXg6IDE7XG4gIH1cblxuICBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cbiIsIi56Zi1ncmVlbiB7XG4gIGNvbG9yOiAjNjhiNjA0XG59XG5cbi5jb2x1bW46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSwgLmNvbHVtbnM6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIGZsb2F0OiBsZWZ0XG59XG5cbmlucHV0W3R5cGU9Y2hlY2tCb3hdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIHdpZHRoOiAxMDAlXG59XG5cblt0eXBlPXN1Ym1pdF0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzlweDtcbiAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gIHBhZGRpbmc6IDhweDtcbiAgcGFkZGluZzogLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIG1hcmdpbjogMCAwIDE2cHg7XG4gIG1hcmdpbjogMCAwIDFyZW07XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICMwYTBhMGE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCBoc2xhKDAsIDAlLCA0JSwgLjEpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IC41cywgYm9yZGVyLWNvbG9yIC4yNXMgZWFzZS1pbi1vdXQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lXG59XG5cbmZvcm0gdWwgbGkge1xuICBjb2xvcjogcmVkO1xuICBmb250LXNpemU6IDEyLjhweDtcbiAgZm9udC1zaXplOiAuOHJlbVxufVxuXG4uYnV0dG9uLWRyb3Bkb3duOmFmdGVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjMDAwIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6IC40ZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAuNGVtO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICB3aWR0aDogMDtcbiAgcmlnaHQ6IDFlbVxufVxuXG4uYnV0dG9uLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy1yaWdodDogMmVtXG59XG5cbi5idXR0b24tZHJvcGRvd24ub3BlbjphZnRlciB7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzAwMDtcbiAgdG9wOiAwXG59XG5cbmEudWktZGF0ZXBpY2tlci1uZXh0LCBhLnVpLWRhdGVwaWNrZXItcHJldiB7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50XG59XG5cbmRpdi5jb250YWluZXIgYS5uYXZiYXItYnJhbmQgPiBpbWcge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbi1yaWdodDogNHB4XG59XG5cbnVsLm1lbnUucGxhaW4gbGkuYWN0aXZlIGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xuICBjb2xvcjogIzAwMFxufVxuXG51bC5tZW51LnBsYWluIGxpIGEge1xuICBjb2xvcjogIzAwMFxufVxuXG51bC5tZW51LnBsYWluIGxpIGE6aG92ZXIge1xuICBjb2xvcjogIzUyNTI1MlxufVxuXG51bC5zdWJtZW51IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiY2JjYmM7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYmNiY2JjO1xuICBtYXJnaW4tbGVmdDogMTBweFxufVxuXG4jY29va2llLWNvbXBsaWFuY2Uge1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCAwO1xuICBwYWRkaW5nOiAwLjNyZW0gMDtcbiAgI2Nsb3NlLWNvb2tpZS1tc2cge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgIHBhZGRpbmc6IDAuNHJlbSAwLjhyZW07XG4gIH1cbn1cblxuLm1lbnUtY29udGFpbmVyIC5idXR0b25cbntcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAyMCB7XG4gICRmYWN0b3I6ICRpLzIwO1xuICAkdmFsdWU6IHBlcmNlbnRhZ2UoJGZhY3Rvcik7XG4gIC5oZWlnaHQtI3skZmFjdG9yKjEwMH0ge1xuICAgIGhlaWdodDogJHZhbHVlO1xuICB9XG4gIC5tYXgtaGVpZ2h0LSN7JGZhY3RvcioxMDB9IHtcbiAgICBtYXgtaGVpZ2h0OiAkdmFsdWU7XG4gIH1cbiAgLndpZHRoLSN7JGZhY3RvcioxMDB9IHtcbiAgICB3aWR0aDogJHZhbHVlO1xuICB9XG4gIC5tYXgtd2lkdGgtI3skZmFjdG9yKjEwMH0ge1xuICAgIG1heC13aWR0aDogJHZhbHVlO1xuICB9XG59XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59IiwiKiB7XG4gIC8vdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2Utb3V0LCBjb2xvciAuMjVzIGVhc2Utb3V0O1xuICB0cmFuc2l0aW9uOiAuMjVzIGVhc2Utb3V0LCBjb2xvciAuMjVzIGVhc2Utb3V0O1xufVxuXG5AbWl4aW4gZGVmaW5lVGhlbWUoJHRoZW1lKSB7XG4gIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpO1xuXG4gICNjb29raWUtY29tcGxpYW5jZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0VGhlbWVDb2xvcik7XG4gICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgIGEubGluayB7XG4gICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0NvbG9yKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaWdodExpbmtDb2xvcik7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaWdodExpbmtIb3ZlckNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0hvdmVyQ29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhLmxpbmsge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpbmtDb2xvcik7XG4gICAgYm9yZGVyLWJvdHRvbTogbWFwLWdldCgkdGhlbWUsIGxpbmtCb3JkZXJCb3R0b20pO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaW5rSG92ZXJDb2xvcik7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0hvdmVyQ29sb3IpO1xuICAgIH1cbiAgfVxuICAubG9hZGVyICNzcGlubmVyIHtcbiAgICBzdHJva2U6IG1hcC1nZXQoJHRoZW1lLCBzcGlubmVyQ29sb3IpO1xuICB9XG5cbiAgbmF2LnRvcC1iYXIge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbmF2QmFyVGV4dENvbG9yKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcik7XG4gIH1cbiAgLnRvcC1iYXIge1xuICAgIHVsIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKSAhaW1wb3J0YW50O1xuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbmF2QmFyVGV4dENvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYnV0dG9uLmJ1dHRvbiwgYS5idXR0b24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAmLmRpc2FibGVkLCAmLmRpc2FibGVkOmhvdmVyLCAmLmRpc2FibGVkOmZvY3VzLCAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICB9XG4gIH1cbiAgLnN3aXRjaCB7XG4gICAgaW5wdXQge1xuICAgICAgJjpjaGVja2VkICsgLnNsaWRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgICY6Zm9jdXMgKyAuc2xpZGVyIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDFweCBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxhYmVsIHtcbiAgICBjb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gIH1cbiAgLmJhY2tncm91bmQgLm1vZGFsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICAuZmlsbC1jb2xvciwgJi5maWxsLWNvbG9ye1xuICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgIH1cbiAgICAuZmlsbC1iYWNrZ3JvdW5kLCAmLmZpbGwtYmFja2dyb3VuZHtcbiAgICAgIGZpbGw6ICNmZWZlZmU7XG4gICAgfVxuICB9XG5cbiAgLy9Gb3Jtc1xuICBsYWJlbCB7XG4gICAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT10ZXh0XSwgaW5wdXQ6bm90KFt0eXBlXSkge1xuICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKX07XG4gICAgICBjb2xvcjoje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgICAgfVxuICAgICAgJjpmb2N1cywgJi5ub3RFbXB0eTpub3QoOmZvY3VzKSB7XG4gICAgICAgIH4gc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB+IHNwYW4ge1xuICAgICAgICBjb2xvcjogI3thZGp1c3RfY29sb3IoIG1hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpLCAkYWxwaGE6IC0wLjM1KX07XG4gICAgICB9XG4gICAgfVxuICAgIHRleHRhcmVhIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICBpbnB1dC5ub3RFbXB0eTppbnZhbGlkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAje2FkanVzdF9jb2xvciggbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpLCAkYWxwaGE6IC0wLjM1KX07XG4gIH1cbn1cblxuYm9keSB7XG4gIEBlYWNoICR0aGVtZSwgJHZhbHVlcyBpbiAkdGhlbWVzIHtcbiAgICBAaWYgKG1hcC1nZXQoJHZhbHVlcywgY2xhc3MpID09IFwiXCIpIHtcbiAgICAgIEBpbmNsdWRlIGRlZmluZVRoZW1lKCR2YWx1ZXMpXG4gICAgfSBAZWxzZSB7XG4gICAgICAmLiN7bWFwLWdldCgkdmFsdWVzLCBjbGFzcyl9IHtcbiAgICAgICAgQGluY2x1ZGUgZGVmaW5lVGhlbWUoJHZhbHVlcylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIkBrZXlmcmFtZXMgdHV0b3JpYWxQb2ludGVyIHtcbiAgMCUge1xuICAgIHRvcDogMjUlO1xuICB9XG4gIDEwMCUge1xuICAgIHRvcDogNzUlO1xuICB9XG59XG5cbi50dXRvcmlhbC1ibGFua2V0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG5cbiAgei1pbmRleDogOTAwMTtcbiAgYmFja2dyb3VuZDogcmdiYSg1NSwgNTUsIDU1LCAwLjUxKTtcbn1cblxuLnR1dG9yaWFsIHtcbiAgLnR1dG9yaWFsLWJsYW5rZXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLnR1dG9yaWFsLXRleHQge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblxuICAgICoge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0xIHtcbiAgICAjbGV2ZWwge1xuICAgICAgLnNlZ21lbnQtcm93IHtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5zZWdtZW50LXBhcmVudDpudGgtY2hpbGQoMyksIC5zZWdtZW50LXBhcmVudDpudGgtY2hpbGQoMykucm90YXRpbmcge1xuICAgICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMSB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0yIHtcbiAgICAjbGV2ZWwge1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC50dXRvcmlhbC10ZXh0IC5zdGVwLTIge1xuICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gIH1cblxuICAmLnN0ZXAtMyB7XG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC50b3AtYmFyIHtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuaGVscC1hY3Rpb24ge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAvL3otaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggNXB4ICNmZmY7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTQge1xuICAgIC50dXRvcmlhbC10ZXh0IC5zdGVwLTQge1xuICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAjbGV2ZWwge1xuICAgICAgLnNlZ21lbnQtcm93IHtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQ7XG5cbiAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAuc2VnbWVudC1wYXJlbnQubGF5ZXItMiwgPiAuc2VnbWVudC1wYXJlbnQubGF5ZXItMi5yb3RhdGluZyB7XG4gICAgICAgICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgICAgICN0dXRvcmlhbC1wb2ludGVyIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDAuNmVtO1xuICAgICAgICAgICAgICBoZWlnaHQ6IDAuNmVtO1xuICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6IHJlZDtcblxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgICAgICAgICAgICAgbGVmdDogNzUlO1xuICAgICAgICAgICAgICAvL3JpZ2h0OiA1MCU7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgdG9wOiA3NSU7XG4gICAgICAgICAgICAgIC8vYm90dG9tOiA1MCU7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogdHV0b3JpYWxQb2ludGVyIDJzIGluZmluaXRlO1xuICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI3R1dG9yaWFsLXNpdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAjdHV0b3JpYWwtMSwgI3R1dG9yaWFsLTIsICN0dXRvcmlhbC0ze1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAwLjdyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICB9XG5cbiAgI3R1dG9yaWFsLTIgLmhlbHAtYWN0aW9ue1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiAgfVxuICAjdHV0b3JpYWwtMyAudHV0b3JpYWwtd3JhcHBlcntcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgICAgd2lkdGg6IDAuNmVtO1xuICAgICAgaGVpZ2h0OiAwLjZlbTtcblxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gICAgICBsZWZ0OiA3NSU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDc1JTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblxuICAgICAgYW5pbWF0aW9uOiB0dXRvcmlhbFBvaW50ZXIgMnMgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIkBtaXhpbiBhZGRUaGVtZURlZmluaXRpb24oJHRoZW1lKSB7XG4gICN0dXRvcmlhbC1wb2ludGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX07XG4gIH1cblxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgJi5pbi1tYWluLW1lbnUge1xuICAgICAgYmFja2dyb3VuZDogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICB9XG4gIH1cbiAgLnNlZ21lbnQuc2VnbWVudC1wYXJlbnQge1xuICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yMil9O1xuXG4gICAgJi5sYXllci0yIHtcbiAgICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgfVxuICB9XG5cbiAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgbGlnaHRUaGVtZUNvbG9yKX07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcil9ICFpbXBvcnRhbnQ7XG5cbiAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICAgLy9ib3JkZXItY29sb3I6ICAje21hcC1nZXQoJHRoZW1lLCBsaWdodFRoZW1lQ29sb3IpfTtcbiAgICAgIC8vYmFja2dyb3VuZC1jb2xvcjoje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX0gIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbiAgLnNlZ21lbnQ6bm90KC5zZWdtZW50LXJvdyk6bm90KC5zZWdtZW50LXRyaWFuZ2xlKSB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTs7XG5cbiAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICA+IC5zZWdtZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTs7XG5cbiAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKS0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSszNjApJTM2MCk7XG4gICAgICAgICAgICAgIEBpZiAkYW5pbWF0aW9uTmFtZT09MCB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6IDM2MDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKX0ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLy5zZXR0aW5nLXJvd3tcbiAgLy8gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gIC8vICAmOm5vdCguaGlkZGVuKTpmaXJzdC1jaGlsZHtcbiAgLy8gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgLy8gIH1cbiAgLy99XG59XG5cbmJvZHkge1xuICBAZWFjaCAkdGhlbWUsICR2YWx1ZXMgaW4gJHRoZW1lcyB7XG4gICAgQGlmIChtYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKSA9PSAnJykge1xuICAgICAgQGluY2x1ZGUgYWRkVGhlbWVEZWZpbml0aW9uKCR2YWx1ZXMpXG4gICAgfSBAZWxzZSB7XG4gICAgICAmLiN7bWFwLWdldCgkdmFsdWVzLCBjbGFzcyl9IHtcbiAgICAgICAgQGluY2x1ZGUgYWRkVGhlbWVEZWZpbml0aW9uKCR2YWx1ZXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kZWZhdWx0IHtcbiAgICAvL2JhY2tncm91bmQ6ICMwNzA3NmQ7XG4gICAgYmFja2dyb3VuZDogIzBmMGY0OTtcbiAgICAvL2JhY2tncm91bmQ6ICMxYzFjNDQ7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgICoge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgICAvL2JhY2tncm91bmQ6IHVybCgnLi4vaW1nL2JhY2tncm91bmQucG5nJyk7XG4gICAgLy9iYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIC8vYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuXG4gICAgI2xldmVsLW51bWJlci1jb250YWluZXIge1xuICAgICAgJi5pbi1tYWluLW1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNlZ21lbnQuc2VnbWVudC1wYXJlbnQge1xuICAgICAgJjpub3QoLmxheWVyLTIpIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDA1ZDA3O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwOSwgMjU1LCAxMjcsIDAuMikgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLy9iYWNrZ3JvdW5kOiByZ2JhKDkwLCAxNjQsIDYxLCAxKSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQyZmY0YSAhaW1wb3J0YW50O1xuXG4gICAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRhcmsge1xuICAgIC5zd2l0Y2gge1xuICAgICAgaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IGJsYWNrO1xuICAgICAgfVxuXG4gICAgICAuc2xpZGVyIHtcbiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggd2hpdGU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkLmxheWVyLTIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNTY1NjU2O1xuICAgIH1cblxuICAgIC5tb2RhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgfVxuICB9XG5cbiAgJi5ibGFjayB7XG4gICAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWQ5ZDlkICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6ICM2ZTZlNmUgIWltcG9ydGFudDtcblxuICAgICAgPiAuY2hpbGQtY29udGFpbmVyID4gLnNlZ21lbnQtbGVhZiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI2xvZ28ge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JleTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB9XG4gIH1cblxuICAvLy5zZXR0aW5nLXJvdzpub3QoLmhpZGRlbikge1xuICAvLyAgbGluZS1oZWlnaHQ6IDE7XG4gIC8vICBwYWRkaW5nLXRvcDogMC41ZW07XG4gIC8vICBwYWRkaW5nLWJvdHRvbTogMC41ZW07XG4gIC8vICB3aWR0aDogMTAwJTtcbiAgLy8gIGN1cnNvcjogcG9pbnRlcjtcbiAgLy8gIGJhY2tncm91bmQ6IHJnYmEoMTk1LCAxOTUsIDE5NSwgMC4xMyk7XG4gIC8vICAvL2Rpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLy99XG59XG4iLCIvL0BpbXBvcnQgXCJsaWIvX3JvdGF0ZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19zaGFyZS5zY3NzXCI7XG4vL0BpbXBvcnQgXCJsaWIvX3RhYnMuc2Nzc1wiO1xuQGltcG9ydCBcImxpYi9fY29yZS5zY3NzXCI7XG4vL0BpbXBvcnQgXCJsaWIvX2ZsYXNoTWVzc2VuZ2VyLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fZnJhbWV3b3JrLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3NldHRpbmdzU2l0ZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19zdHlsZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL190aGVtZS5zY3NzXCI7XG5AaW1wb3J0IFwidHV0b3JpYWxcIjtcbkBpbXBvcnQgXCJ3b3Jkcm90YXRvclRoZW1lXCI7XG5cblxuJHRleHQtc2hhZG93OiAwIDAuMnJlbSAwLjJyZW0gIzQ2NDY0NiwgMC42cmVtIDAuOHJlbSAwLjRyZW0gIzAwMDAwMDkwO1xuXG4ubm8tdHJhbnNpdGlvbntcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy9BY3Rpb25CYXJcbm5hdi50b3AtYmFyLnRpdGxlLWJhciB7XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjZyZW0gMDtcbn1cblxuI2xvZ28ge1xuICBtYXgtd2lkdGg6IDJyZW07XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbiNhY3Rpb24tYmFyIC50b3AtYmFyLXJpZ2h0IC5tZW51IC5hY3Rpb24uaW1nIGEge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICBpbWcge1xuICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgfVxufVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5yZWxhdGl2ZS1sZXZlbC1udW1iZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgI2xldmVsLW51bWJlci1jb250YWluZXIge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB9XG59XG5cbi8vYm9keS5kZWZhdWx0IC53b24gLmxldmVsLWNvdW50ZXIge1xuLy8gIHRyYW5zaXRpb24tZHVyYXRpb246IDFzO1xuLy8gIGJhY2tncm91bmQ6ICMwNmJkMDY7XG4vLyAgYm9yZGVyLWNvbG9yOiAjYzEwMDAwO1xuLy8gIC8vPiBhIHtcbi8vICAvLyAgY29sb3I6IGJsYWNrO1xuLy8gIC8vfVxuLy99XG5cbiNsZXZlbC1udW1iZXItY29udGFpbmVyLCAubGV2ZWwtY291bnRlciB7XG4gIHotaW5kZXg6IDE7XG4gIC8vdHJhbnNpdGlvbjogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpO1xuICBib3JkZXI6IDNweCBzb2xpZCB3aGl0ZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAvL3Zpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcblxuXG4gIGhlaWdodDogNDBweDtcbiAgd2lkdGg6IDQwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAmLmxldmVsLWNvdW50ZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMS44cmVtO1xuXG4gICAgJi5udW0tMTAge1xuICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgfVxuXG4gICAgJi5udW0tMTAwIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgIH1cblxuICAgICYubnVtLTEwMDAge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgIH1cbiAgfVxuXG4gICYuaW4tbWFpbi1tZW51IHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItY29sb3I6IGJsYWNrO1xuXG4gICAgaGVpZ2h0OiAxZW07XG4gICAgd2lkdGg6IDFlbTtcbiAgICBtaW4taGVpZ2h0OiAxZW07XG4gICAgbWluLXdpZHRoOiAxZW07XG4gICAgbWF4LWhlaWdodDogMWVtO1xuICAgIG1heC13aWR0aDogMWVtO1xuICB9XG5cbiAgYSB7XG4gICAgd2lkdGg6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgfVxuXG4gICNsZXZlbC1udW1iZXIsIGEge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxufVxuXG4kY29pblRvd2VyRGltZW5zaW9uOiAyOHB4O1xuLy9jb2luIGVsZW1lbnRcbi5jb2luLWNvdW50ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxLjZyZW07XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgfVxuXG4gIDphZnRlciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9pbWcvY29pblRvd2VyLnBuZycpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogJGNvaW5Ub3dlckRpbWVuc2lvbiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIHdpZHRoOiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIGhlaWdodDogJGNvaW5Ub3dlckRpbWVuc2lvbjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxufVxuXG4jY29pbi1jb250YWluZXIge1xuICBsaW5lLWhlaWdodDogMTtcblxuICAuY29pbiB7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICBtYXgtd2lkdGg6IDIwcHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSkge1xuICAgICAgbWF4LXdpZHRoOiAyNXB4O1xuICAgIH1cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgbWF4LXdpZHRoOiAzMHB4O1xuICAgIH1cbiAgfVxufVxuXG4vL1NlZ21lbnRzXG5cbkBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgJHN0YXJ0RGVncmVlOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMjcwKSUzNjApO1xuXG4gIEBrZXlmcmFtZXMgcm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgIDAlIHtcbiAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsICRzdGFydERlZ3JlZSl9O1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKX07XG4gICAgfVxuICB9XG4gIEBrZXlmcmFtZXMgcm90YXRlLXJldmVyc2UtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyhudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSs5MH1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSs5MCl9XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRzdGFydERlZ3JlZSs5MH1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJHN0YXJ0RGVncmVlKzkwKX07XG4gICAgfVxuICB9XG59XG5cbi5zZWdtZW50Om5vdCguc2VnbWVudC1yb3cpOm5vdCguc2VnbWVudC10cmlhbmdsZSkge1xuICAmLnJvdGF0aW5nIHtcbiAgICB6LWluZGV4OiAxMCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9O1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jezQ1MC0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX07XG4gICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKSs5MDtcbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucmV2ZXJzZSB7XG4gICAgICAgICAgLy9hbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3sobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSklMzYwKzkwfTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfTtcblxuICAgICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5zZWdtZW50IHtcbiAgICAgICAgICAgICAgLy9hbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3szNjAtIChudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpJTM2MCl9O1xuICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3soNTQwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSUzNjArOTB9O1xuICAgICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKS0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSszNjApJTM2MCkrOTA7XG4gICAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3soJGFuaW1hdGlvbk5hbWUrOTApJTM2MCs5MH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJjpub3QoLnJvdGF0aW5nKSB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjezM2MC0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX1kZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgMzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKX07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKTtcbiAgICAgICAgICAgICAgQGlmICRhbmltYXRpb25OYW1lPT0wIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogMzYwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRhbmltYXRpb25OYW1lfWRlZyk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJGFuaW1hdGlvbk5hbWUpfTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICAgICAgICAgICAmLnJvdGF0aW5nIHtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtI3skYW5pbWF0aW9uTmFtZX07XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgICAgICAgICAgICAmLnJldmVyc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3skYW5pbWF0aW9uTmFtZX07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiNsZXZlbCB7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2l0aW9uOiBub25lO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgLy93aWR0aDogMTAwJTtcblxuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbn1cblxuLnNlZ21lbnQge1xuXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogMDtcblxuICAmLnNlZ21lbnQtcm93IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJi5zZWdtZW50LWNvbHVtbiB7XG4gICAgcGFkZGluZy10b3A6IDRweDtcblxuICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LWxlYWYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiAxZW07XG4gICAgcGFkZGluZzogMC44ZW07XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZy10b3A6IDEwMCU7XG4gICAgfVxuXG4gICAgLmxlYWYtZWxlbWVudCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG5cbiAgICAgIC8vdGV4dC1zaGFkb3c6ICR0ZXh0LXNoYWRvdztcblxuICAgIH1cbiAgfVxuXG4gICYuc2VnbWVudC1wYXJlbnQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICNhOWE5YTk7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHBhZGRpbmc6IDFweDtcblxuICAgICYubGF5ZXItMiB7XG4gICAgICBib3JkZXI6IHNvbGlkIDNweCAjMDAwMDAwO1xuICAgIH1cbiAgfVxuXG4gICYuc2VnbWVudC10cmlhbmdsZSB7XG4gICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgID4gLnNlZ21lbnQtcGFyZW50IHtcbiAgICAgICAgLy9ib3JkZXI6IHNvbGlkIDNweCAjMDAwMDAwO1xuICAgICAgICAvL3Bvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy9Xb24tc2NyZWVuXG4jc2l0ZSA+IDpub3QoLndvbikge1xuICAuc2hvdy13aGVuLXdvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubGV2ZWwtY29udGFpbmVyIHtcbiAgLy9mbGV4OiAxO1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuXG4ud29uIHtcbiAgLmxldmVsLWNvbnRhaW5lciB7XG4gICAgLy9oZWlnaHQ6IDYwJTtcbiAgfVxuXG4gIC5zaG93LXdoZW4td29uIHtcbiAgICAvL3Zpc2liaWxpdHk6IGluaXRpYWw7XG4gIH1cblxuICAuc2hvdy13aGlsZS1wbGF5aW5nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgI3dvbi10ZXh0IHtcbiAgICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xuICB9XG5cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuI2NvbnRpbnVlLWJ1dHRvbiB7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAuNmVtO1xuICB9XG59XG5cbiNwbGF5LWJ1dHRvbiB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuXG4jaGVscC1idXR0b24ge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNGVtO1xuICBtYXgtd2lkdGg6IDNlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjJlbTtcbiAgICBtYXgtd2lkdGg6IDJlbTtcbiAgfVxufVxuXG4ubGluZS1oZWlnaHQtMSB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG5ib2R5IHtcbiAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNzaXRlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbmRpdi5tYWluQ29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuXG59XG5cbi8vI2ltZy1zb3VuZDpiZWZvcmUge1xuLy8gIGNvbnRlbnQ6IFwiXCI7XG4vLyAgbWF4LXdpZHRoOiAxLjRlbTtcbi8vICBiYWNrZ3JvdW5kOiB1cmwoJy4uL2ltZy9zcGVha2VyLnN2ZycpXG4vL31cblxuLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuI3NoYXJlLWJ1dHRvbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgc3ZnIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIH1cbn1cblxuc3ZnIHtcbiAgY29sb3I6IGJsYWNrO1xuXG4gIC5maWxsLWJhY2tncm91bmQge1xuICAgIGZpbGw6IHdoaXRlO1xuICB9XG59XG4iLCJAa2V5ZnJhbWVzIGp1bXAtYW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5qdW1wLWFuaW1hdGlvbiB7XG4gIGFuaW1hdGlvbi1uYW1lOiBqdW1wLWFuaW1hdGlvbjtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBub25lO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG59XG5cbiRkZWc6IDEwZGVnO1xuXG5Aa2V5ZnJhbWVzIHNoYWtlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDMzJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLSRkZWcpO1xuICB9XG4gIDY2JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbn1cblxuLnNoYWtlIC5sZWFmLWVsZW1lbnQge1xuXG4gIC8qIFN0YXJ0IHRoZSBzaGFrZSBhbmltYXRpb24gYW5kIG1ha2UgdGhlIGFuaW1hdGlvbiBsYXN0IGZvciAwLjUgc2Vjb25kcyAqL1xuICBhbmltYXRpb246IHNoYWtlIDAuMTVzO1xuXG4gIC8qIFdoZW4gdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZCwgc3RhcnQgYWdhaW4gKi9cbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG59IiwibmF2LnRvcC1iYXIge1xuICBwYWRkaW5nOiAwO1xuXG4gIEBlYWNoICRicmVha3BvaW50LCAkdmFsdWUgaW4gJG1hcmdpbnMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJHZhbHVlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtJHZhbHVlO1xuICAgICAgLy93aWR0aDogY2FsYygxMDAlICsgI3s0KiR2YWx1ZX0pO1xuICAgICAgLy9tYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7NCokdmFsdWV9KTtcbiAgICB9XG4gIH1cblxuICAmLndpdGgtaW1hZ2UgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiAuZ3JpZC1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIC8vcGFkZGluZy1yaWdodDogMDtcblxuICAgID4gLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgPiAuc21hbGwtMTJ7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICB1bCA+IGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAmLmxldmVsLWNvdW50ZXIge1xuICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuICAgIH1cbiAgfVxuXG59XG4iLCJcbi8vIEJsdWVcbi8vJHByaW1hcnlDb2xvcjogIzQyNzA4MTtcbi8vJHNlY29uZGFyeUNvbG9yOiAjNGQ1NzVhO1xuLy8kYWNjZW50Q29sb3I6ICNlM2FiNmU7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IGJsYWNrO1xuXG4gLy9CbHVlIGRpZmZlcmVudCBBY2NlbnRcbiRwcmltYXJ5Q29sb3I6ICM0MjcwODE7XG4kc2Vjb25kYXJ5Q29sb3I6ICM0ZDU3NWE7XG4kYWNjZW50Q29sb3I6ICNkM2U3ZWI7XG4kdGV4dENvbG9yOiB3aGl0ZTtcbiRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEJsYXUgSW52ZXJzXG4vLyRwcmltYXJ5Q29sb3I6ICM0ZDU3NWE7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzQyNzA4MTtcbi8vJGFjY2VudENvbG9yOiAjZTNhYjZlO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG5cbi8vJHByaW1hcnlDb2xvcjogIzZiODc3ODtcbi8vJHNlY29uZGFyeUNvbG9yOiAjMDEyZjI1O1xuLy8kYWNjZW50Q29sb3I6ICNjMmNlY2E7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IGJsYWNrO1xuXG4vLyBHcsO8biAyXG4vLyRwcmltYXJ5Q29sb3I6ICMyMzRjNDI7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzAxMmYyNTtcbi8vJGFjY2VudENvbG9yOiAjYjhhY2FhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG4gaW52ZXJzXG4vLyRwcmltYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzIzNGM0Mjtcbi8vJGFjY2VudENvbG9yOiAjYjhhY2FhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiB3aGl0ZTtcblxuLy8gR3LDvG4gaW52ZXJzIGFuZGVyZSBBY2NlbnRcbi8vJHByaW1hcnlDb2xvcjogIzAxMmYyNTtcbi8vJHNlY29uZGFyeUNvbG9yOiAjMjM0YzQyO1xuLy8kYWNjZW50Q29sb3I6ICM2Yjg3Nzg7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IHdoaXRlO1xuXG5ib2R5LnRoZW1lLWJsdWV7XG4gIGJhY2tncm91bmQ6ICRwcmltYXJ5Q29sb3I7XG4gIGNvbG9yOiAkdGV4dENvbG9yO1xuXG4gIGxhYmVse1xuICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICB9XG5cbiAgLnRvYXN0IC5tZXNzYWdle1xuICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnlDb2xvcjtcbiAgfVxuXG4gIG5hdi50b3AtYmFyLCBuYXYudG9wLWJhci53aXRoLWltYWdlLCBuYXYudG9wLWJhci53aXRoLWltYWdlLnNvbGlke1xuICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnlDb2xvcjtcbiAgfVxuXG4gIC5idXR0b257XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgLnN3aXRjaCBpbnB1dDpjaGVja2VkICsgLnNsaWRlcntcbiAgICBiYWNrZ3JvdW5kOiAkYWNjZW50Q29sb3I7XG4gIH1cbiAgI2xldmVsLW51bWJlci1jb250YWluZXJ7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcbiAgfVxuICBzdmcge1xuICAgIGNvbG9yOiAkc3ZnQ29sb3I7XG4gIH1cblxuICB1bC5tZW51IGxpIGEge1xuICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICB9XG5cbiAgYXtcbiAgICBjb2xvcjogJGFjY2VudENvbG9yO1xuICAgICYuaGlkZGVuLWxpbmt7XG4gICAgICBjb2xvcjogJHRleHRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICRhY2NlbnRDb2xvcjtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnlDb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwMzA7XG4gICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiAjODFhY2I1O1xuICB9XG5cbiAgI3R1dG9yaWFsLXBvaW50ZXJ7XG4gICAgYmFja2dyb3VuZDogJGFjY2VudENvbG9yO1xuICB9XG5cbn1cbiIsIkBpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuLy9TZXR0aW5ncyBuYWNoIGZvdW5kYXRpb24gZsO8ciBtaXhpbnMgaW4gc2V0dGluZ3NcbkBpbXBvcnQgXCJzZXR0aW5nc1wiO1xuXG4vL0luY2x1ZGUgZm91bmRhdGlvbiBiZWZvcmUgb3RoZXIgc3R5bGVzLCBzbyB0aGF0IG90aGVyIG9uZSBjYW4gb3ZlcnJpZGUgZm91bmRhdGlvblxuQGluY2x1ZGUgZm91bmRhdGlvbi1ldmVyeXRoaW5nO1xuXG4vL0Zyb20gZnJhbWV3b3JrXG5AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMvY29yZG92YS1zaXRlc1wiO1xuQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzLXVzZXItbWFuYWdlbWVudC9jb3Jkb3ZhLXNpdGVzLXVzZXItbWFuYWdlbWVudFwiO1xuXG4vL0FuZGVyZXMgbmFjaCBTZXR0aW5ncywgZGFtaXQgU2V0dGluZ3MgYmVyZWl0cyBhbmdld2VuZGV0IHdlcmRlblxuQGltcG9ydCBcIndvcmRSb3RhdG9yXCI7XG5AaW1wb3J0IFwiYW5pbWF0aW9uc1wiO1xuQGltcG9ydCBcIm5hdmJhck92ZXJyaWRlXCI7XG5AaW1wb3J0IFwidGhlbWVCbHVlXCI7XG5cbi50cmFuc2xhdGlvbnt9XG5cbkBrZXlmcmFtZXMgcm90YXRlIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBsaW5lIHtcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDY1Ljk3MywgMjEuOTkxMTtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCA4NS45NjQ7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC02NS45NzM7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICB9XG59XG5cbmh0bWwsIGJvZHkge1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBub25lO1xufVxuXG5cbmEsIGE6aG92ZXIge1xuICBjb2xvcjogI2ZmY2EwMDtcbn1cblxuI3NpdGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy9vdmVyZmxvdzogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgLy9kaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5yaWdodCB7XG4gIGZsb2F0OiByaWdodFxufVxuXG4uZ3JvdyB7XG4gIGZsZXg6IDE7XG59XG5cbi5sb2FkZXIge1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJi5vdmVybGF5IHtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxOTIsIDE5MiwgMTkyLCAwLjUpO1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB6LWluZGV4OiAxMDAwMDtcblxuICAgIHN2ZyB7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAmLmlubGluZSB7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgICB0b3A6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IGluaXRpYWw7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdHJhbnNmb3JtOiBpbml0aWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cblxuICAmLnNtYWxsIC5zcGlubmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XG4gIH1cblxuICAuc3Bpbm5lciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAvL3N0cm9rZTogI2I3MWMxYTtcbiAgICBzdHJva2U6ICMwMDA7XG4gICAgc3Ryb2tlLXdpZHRoOiAzcHg7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xuICAgIGFuaW1hdGlvbjogbGluZSAxLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUsIHJvdGF0ZSAxLjZzIGxpbmVhciBpbmZpbml0ZTtcbiAgfVxufVxuXG4ub3ZlcmZsb3ctYXV0byB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmhlaWdodC0xMDAge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vL1ZpZXdJbmZsYXRlclxuLmluamVjdGVkLXNwYW4ge1xufVxuXG4udmVydGljYWwtbWlkZGxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnZlcnRpY2FsLWJvdHRvbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBlbmQ7XG59XG5cbi5ob3Jpem9udGFsLWNlbnRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ud2lkdGgtMTAwIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbkBmb3IgJGkgZnJvbSAxIHRocm91Z2ggNiB7XG4gIGgjeyRpfS5pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG5pbWcuYmFjay1idXR0b24ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1heC1oZWlnaHQ6IDEuMXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjVyZW07XG59XG5cbmEuaGlkZGVuLWxpbmsge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuI21haW4tY29udGVudC1jb250YWluZXIge1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2lkdGg6IDEwMCU7XG5cbiAgPiAuZ3JpZC14e1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIH1cblxuICAjbWFpbi1jb250ZW50IHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuXG5ib2R5e1xuICAvL2JhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9iYWNrZ3JvdW5kLnBuZ1wiKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fYnJlYWtwb2ludC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19yZXZlYWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdmVuZG9yL25vcm1hbGl6ZS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9fZ2xvYmFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX2ZvdW5kYXRpb25TZXR0aW5ncy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX3RleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fdW5pdC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2xhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19oZWxwLXRleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19maWVsZHNldC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19lcnJvci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy90eXBvZ3JhcGh5L19iYXNlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX2hlbHBlcnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdHlwb2dyYXBoeS9fYWxpZ25tZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX3ByaW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NsYXNzZXMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZ3V0dGVycy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NlbGwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fbWF0aC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19sYXlvdXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fY29sbGFwc2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fcG9zaXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZnJhbWUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnV0dG9uLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jbG9zZS1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbGFiZWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zd2l0Y2guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fY29sb3Iuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fY2FsbG91dC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdG9vbHRpcC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVkaWEtb2JqZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX29yYml0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFicy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190aHVtYm5haWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVudS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19tZW51LWljb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZHJpbGxkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fb2ZmLWNhbnZhcy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zdGlja3kuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGl0bGUtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZmxvYXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fZmxleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19mbGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fdG9hc3Quc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fZGlhbG9nLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3NldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Zvcm0uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fbmF2YmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX3RhYmJlZEZyYWdtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2FscGhhYmV0aWNMaXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Fic3RyYWN0V2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2ltYWdlU2VsZWN0aW9uRWxlbWVudC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMvc3JjL2NsaWVudC9zY3NzL19pbmRleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50L3NyYy9jbGllbnQvc2Nzcy9fcmlnaHRzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19zaGFyZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fY29yZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fY29yZVNldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19zZXR0aW5nc1NpdGUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL190aGVtZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL190dXRvcmlhbC5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL193b3Jkcm90YXRvclRoZW1lLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3Mvd29yZFJvdGF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9fYW5pbWF0aW9ucy5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL19uYXZiYXJPdmVycmlkZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL190aGVtZUJsdWUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9pbmRleC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdMUSwyQ0NuSU4saURBQ0UsVUFBVyxDQUNYLFNBQVUsQ0FDVixhQUFjLENBQ2YsQ0NoREQsMkVBQUEsQ0FBNEUsS0FTMUUsZ0JBQWlCLENBQ2pCLDZCQUE4QixDQUMvQixLQVFDLFFBQVMsQ0FDVixHQU1DLGFBQWMsQ0FDZCxlQUFnQixDQUNqQixHQVNDLDhCQUF1QixDQUF2QixzQkFBdUIsQ0FDdkIsUUFBUyxDQUNULGdCQUFpQixDQUNsQixJQU1DLGdDQUFpQyxDQUNqQyxhQUFjLENBQ2YsRUFRQyw0QkFBNkIsQ0FDOUIsWUFNQyxrQkFBbUIsQ0FDbkIseUJBQTBCLENBQzFCLHdDQUFpQixDQUFqQixnQ0FB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QixDU3JCakIsMEJUcUJpQixDU2xCZix5RVRtWWlELENTbllqRCxpRVRtWWlELENTbllqRCx5RFRtWWlELENTbllqRCxpRlRtWTRELENTalkvRCxnQkFJQyx3QlRXZ0IsQ1NWaEIsa0JUMlgrQixDUzFYaEMsbUJBSUMsWUFBYSxDQUNkLGlCQUdDLFdBQVksQ0FDWixxQkFBc0IsQ0FDdkIsdUJBRUMsYUFBYyxDQUNkLGdCQUFpQixDQUNsQiw4QkNyQ0Msb0JWOEJrQixDVTdCbEIsd0JBQStELENBRS9ELHlEQUNFLGFWMEJnQixDVTNCbEIsZ0RBQ0UsYVYwQmdCLENVM0JsQixvREFDRSxhVjBCZ0IsQ1UzQmxCLHFEQUNFLGFWMEJnQixDVTNCbEIsMkNBQ0UsYVYwQmdCLENVekJqQixrQkEwQkMsYVZEZ0IsQ1VFakIsWUFyQkgsWUFBYSxDQUNiLGlCQUFnQyxDQUNoQyxrQlA4QnVELENPNUJ2RCxnQlA0QnVELENPM0J2RCxnQlY2QnVCLENVNUJ2QixhVmFvQixDVU1wQix1QkFJSSxhQUFjLENBQ2Ysb0VDZ0tELFFBQVMsQ0FDVCxTQUFVLENBQ1gsRUFJQyxrQlh6RjBCLENXMkYxQixpQkFBa0IsQ0FDbEIsZVg3RnNCLENXOEZ0QixpQ1g1RnlDLENXNkYxQyxLQUtDLGlCQUFrQixDQUNsQixtQkFBb0IsQ0FDckIsU0FLQyxnQlhuTHFCLENXb0xyQixtQkFBb0IsQ2J0THRCLE1hMkxFLGFYbkhpQixDV29IakIsbUJBQW9CLENBQ3JCLDBDQVNDLDhEWDFNcUUsQ1cyTXJFLGlCWHZKc0IsQ1d3SnRCLGtCWHZNeUIsQ1d3TXpCLGFYdkprQixDV3dKbEIsaUNYbklzQyxDV3lIeEMsa0hBYUksYUFBYyxDQUNkLGFYeE5lLENXeU5oQixPQVlPLGdCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGlCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLG1CUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGtCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLG1CUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGNSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ0pvQ3JCLDJDZStIQSxPQUlJLGNSM042QyxDUXVOakQsT0FJSSxnQlIzTjZDLENRdU5qRCxPQUlJLG1CUjNONkMsQ1F1TmpELE9BSUksbUJSM042QyxDUXVOakQsT0FJSSxpQlIzTjZDLENRdU5qRCxPQUlJLGNSM042QyxDUXdQaEQsQ2J4UlAsRWErUkUsbUJBQW9CLENBQ3BCLGFYalJvQixDV2tScEIsb0JYNUt5QixDVzhLekIsY0FBZSxDQUxqQixnQkFTSSxhWG5MMkQsQ1cwSy9ELE1BZ0JJLFFBQVMsQ2JqVWIsR2F1VUUsVUFBVyxDQUVYLGVSdFJxRCxDUXVSckQsUUFBUyxDQUNULG1CWC9MeUIsQ1dpTXpCLFlBQWEsQ0FDYixjQUFlLENBQ2YsK0JYdFNpQixDV3VTakIsYUFBYyxDQUNmLFNBTUMsa0JYek4wQixDVzBOMUIsMkJYeE15QixDV3lNekIsZVg1TnNCLENXNk52QixHQUlDLGlCQUFrQixDQUNuQixHQUlDLG1CWGxOc0IsQ1dtTnRCLG9CWHJOa0IsQ1dzTm5CLEdBSUMsbUJYeE5zQixDV3lOdkIsd0JBS0csbUJYN04yQixDVzhOM0IsZUFBZ0IsQ0FDakIsR0FLRCxrQlhuT3lCLENXa08zQixNQUlJLG1CWHBPOEIsQ1dxTzlCLGdCWHJVbUIsQ1dzVXBCLFdBS0QsZVhsUTBCLENXbVExQixvQ1I5VXFELENRK1VyRCw2Qlh6VmlCLENXc1ZuQix3QkFNSSxlWHhRb0IsQ1d5UXBCLGFYNVZhLENXNlZkLGlCQWNELGdDWDFXVyxDVzJXWCxXQUFZLENBQ1osb0JBQXFCLENBQ3RCLE9BSUMsUUFBUyxDQUNWLElBV0MsUUFBUyxDQUNULHdCUmpYUyxDUW1YVCx3QlhuWWdCLENXcVlo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LENBQUcsYUFDSixDQUFHLFVBaENlLENBQUksV0g5RDNCLGtCR3lGSCxDSHpGRyxvQkd5RkgsQ0h6RkcsZ0JHeUZILENIekZHLFlHeUZILENBQUMsYUhyRkksa0JHcUZMLENIckZLLHFCR3FGTCxDSHJGSyxpQkdxRkwsQ0hyRkssYUdxRkwsQ0FBQyxjSC9FRyxVR3dDQyxDQUFJLGdCSHBDSCxVR29DRCxDQUFJLHlQSHBCRix1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLG9DbkJzSGtCLHFSbUJ2SDVCLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsMkNuQmdIeUMsdVFtQmxIbEMsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CZ0h5Qyx5UG1CbEhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLCtNQVkyQyxrQkc2QzNDLENIN0MyQyxxQkc2QzNDLENIN0MyQyxpQkc2QzNDLENIN0MyQyxhRzZDM0MsQ0FBQyxpQkg5QmdCLGNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxVSXNEZixDQUFtRCxvQ3ZCb0NuQixzQm1COUdiLGtCR2tEdEIsQ0hsRHNCLG9CR2tEdEIsQ0hsRHNCLGdCR2tEdEIsQ0hsRHNCLFlHa0R0QixDQUFDLFVBdkNJLENBQUksK1BITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHdCSHZDdUIsVUdBbkIsQ0FBSSxtQkhTVSxjSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsb0JKdERsQyxlSXNEakIsQ0FBbUQsb0JKdERsQyxlSXNEakIsQ0FBbUQsb0JKdERsQyxVSXNEakIsQ0FBbUQsQ0puRHRELDJDbkJrRnlDLHFCbUJ6R3BCLGtCR2tEckIsQ0hsRHFCLG9CR2tEckIsQ0hsRHFCLGdCR2tEckIsQ0hsRHFCLFlHa0RyQixDQUFDLFVBdkNJLENBQUksa1BITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHVCSHZDc0IsVUdBbEIsQ0FBSSxrQkhTUyxjSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxVSXNEaEIsQ0FBbUQsQ0puRHRELDJDbkJrRnlDLG9CbUJ6R3JCLGtCR2tEcEIsQ0hsRG9CLG9CR2tEcEIsQ0hsRG9CLGdCR2tEcEIsQ0hsRG9CLFlHa0RwQixDQUFDLFVBdkNJLENBQUkscU9ITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHNCSHZDcUIsVUdBakIsQ0FBSSxpQkhTUSxjSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsVUlzRGYsQ0FBbUQsQ0puRHRELGtDQUs4QixVQUMxQixDQUFJLGtDQUlzQixXQUN6QixDQUFJLGVBOEJBLG9CQ3ZHb0IsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMscUJDdkdvQixDQUFpQyxzQkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwwQkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDJCRzdCdUMsQ0FBZ0Qsb0JGckVoRSxDQUFpQyxxQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxVRzdCRyxDQUFJLHVCSGlDTCxVR2pDQyxDQUFJLHdCSHlDRiw4Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHdCSGFwRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHdCSGFwRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHlCSGFuRiwrQkdibUMsQ0FBZ0QseUJIYW5GLCtCR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFVHN0JMLENBQUksK0JIaUNHLFVHakNQLENBQUksMEJIeUNBLDhCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMEJIYWxGLCtCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMEJIYWxGLCtCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMkJIYWpGLCtCR2JpQyxDQUFnRCwyQkhhakYsK0JHYmlDLENBQWdELDJCSGFqRiwwQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsVUc3QkcsQ0FBSSx1QkhpQ0wsVUdqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCw0QkhDbEYsVUc3QkosQ0FBSSw4QkhpQ0UsVUdqQ04sQ0FBSSx5Qkh5Q0QsK0JHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLDJCR2JrQyxDQUFnRCxDSGU3RiwyQ25CbUQyQywyQm1CakVqQyxVRzdCSCxDQUFJLDZCSGlDQyxVR2pDTCxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELENIZTdGLGdDQWlEYyxxQkM5SWlCLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQixnQ21CRjdCLHNCQzlJaUIsQ0FBaUMscUJBQWpDLENBQWlDLENEZ0poRSwyQ0FMWSxxQkMzSW1CLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQiwyQ21CTC9CLHNCQzNJbUIsQ0FBaUMscUJBQWpDLENBQWlDLENEc0poRSxzQkFHTSxxQkN6SnlCLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQixzQm1CU3JDLHNCQ3pKeUIsQ0FBaUMscUJBQWpDLENBQWlDLENEMkpoRSxrQkszSk0sVURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxXRGlIRCxDQUFtRCxvQ3ZCb0NuQixvQndCckovQixVRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsZURpSEQsQ0FBbUQsb0JDakhsRCxTRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsZURpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCwyQ3hCOEk2QyxtQndCaEpyQyxVRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsZURpSEQsQ0FBbUQsbUJDakhsRCxTRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsZURpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCwyQ3hCOEk2QyxrQndCaEpyQyxVRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCxnQ0FGUSwwQkY4RXVDLENBQWdELGdDRTlFdkYseUJGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYseUJGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwrQkY4RXVDLENBQWdELGdDRTlFdkYsMkJGOEV1QyxDQUFnRCxvQ3RCdUV4RCxrQ3dCckovQiwwQkY4RXVDLENBQWdELGtDRTlFdkYseUJGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYseUJGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2RiwrQkY4RXVDLENBQWdELGtDRTlFdkYsMkJGOEV1QyxDQUFnRCxDRTVFL0YsMkN4QjhJNkMsZ0N3QmhKckMsMkJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsZ0NGOEV1QyxDQUFnRCxnQ0U5RXZGLDRCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwyQkY4RXVDLENBQWdELGlDRTlFdkYsMEJGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsMEJGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2RixnQ0Y4RXVDLENBQWdELGlDRTlFdkYsNEJGOEV1QyxDQUFnRCxDRTVFL0YsMkN4QjhJNkMsZ0N3QmhKckMsMkJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsZ0NGOEV1QyxDQUFnRCxnQ0U5RXZGLDRCRjhFdUMsQ0FBZ0QsQ0U1RS9GLHVCTHFNeUIsY005TUssQ0FBQyxhQUFELENBQUMsNkJBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLGdDQXNCZCxjRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsVUY2RmIsQ0FBbUQsb0N2Qm9DbkIsa0N5QmpJbEIsY0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGcEMsZUY2RmYsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxpQ3lCNUh6QixjRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsVUY2RmQsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGdDeUI1SDFCLGNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxVRjZGYixDQUFtRCxDRTNGaEQsd0JOdUxnQixjTTdLSSxDQUFDLGFBQUQsQ0FBQyw4QkFHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsb0N6QmdISSx5Qm1Ca0RaLGNNOU1HLENBQUMsYUFBRCxDQUFDLCtCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QixvQ3pCcUptQyxrQ3lCMUlwQixjRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLG9DeUJqSWxCLGNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnJDLGVGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnJDLGVGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxxQ0U3RnBDLGVGNkZmLENBQW1ELHFDRTdGcEMsZUY2RmYsQ0FBbUQscUNFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsb0N6QitINkIsbUN5QjFJbkIsY0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG9DRXRHckMsZUZzR2QsQ0FBbUQsb0NFdEdyQyxlRnNHZCxDQUFtRCxvQ0V0R3JDLFVGc0dkLENBQW1ELENFcEdoRCxvQ3pCd0k2QixrQ3lCMUlwQixjRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLDBCbUJ3RFgsY003S0UsQ0FBQyxhQUFELENBQUMsZ0NBR3JCLGVBRXdCLENBQUMsY0FBRCxDQUFDLENBRS9CLDJDekJ5R3lDLHdCbUJ1RG5CLGNNOU1JLENBQUMsYUFBRCxDQUFDLDhCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QiwyQ3pCZ0p5QyxpQ3lCckkxQixjRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd2QyxlRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd2QyxlRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd0QyxlRnNHYixDQUFtRCxrQ0V0R3RDLGVGc0diLENBQW1ELGtDRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLG1DeUJqSWxCLGNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnBDLGVGNkZmLENBQW1ELG9DRTdGcEMsZUY2RmYsQ0FBbUQsb0NFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsMkN6QjBIbUMsa0N5QjVIekIsY0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFVGNkZkLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxpQ3lCNUgxQixjRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z2QyxlRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z2QyxlRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsVUY2RmIsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLHlCbUI2RGxCLGNNN0tHLENBQUMsYUFBRCxDQUFDLCtCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxDQUUvQiwyQ3pCeUd5Qyx1Qm1CdURwQixjTTlNSyxDQUFDLGFBQUQsQ0FBQyw2QkFHckIsY0FFc0IsQ0FBQyxhQUFELENBQUMsQ0FFN0IsMkN6QmdKeUMsZ0N5QnJJMUIsY0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGdDRXRHdkMsZUZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGdDRXRHdkMsZUZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFVGc0diLENBQW1ELENFcEdoRCxvQ3pCd0k2QixrQ3lCaklsQixjRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsVUY2RmYsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUJySXpCLGNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxrQ0V0R3JDLGVGc0dkLENBQW1ELGtDRXRHckMsZUZzR2QsQ0FBbUQsa0NFdEdyQyxVRnNHZCxDQUFtRCxDRXBHaEQsMkN6Qm1JbUMsZ0N5QjVIMUIsY0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLFVGNkZiLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyx3Qm1CNkRuQixjTTdLSSxDQUFDLGFBQUQsQ0FBQyw4QkFHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsQ0FFL0IsZ0JOb0xjLGNPdk1XLENBQUMsK0JQMk1LLDhCTzNNTixDQUFDLGdCUHVNWixvQk92TVcsQ0FBQywrQlAyTUssb0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssK0JPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0scUNPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxvQzFCaUlTLGtCbUJzRW5CLGNPdk1TLENBQUMsaUNQMk1PLDhCTzNNUixDQUFDLGtCUHVNVixvQk92TVMsQ0FBQyxpQ1AyTU8sb0NPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYsZU92TVMsQ0FBQyxpQ1AyTU8sK0JPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixlT3ZNUyxDQUFDLGlDUDJNTywrQk8zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLGVPdk1TLENBQUMsaUNQMk1PLCtCTzNNUixDQUFDLG1CUHVNVCxxQk92TVEsQ0FBQyxrQ1AyTVEscUNPM01ULENBQUMsbUJQdU1ULHFCT3ZNUSxDQUFDLGtDUDJNUSxxQ08zTVQsQ0FBQyxDUDZNMUIsMkNuQmpGeUMsaUJtQjJFMUIsY092TVUsQ0FBQyxnQ1AyTU0sK0JPM01QLENBQUMsaUJQdU1YLG9CT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxlT3ZNVSxDQUFDLGdDUDJNTSxnQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLGVPdk1VLENBQUMsZ0NQMk1NLGdDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgsZU92TVUsQ0FBQyxnQ1AyTU0sZ0NPM01QLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxzQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHNDTzNNUixDQUFDLENQNk0xQiwyQ25CakZ5QyxnQm1CMkUzQixjT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVosb0JPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLGdDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssZ0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSyxnQ08zTU4sQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsQ1A2TTFCLFFBekpxQixtQkV0RWpCLENGc0VpQixvQkV0RWpCLENGc0VpQixtQkV0RWpCLENGc0VpQixZRXRFakIsQ0FBSSwyQkFGVSxDQUVWLDRCQUZVLENBRVYsK0JBRlUsQ0FFViwyQkFGVSxDQUVWLHVCQUZVLENBQU0sY0ZxUHBCLFdHOUlNLENBQUksZUFDSSxDQUFJLGNIaUpsQixXR3ZNQyxDQUFJLGdCSDJNSCxXRzNNRCxDQUFJLHlQSHlORix1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLG9DbkJ2SGtCLHFSbUJzSDVCLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsMkNuQjdIeUMsdVFtQjJIbEMsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CN0h5Qyx5UG1CMkhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLCtNQVcyQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyxpQkg4TVUsZUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxXSXRMVCxDQUFtRCxvQ3ZCb0NuQixzQm1COEhuQixrQkcxTGhCLENIMExnQixvQkcxTGhCLENIMExnQixnQkcxTGhCLENIMExnQixZRzFMaEIsQ0FBQyxXQXZDSSxDQUFJLCtQSHNPa0Msa0JHL0wzQyxDSCtMMkMscUJHL0wzQyxDSCtMMkMsaUJHL0wzQyxDSCtMMkMsYUcvTDNDLENBQUMsd0JIcU1pQixXRzVPYixDQUFJLG1CSHFQSSxlSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLFVJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsVUl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxVSXRMVixDQUFtRCxvQkpzTHhDLGdCSXRMWCxDQUFtRCxvQkpzTHhDLGdCSXRMWCxDQUFtRCxvQkpzTHhDLFdJdExYLENBQW1ELENKeUxwRCwyQ25CMUp1QyxxQm1CbUkxQixrQkcxTGYsQ0gwTGUsb0JHMUxmLENIMExlLGdCRzFMZixDSDBMZSxZRzFMZixDQUFDLFdBdkNJLENBQUksa1BIc09rQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyx1QkhxTWdCLFdHNU9aLENBQUksa0JIcVBHLGVJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsVUl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxVSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFVJdExULENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsV0l0TFYsQ0FBbUQsQ0p5THBELDJDbkIxSnVDLG9CbUJtSTNCLGtCRzFMZCxDSDBMYyxvQkcxTGQsQ0gwTGMsZ0JHMUxkLENIMExjLFlHMUxkLENBQUMsV0F2Q0ksQ0FBSSxxT0hzT2tDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLHNCSHFNZSxXRzVPWCxDQUFJLGlCSHFQRSxlSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFdJdExULENBQW1ELENKeUxwRCxnQ0FTWSxtQkNuVGUsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGdDbUJtSzNCLG9CQ25UZSxDQUFpQyx1QkFBakMsQ0FBaUMsQ0RxVDlELHNCQUdNLG1CQ3hUdUIsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLHNCbUJ3S25DLG9CQ3hUdUIsQ0FBaUMsdUJBQWpDLENBQWlDLENEMFQ5RCxlQW5OUyxtQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQywyQ3BCZ0pyQixlbUJ6Q2hDLG9CQ3ZHb0IsQ0FBaUMsdUJBQWpDLENBQWlDLENEc0lsRSxxQkEzQlEsMkJHN0J1QyxDQUFnRCxrQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQywyQ3BCdUluQixxQm1CckNyQyw0Qkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsc0JBQWpDLENBQWlDLENEMkcxRCxxQkFyQ0EsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCxvQ3RCdUV4RCw2Qm1CdEV6QixXRzdCTCxDQUFJLCtCSGlDRyxXR2pDUCxDQUFJLDBCSHlDQSwrQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDJCSGFqRixnQ0diaUMsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsMkJHYmlDLENBQWdELENIZTdGLDJDbkJtRDJDLHFCbUJqRXZDLFdHN0JHLENBQUksdUJIaUNMLFdHakNDLENBQUksd0JIeUNGLGdDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiw0QkdibUMsQ0FBZ0QsNEJIQ2xGLFdHN0JKLENBQUksOEJIaUNFLFdHakNOLENBQUkseUJIeUNELGdDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFu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REksc0JBQ0osQ0FESSxtQkFDSixDQUFPLFlBeUJrQixDQUFLLENSa1h0Qyx5QkFLZSxXQUNSLENBQUksb0NuQi9Pc0IsaUNtQmtQUixXQUNoQixDQUFJLENBQ2IsMkNuQnpQdUMsZ0NtQnVQZixXQUNmLENBQUksQ0FDYiwyQ25CelB1QywrQm1CdVBoQixXQUNkLENBQUksQ0FDYixlQWxTTyxtQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQywyQ3BCZ0pyQixlbUJ6Q2hDLG9CQ3ZHb0IsQ0FBaUMsdUJBQWpDLENBQWlDLENEc0lsRSxxQkEzQlEsMkJHN0J1QyxDQUFnRCxrQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQywyQ3BCdUluQixxQm1CckNyQyw0Qkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsc0JBQWpDLENBQWlDLENEMkcxRCxxQkFyQ0EsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCxvQ3RCdUV4RCw2Qm1CdEV6QixXRzdCTCxDQUFJLCtCSGlDRyxXR2pDUCxDQUFJLDBCSHlDQSwrQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDJCSGFqRixnQ0diaUMsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsMkJHYmlDLENBQWdELENIZTdGLDJDbkJtRDJDLHFCbUJqRXZDLFdHN0JHLENBQUksdUJIaUNMLFdHakNDLENBQUksd0JIeUNGLGdDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiw0QkdibUMsQ0FBZ0QsNEJIQ2xGLFdHN0JKLENBQUksOEJIaUNFLFdHakNOLENBQUkseUJIeUNELGdDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QsMEJIYWxGLGlDR2JrQyxDQUFnRCwwQkhhbEYsaUNHYmtDLENBQWdELDBCSGFsRiw0Qkdia0MsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMsMkJtQmpFakMsV0c3QkgsQ0FBSSw2QkhpQ0MsV0dqQ0wsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCxDSGU3RiwwQkFrVHdCLDRCUTVZ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LDZCc0Q1ckJ0QyxrQkFDUSxDQURSLHFCQUNRLENBRFIsaUJBQ1EsQ0FEUixhQUNRLENBQUEsWUFDUCxxQkMvSU0sQ0FBQSxhQUNSLHNCQUdRLENBQUEsY0FDUixhQUdVLENBQUEsaUJBQ0ssQ0FBQSxnQkFDRCxDQUFBLG1DdERzSmQsYUFDVSxDQUFBLFdBQ0EsQ0FBQSxvQkFHRyxDQUhILHlCQUdHLENBSEgsWUFHRyxDQUFFLDJCQUNaLENBRFksZUFDWixDQURZLGdCQUNaLENBRFksT0FDUCxDQUFFLGlCQUlWLFVBQ1EsQ0FBQSxZQUNSLHNCdURwTDhDLEN2RG9MOUMsa0N1RHBMOEMsQ3ZEb0w5QyxtQnVEcEw4QyxDdkRvTDlDLDBCdURwTDhDLENBQUEsYUN3RTdDLG9CRHZFZ0QsQ0N1RWhELGdDRHZFZ0QsQ0N1RWhELGlCRHZFZ0QsQ0N1RWhELHdCRHZFZ0QsQ0FBQSxjQ3VFaEQsdUJEdEVVLENDc0VWLDhCRHRFVSxDQ3NFVixvQkR0RVUsQ0NzRVYsc0JEdEVVLENBQUEsZUNzRVYsd0JEckVXLENDcUVYLHFDRHJFVyxDQ3FFWCxxQkRyRVcsQ0NxRVgsNkJEckVXLENBQUEsY0NxRVgsb0NEcEVVLENDb0VWLHdCRHBFVSxDQ29FViw0QkRwRVUsQ0FBQSwrQkM2RVEsc0JEakYyQixDQ2lGM0Isa0NEakYyQixDQ2lGM0IsbUJEakYyQixDQ2lGM0IsMEJEakYyQixDQUFBLGdDQ2lGM0Isb0JEaEY4QixDQ2dGOUIsZ0NEaEY4QixDQ2dGOUIsaUJEaEY4QixDQ2dGOUIsd0JEaEY4QixDQUFBLGlDQ2dGOUIsdUJEL0VSLENDK0VRLDhCRC9FUixDQytFUSxvQkQvRVIsQ0MrRVEsc0JEL0VSLENBQUEsV0NpRkwsdUJEdkVBLENDdUVBLDhCRHZFQSxDQ3VFQSxvQkR2RUEsQ0N1RUEsc0JEdkVBLENBQUEsZ0JDZ0ZKLDZCRGhGSSxDQ2dGSix5QkRoRkksQ0NnRkoscUJEaEZJLENBQUEsY0M4RUwscUJEN0VRLENDNkVSLDRCRDdFUSxDQzZFUixrQkQ3RVEsQ0M2RVIsb0JEN0VRLENBQUEsbUJDK0VQLDJCRC9FTyxDQytFUCx1QkQvRU8sQ0MrRVAsbUJEL0VPLENBQUEsY0M2RVIsd0JENUVRLENDNEVSLDBCRDVFUSxDQzRFUixxQkQ1RVEsQ0M0RVIsa0JENUVRLENBQUEsbUJDOEVQLHlCRDlFTyxDQzhFUCwwQkQ5RU8sQ0M4RVAsaUJEOUVPLENBQUEsZUM0RVIseUJEM0VTLENDMkVULDJCRDNFUyxDQzJFVCxzQkQzRVMsQ0MyRVQsbUJEM0VTLENBQUEsb0JDNkVSLDBCRDdFUSxDQzZFUiwyQkQ3RVEsQ0M2RVIsa0JEN0VRLENBQUEscUJDaUZSLHVCRDlGUyxDQzhGVCw4QkQ5RlMsQ0M4RlQsb0JEOUZTLENDOEZULHNCRDlGUyxDQUFBLHdCQVlGLENBWkUsMEJBWUYsQ0FaRSxxQkFZRixDQVpFLGtCQVlGLENBQUEsNEJDd0ZPLENEeEZQLHlCQ3dGTyxDRHhGUCxvQkN3Rk8sQ0FBQSxlQUNoQiwyQkQzQkQsQ0MyQkMsZUQzQkQsQ0MyQkMsZ0JEM0JELENDMkJDLE9EM0JJLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsb0M3RHdFeUIsaUI2RHZFcEMsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsQ0FBQywyQzdEbUU4QixnQjZEbEUxQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxDQUFDLDJDN0RtRThCLGU2RGxFMUMsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLENBQUMsZ0JBNUZoQixtQkRZUyxDQ1pULG9CRFlTLENDWlQsbUJEWVMsQ0NaVCxZRFlTLENBQUEsaUJDVlIsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLGlCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxtQkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsY0FDUCw2QkRWTSxDQ1VOLDRCRFZNLENDVU4sMEJEVk0sQ0NVTixzQkRWTSxDQ1VOLGtCRFZNLENBQUEsc0JDYUwsNkJEWmEsQ0NZYiw2QkRaYSxDQ1liLGtDRFphLENDWWIsOEJEWmEsQ0NZYiwwQkRaYSxDQUFBLGlCQ1liLDJCRFhRLENDV1IsNEJEWFEsQ0NXUiw2QkRYUSxDQ1dSLHlCRFhRLENDV1IscUJEWFEsQ0FBQSx5QkNXUiwyQkRWZ0IsQ0NVaEIsNkJEVmdCLENDVWhCLHFDRFZnQixDQ1VoQixpQ0RWZ0IsQ0NVaEIsNkJEVmdCLENBQUEsb0M1RDZKc0Isd0I2RHpJaEMsbUJEZkMsQ0NlRCxvQkRmQyxDQ2VELG1CRGZDLENDZUQsWURmQyxDQUFBLHlCQ2lCQSxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEseUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLDJCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxzQkFDUCw2QkRyQ0YsQ0NxQ0UsNEJEckNGLENDcUNFLDBCRHJDRixDQ3FDRSxzQkRyQ0YsQ0NxQ0Usa0JEckNGLENBQUEsOEJDd0NHLDZCRHZDSyxDQ3VDTCw2QkR2Q0ssQ0N1Q0wsa0NEdkNLLENDdUNMLDhCRHZDSyxDQ3VDTCwwQkR2Q0ssQ0FBQSx5QkN1Q0wsMkJEdENBLENDc0NBLDRCRHRDQSxDQ3NDQSw2QkR0Q0EsQ0NzQ0EseUJEdENBLENDc0NBLHFCRHRDQSxDQUFBLGlDQ3NDQSwyQkRyQ1EsQ0NxQ1IsNkJEckNRLENDcUNSLHFDRHJDUSxDQ3FDUixpQ0RyQ1EsQ0NxQ1IsNkJEckNRLENBQUEsQ0FBYywyQzVEd0pjLHVCNkRwSXRDLG1CRGZDLENDZUQsb0JEZkMsQ0NlRCxtQkRmQyxDQ2VELFlEZkMsQ0FBQSx3QkNpQkEsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHdCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSwwQkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEscUJBQ1AsNkJEckNGLENDcUNFLDRCRHJDRixDQ3FDRSwwQkRyQ0YsQ0NxQ0Usc0JEckNGLENDcUNFLGtCRHJDRixDQUFBLDZCQ3dDRyw2QkR2Q0ssQ0N1Q0wsNkJEdkNLLENDdUNMLGtDRHZDSyxDQ3VDTCw4QkR2Q0ssQ0N1Q0wsMEJEdkNLLENBQUEsd0JDdUNMLDJCRHRDQSxDQ3NDQSw0QkR0Q0EsQ0NzQ0EsNkJEdENBLENDc0NBLHlCRHRDQSxDQ3NDQSxxQkR0Q0EsQ0FBQSxnQ0NzQ0EsMkJEckNRLENDcUNSLDZCRHJDUSxDQ3FDUixxQ0RyQ1EsQ0NxQ1IsaUNEckNRLENDcUNSLDZCRHJDUSxDQUFBLENBQWMsMkM1RHdKYyxzQjZEcEl0QyxtQkRmQyxDQ2VELG9CRGZDLENDZUQsbUJEZkMsQ0NlRCxZRGZDLENBQUEsdUJDaUJBLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx1QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEseUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLG9CQUNQLDZCRHJDRixDQ3FDRSw0QkRyQ0YsQ0NxQ0UsMEJEckNGLENDcUNFLHNCRHJDRixDQ3FDRSxrQkRyQ0YsQ0FBQSw0QkN3Q0csNkJEdkNLLENDdUNMLDZCRHZDSyxDQ3VDTCxrQ0R2Q0ssQ0N1Q0wsOEJEdkNLLENDdUNMLDBCRHZDSyxDQUFBLHVCQ3VDTCwyQkR0Q0EsQ0NzQ0EsNEJEdENBLENDc0NBLDZCRHRDQSxDQ3NDQSx5QkR0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LFNBTVAsUUFOTyxDQUFBLGFBU1AsWUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFB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QUNDLENBQUEsY0FDSCxDQUFBLHVCQUdILDRCQUNLLENBREwsd0JBQ0ssQ0FETCxvQkFDSyxDQUFBLGlCQUdiLDZCQUNjLENBRGQscUJBQ2MsQ0FBQSxXQUVKLENBQUEsZ0JBQ00sQ0FBQSw0QkFDSSxDQURKLHdCQUNJLENBREosb0JBQ0ksQ0FBQSw2RkFDNkQsQ0FEN0QscUZBQzZELENBQUEsZUFDaEYsYUFJUyxDQUFBLGlCQUNYLGVBRVcsQ0FBQSxZQUNYLFdBR1MsQ0FBQSxRQUNULFlBR1UsQ0FBQSxpQkFDVixtQkFPVSxDQVBWLG9CQU9VLENBUFYsbUJBT1UsQ0FQVixZQU9VLENBQUEsd0JBQ0ksQ0FESiwwQkFDSSxDQURKLHFCQUNJLENBREosa0JBQ0ksQ0FBQSxpQkFDZCxtQkFHVSxDQUhWLG9CQUdVLENBSFYsbUJBR1UsQ0FIVixZQUdVLENBQUEscUJBQ0ksQ0FESix1QkFDSSxDQURKLGtCQUNJLENBREosZUFDSSxDQUFBLG1CQUNkLG1CQUdVLENBSFYsb0JBR1UsQ0FIVixtQkFHVSxDQUhWLFlBR1UsQ0FBQSx1QkFDUSxDQURSLDhCQUNRLENBRFIsb0JBQ1EsQ0FEUixzQkFDUSxDQUFBLFdBQ2xCLFVBR1EsQ0FBQSxVQUlMLG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxVQURULG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxnQlg4TFYsY1d6TE8sQ0FBQSxpQkFDSSxDQUFBLG1CQUNFLENBQUEscUJBQ0MsQ0FBQSxjWHRDaEIsYVcwQ1EsQ0FBQSx3QkFDUixhQUdXLENBQUEsVUFDSCxDQUFBLGdDQUVMLGFBQ1UsQ0FBQSxpQkFDRSxDQUFBLG9CQUNHLENBQUEsc0NBR2pCLGFBQ2EsQ0FBRSxnQkFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBicmVha3BvaW50c1xuLy8vL1xuXG4vLy8gQSBsaXN0IG9mIG5hbWVkIGJyZWFrcG9pbnRzLiBZb3UgY2FuIHVzZSB0aGVzZSB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBxdWlja2x5IGNyZWF0ZSBtZWRpYSBxdWVyaWVzLlxuLy8vIEB0eXBlIE1hcFxuJGJyZWFrcG9pbnRzOiAoXG4gIHNtYWxsOiAwLFxuICBtZWRpdW06IDY0MHB4LFxuICBsYXJnZTogMTAyNHB4LFxuICB4bGFyZ2U6IDEyMDBweCxcbiAgeHhsYXJnZTogMTQ0MHB4LFxuKSAhZGVmYXVsdDtcblxuLy8vIEEgbGlzdCBvZiBuYW1lZCBIaURQSSBicmVha3BvaW50cy4gWW91IGNhbiB1c2UgdGhlc2Ugd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gcXVpY2tseSBjcmVhdGUgbWVkaWEgcXVlcmllcyBmb3IgcmVzb2x1dGlvbnMuXG4vLy8gVmFsdWVzIG11c3QgcmVwcmVzZW50IHRoZSBkZXZpY2UgcGl4ZWxzIC8gd2ViIHBpeGVscyByYXRpb24gYW5kIGJlIHVuaXRsZXNzIG9yIGluIERQUFguXG4vLy8gQHR5cGUgTWFwXG4kYnJlYWtwb2ludHMtaGlkcGk6IChcbiAgaGlkcGktMTogMSxcbiAgaGlkcGktMS01OiAxLjUsXG4gIGhpZHBpLTI6IDIsXG4gIHJldGluYTogMixcbiAgaGlkcGktMzogM1xuKSAhZGVmYXVsdDtcblxuLy8vIFRoZSBsYXJnZXN0IG5hbWVkIGJyZWFrcG9pbnQgaW4gd2hpY2ggdG8gaW5jbHVkZSBwcmludCBhcyBhIG1lZGlhIHR5cGVcbi8vLyBAdHlwZSBLZXl3b3JkXG4kcHJpbnQtYnJlYWtwb2ludDogbGFyZ2UgIWRlZmF1bHQ7XG5cbiQtemYtemVyby1icmVha3BvaW50OiBzbWFsbCAhZGVmYXVsdDtcblxuJC16Zi1icmVha3BvaW50cy1rZXlzOiBtYXAtdG8tbGlzdCgkYnJlYWtwb2ludHMsICdrZXlzJyk7XG5cbkBpZiBudGgobWFwLXZhbHVlcygkYnJlYWtwb2ludHMpLCAxKSAhPSAwIHtcbiAgQGVycm9yICdUaGUgZmlyc3Qga2V5IGluIHRoZSAkYnJlYWtwb2ludHMgbWFwIG11c3QgaGF2ZSBhIHZhbHVlIG9mIFwiMFwiLic7XG59XG5AZWxzZSB7XG4gICQtemYtemVyby1icmVha3BvaW50OiBudGgobWFwLWtleXMoJGJyZWFrcG9pbnRzKSwgMSk7XG59XG5cbi8vLyBBbGwgb2YgdGhlIG5hbWVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIG91dHB1dCBhcyBjbGFzc2VzIGluIHlvdXIgQ1NTLCBsaWtlIGAuc21hbGwtMTJgLCBgLm1lZGl1bS02YCwgYW5kIHNvIG9uLiBFYWNoIHZhbHVlIGluIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgaW4gdGhlIGAkYnJlYWtwb2ludHNgIG1hcC5cbi8vLyBAdHlwZSBMaXN0XG4kYnJlYWtwb2ludC1jbGFzc2VzOiAoc21hbGwgbWVkaXVtIGxhcmdlKSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyBhIG1lZGlhIHF1ZXJ5IHN0cmluZyBtYXRjaGluZyB0aGUgaW5wdXQgdmFsdWUuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gc2VlIHdoYXQgdGhlIHBvc3NpYmxlIGlucHV0cyBhcmUuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkdmFsIFtzbWFsbF0gLSBCcmVha3BvaW50IG5hbWUsIG9yIHB4LCByZW0sIG9yIGVtIHZhbHVlIHRvIHByb2Nlc3MuXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkdmFsOiAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAvLyBXZWIgc3RhbmRhcmQgUGl4ZWxzIHBlciBpbmNoLiAoMWRkcHggLyAkc3RkLXdlYi1kcGkpID0gMWRwaVxuICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy12YWx1ZXMtMy8jYWJzb2x1dGUtbGVuZ3Roc1xuICAkc3RkLXdlYi1kcGk6IDk2O1xuXG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgb2YgdGhlIGZvbGxvd2luZyBicmVha3BvaW50XG4gICRicC1uZXh0OiBudWxsO1xuICAvLyBWYWx1ZSBmb3IgbWF4LXdpZHRoIG1lZGlhIHF1ZXJpZXNcbiAgJGJwLW1pbjogbnVsbDtcbiAgLy8gVmFsdWUgZm9yIG1pbi13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IG51bGw7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBJZiBuYW1lZCwgbmFtZSBvZiB0aGUgYnJlYWtwb2ludFxuICAkbmFtZTogbnVsbDtcbiAgLy8gSWYgdGhlIGJyZWFrcG9pbnQgaXMgYSBIaURQSSBicmVha3BvaW50XG4gICRoaWRwaTogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG5cbiAgLy8gSWYgYSBicmVha3BvaW50IG5hbWUgaXMgZ2l2ZW4sIGdldCBpdHMgdmFsdWUgZnJvbSB0aGUgJGJyZWFrcG9pbnRzLyRicmVha3BvaW50cy1oaWRwaSBtYXAuXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgJG5hbWU6ICRicDtcbiAgICAgICRicDogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgICAgICRicC1uZXh0OiAtemYtbWFwLW5leHQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gICAgfVxuICAgIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cy1oaWRwaSwgJGJwKSB7XG4gICAgICAkbmFtZTogJGJwO1xuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cy1oaWRwaSwgJG5hbWUpO1xuICAgICAgJGJwLW5leHQ6IC16Zi1tYXAtbmV4dC1udW1iZXIoJGJyZWFrcG9pbnRzLWhpZHBpLCAkYnApO1xuICAgICAgJGhpZHBpOiB0cnVlO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkYnA6IDA7XG4gICAgICBAd2FybiAnYnJlYWtwb2ludCgpOiBcIiN7JHZhbH1cIiBpcyBub3QgZGVmaW5lZCBpbiB5b3VyIGAkYnJlYWtwb2ludHNgIG9yIGAkYnJlYWtwb2ludHMtaGlkcGlgIHNldHRpbmcuJztcbiAgICB9XG4gIH1cblxuICBAaWYgbm90ICRuYW1lIGFuZCAkZGlyID09ICdvbmx5JyB7XG4gICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIGBvbmx5YCByYW5nZS4nO1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgJ29ubHknIGFuZCAndXAnIGhhdmUgYSBtaW4gbGltaXQuXG4gIEBpZiAkZGlyID09ICdvbmx5JyBvciAkZGlyID09ICd1cCcge1xuICAgICRicC1taW46IGlmKCRoaWRwaSwgc3RyaXAtdW5pdCgkYnApLCAtemYtYnAtdG8tZW0oJGJwKSk7XG4gIH1cbiAgLy8gT25seSAnb25seScgYW5kICdkb3duJyBoYXZlIGEgbWF4IGxpbWl0LlxuICBAaWYgJGRpciA9PSAnb25seScgb3IgJGRpciA9PSAnZG93bicge1xuICAgIC8vIElmIHRoZSBicmVha3BvaW50IGlzIGEgdmFsdWUsIHVzZSBpdCBhcyBtYXggbGltaXQuXG4gICAgQGlmIG5vdCAkbmFtZSB7XG4gICAgICAkYnAtbWF4OiBpZigkaGlkcGksIHN0cmlwLXVuaXQoJGJwKSwgLXpmLWJwLXRvLWVtKCRicCkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgYnJlYWtwb2ludCBpcyBuYW1lZCwgdGhlIG1heCBsaW1pdCBpcyB0aGUgZm9sbG93aW5nIGJyZWFrcG9pbnQgLSAxcHguXG4gICAgQGVsc2UgaWYgJGJwLW5leHQge1xuICAgICAgLy8gTWF4IHZhbHVlIGlzIDAuMnB4IHVuZGVyIHRoZSBuZXh0IGJyZWFrcG9pbnQgKDAuMDIgLyAxNiA9IDAuMDAxMjUpLlxuICAgICAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTEzMTNcbiAgICAgICRicC1tYXg6IGlmKCRoaWRwaSwgJGJwLW5leHQgLSAoMS8kc3RkLXdlYi1kcGkpLCAtemYtYnAtdG8tZW0oJGJwLW5leHQpIC0gMC4wMDEyNSk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIG1lZGlhIHF1ZXJ5IHN0cmluZyBmcm9tIG1pbiBhbmQgbWF4IGxpbWl0cy5cbiAgQGlmICRoaWRwaSB7XG4gICAgLy8gR2VuZXJhdGUgdmFsdWVzIGluIERQSSBpbnN0ZWFkIG9mIERQUFggZm9yIGFuIElFOS0xMS9PcGVyYSBtaW5pIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gU2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9Y3NzLW1lZGlhLXJlc29sdXRpb25cbiAgICAkYnAtbWluLWRwaTogaWYoJGJwLW1pbiwgJGJwLW1pbiAqICRzdGQtd2ViLWRwaSAqIDFkcGksICRicC1taW4pO1xuICAgICRicC1tYXgtZHBpOiBpZigkYnAtbWF4LCAkYnAtbWF4ICogJHN0ZC13ZWItZHBpICogMWRwaSwgJGJwLW1heCk7XG4gICAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICAgIC16Zi1icC1qb2luKCRicC1taW4sICRicC1tYXgsICctd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW8nLCAnLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvJyksXG4gICAgICAtemYtYnAtam9pbigkYnAtbWluLWRwaSwgJGJwLW1heC1kcGksICdtaW4tcmVzb2x1dGlvbicsICdtYXgtcmVzb2x1dGlvbicpLFxuICAgICAgJywgJyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gLXpmLWJwLWpvaW4oJGJwLW1pbiwgJGJwLW1heCk7XG4gIH1cbn1cblxuLy8vIFdyYXBzIGEgbWVkaWEgcXVlcnkgYXJvdW5kIHRoZSBjb250ZW50IHlvdSBwdXQgaW5zaWRlIHRoZSBtaXhpbi4gVGhpcyBtaXhpbiBhY2NlcHRzIGEgbnVtYmVyIG9mIHZhbHVlczpcbi8vLyAgLSBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIHRoZSBtaXhpbiB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBgJGJyZWFrcG9pbnRzYCBhbmQgYCRicmVha3BvaW50cy1oaWRwaWAgbWFwcywgYW5kIHVzZSBhIG1lZGlhIHF1ZXJ5IHRoZXJlLlxuLy8vICAtIElmIGEgcGl4ZWwgdmFsdWUgaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBlbSB2YWx1ZSB1c2luZyBgJGdsb2JhbC1mb250LXNpemVgIGFzIHRoZSBiYXNlLlxuLy8vICAtIElmIGEgcmVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHVuaXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGVtLlxuLy8vICAtIElmIGFuIGVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcy1pcy5cbi8vL1xuLy8vIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgcGFzc2VkLCB0aGUgbWl4aW4gd2lsbCBnZW5lcmF0ZSBhIG1lZGlhIHF1ZXJ5IGZvciBlYWNoIG9mIHRoZW0gYXMgZGVzY3JpYmVkIGFib3ZlLlxuLy8vIFNpbmNlIHRoZSBjb250ZW50IGlzIGR1cGxpY2F0ZWQgZm9yIGVhY2ggYnJlYWtwb2ludCwgdGhpcyBtaXhpbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcHJvcGVydGllcyB0aGF0XG4vLy8gY2hhbmdlIGFjcm9zcyBicmVha3BvaW50cy5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWx1ZXMuLi4gLSBCcmVha3BvaW50IG5hbWUgb3IgcHgvcmVtL2VtIHZhbHVlIHRvIHByb2Nlc3MuXG4vLy9cbi8vLyBAb3V0cHV0IElmIHRoZSBicmVha3BvaW50IGlzIFwiMHB4IGFuZCBsYXJnZXJcIiwgb3V0cHV0cyB0aGUgY29udGVudCBhcy1pcy4gT3RoZXJ3aXNlLCBvdXRwdXRzIHRoZSBjb250ZW50IHdyYXBwZWQgaW4gYSBtZWRpYSBxdWVyeS5cbkBtaXhpbiBicmVha3BvaW50KCR2YWx1ZXMuLi4pIHtcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHZhbHVlcykge1xuICAgICR2YWx1ZTogbnRoKCR2YWx1ZXMsICRpKTtcbiAgICAkc3RyOiBicmVha3BvaW50KCR2YWx1ZSk7XG4gICAgJGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsIG50aCgkdmFsdWUsIDEpKTtcbiAgICAkcGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICRwcmludC1icmVha3BvaW50KTtcbiAgICAvLyBEaXJlY3Rpb24gb2YgbWVkaWEgcXVlcnkgKHVwLCBkb3duLCBvciBvbmx5KVxuICAgICRkaXI6IGlmKGxlbmd0aCgkdmFsdWUpID4gMSwgbnRoKCR2YWx1ZSwgMiksIHVwKTtcblxuICAgICRvbGQtemYtc2l6ZTogbnVsbDtcblxuICAgIC8vIE1ha2UgYnJlYWtwb2ludCBzaXplIGF2YWlsYWJsZSBhcyBhIHZhcmlhYmxlXG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6IG50aCgkdmFsdWUsIDEpICFnbG9iYWw7IC8vIGdldCB0aGUgZmlyc3QgdmFsdWUgdG8gYWNjb3VudCBmb3IgYG9ubHlgIGFuZCBgZG93bmAga2V5d29yZHNcblxuICAgIC8vIElmICRzdHIgaXMgc3RpbGwgYW4gZW1wdHkgc3RyaW5nLCBubyBtZWRpYSBxdWVyeSBpcyBuZWVkZWRcbiAgICBAaWYgJHN0ciA9PSAnJyB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHdyYXAgdGhlIGNvbnRlbnQgaW4gYSBtZWRpYSBxdWVyeVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIEZvciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHByaW50LWJyZWFrcG9pbnQsIGFkZCBwcmludCB0byB0aGUgbWVkaWEgdHlwZXNcbiAgICAgIC8vIGdlbmVyYXRlIHByaW50IGlmIHRoZSBicmVha3BvaW50IGFmZmVjdHMgdGhlIHByaW50LWJyZWFrcG9pbnQgKG9yIHNtYWxsZXIpLlxuICAgICAgLy8gVGhpcyBtZWFucyB0aGUgY3VycmVudCBjb25kaXRpb24gb25seSBuZWVkcyB0byBiZSBleHRlbmRlZCBzbyAnZG93bicgYWx3YXlzIGdlbmVyYXRlcyBwcmludC5cbiAgICAgIEBpZiAkYnAgIT0gbnVsbCBhbmQgKCRicCA8PSAkcGJwIG9yICRkaXIgPT0gZG93bikge1xuICAgICAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkLXpmLXNpemU6ICRvbGQtemYtc2l6ZSAhZ2xvYmFsO1xuICB9XG59XG5cbi8vLyBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgbWFwIHRvIGEgVVJMLWVuY29kZWQgc3RyaW5nLCBsaWtlIHRoaXM6IGBrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAuIFRoZSB2YWx1ZSBpcyB0aGVuIGRyb3BwZWQgaW50byB0aGUgQ1NTIGZvciBhIHNwZWNpYWwgYDxtZXRhPmAgdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHQuIFRoaXMgaXMgaG93IHdlIHRyYW5zZmVyIHZhbHVlcyBmcm9tIFNhc3MgdG8gSmF2YVNjcmlwdCwgc28gdGhleSBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgcGxhY2UuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byBjb252ZXJ0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWFwJ3MgY29udGVudHMuXG5AZnVuY3Rpb24gLXpmLWJwLXNlcmlhbGl6ZSgkbWFwKSB7XG4gICRzdHI6ICcnO1xuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcCB7XG4gICAgJHN0cjogJHN0ciArICRrZXkgKyAnPScgKyAtemYtYnAtdG8tZW0oJHZhbHVlKSArICcmJztcbiAgfVxuICAkc3RyOiBzdHItc2xpY2UoJHN0ciwgMSwgLTIpO1xuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIEZpbmQgdGhlIG5leHQga2V5IGluIGEgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXAgLSBNYXAgdG8gdHJhdmVyc2UuXG4vLy8gQHBhcmFtIHtNaXhlZH0gJGtleSAtIEtleSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtNaXhlZH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGFmdGVyIGAka2V5YCwgaWYgYCRrZXlgIHdhcyBmb3VuZC4gSWYgYCRrZXlgIHdhcyBub3QgZm91bmQsIG9yIGAka2V5YCB3YXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIG1hcCwgcmV0dXJucyBgbnVsbGAuXG5AZnVuY3Rpb24gLXpmLW1hcC1uZXh0KCRtYXAsICRrZXkpIHtcblxuICAvLyBTdG9yZSB0aGUga2V5cyBvZiB0aGUgbWFwIGFzIGEgbGlzdFxuICAkdmFsdWVzOiBtYXAta2V5cygkbWFwKTtcblxuICAkaTogMDtcblxuICAvLyBJZiB0aGUgS2V5IEV4aXN0cywgR2V0IHRoZSBpbmRleCBvZiB0aGUga2V5IHdpdGhpbiB0aGUgbWFwIGFuZCBhZGQgMSB0byBpdCBmb3IgdGhlIG5leHQgYnJlYWtwb2ludCBpbiB0aGUgbWFwXG4gIEBpZiAobWFwLWhhcy1rZXkoJG1hcCwgJGtleSkpIHtcbiAgICAkaTogaW5kZXgoJHZhbHVlcywgJGtleSkgKyAxO1xuICB9XG5cbiAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBvciBpdCdzIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwLCByZXR1cm4gbnVsbFxuICBAaWYgKCRpID4gbGVuZ3RoKCRtYXApIG9yICRpID09IDApIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbHVlXG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgbnRoKCR2YWx1ZXMsICRpKSk7XG4gIH1cblxufVxuXG4vLy8gRmluZCB0aGUgbmV4dCBudW1iZXIgaW4gYSBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byB0cmF2ZXJzZS5cbi8vLyBAcGFyYW0ge01peGVkfSAkbnVtYmVyIC0gTnVtYmVyIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge01peGVkfSBUaGUgbnVtYmVyIGZvbGxvd2luZyBgJG51bWJlcmAsIGlmIGAkbnVtYmVyYCB3YXMgZm91bmQuIElmIGAkbnVtYmVyYCB3YXMgbm90IGZvdW5kLCBvciBgJG51bWJlcmAgd2FzIHRoZSBiaWdnZXN0IG51bWJlciBpbiB0aGUgbWFwLCByZXR1cm5zIGBudWxsYC5cbkBmdW5jdGlvbiAtemYtbWFwLW5leHQtbnVtYmVyKCRtYXAsICRudW1iZXIpIHtcblxuICAkbmV4dF9udW1iZXI6IG51bGw7XG5cbiAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgIEBpZiB0eXBlLW9mKCR2KSA9PSAnbnVtYmVyJyBhbmQgJHYgPiAkbnVtYmVyIGFuZCAoJG5leHRfbnVtYmVyID09IG51bGwgb3IgJHYgPCAkbmV4dF9udW1iZXIpIHtcbiAgICAgICRuZXh0X251bWJlcjogJHY7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmV4dF9udW1iZXI7XG59XG5cbi8vLyBSZXR1cm4gYSBsaXN0IG9mIG91ciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gJGtleS4gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGhcbi8vLyByZXNwb25zaXZlIGd1dHRlcnMgZm9yIHRoZSBncmlkLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRrZXkgLSBLZXkgdG8gdXNlIGFzIGxhc3QgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtBcnJheX0gVGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgdXAgdG8gYW5kLiBJZiAka2V5IGlzIGF1dG8sIHJldHVybnMgYnJlYWtwb2ludHMgYWJvdmUgdGhlIHplcm9cbkBmdW5jdGlvbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCRrZXkpIHtcbiAgJGxpc3Q6ICgpO1xuICAkZm91bmRfa2V5OiBmYWxzZTtcblxuICBAZWFjaCAkbmFtZSBpbiAkLXpmLWJyZWFrcG9pbnRzLWtleXMge1xuICAgIEBpZiAoJG5hbWUgPT0gJGtleSkge1xuICAgICAgJGZvdW5kX2tleTogdHJ1ZTtcbiAgICB9XG4gICAgQGlmIG5vdCAkZm91bmRfa2V5IHtcbiAgICAgICRsaXN0OiBhcHBlbmQoJGxpc3QsICRuYW1lKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkbGlzdDtcbn1cblxuLy8vIFJldHVybiBhIGxpc3Qgb2Ygb3VyIG5hbWVkIGJyZWFrcG9pbnRzIGxlc3MgdGhhbiAka2V5LiBVc2VmdWwgZm9yIGRlYWxpbmcgd2l0aFxuLy8vIHJlc3BvbnNpdmUgZ3V0dGVycyBmb3IgdGhlIGdyaWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgLSBhIG5hbWVkIG9yIG5vbi1uYW1lZCBicmVha3BvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge0FycmF5fSBUaGUgbGlzdCBvZiBicmVha3BvaW50cyB1cCB0byBhbmQuIElmICRrZXkgaXMgYXV0bywgcmV0dXJucyBicmVha3BvaW50cyBhYm92ZSB0aGUgemVyb1xuQGZ1bmN0aW9uIC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgJGxhc3Q6ICQtemYtemVyby1icmVha3BvaW50O1xuICAkZm91bmQ6IGZhbHNlO1xuXG4gICR2YWx1ZTogdW5pdGxlc3MtY2FsYygkYnJlYWtwb2ludCwgMXB4KTtcbiAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgIEBpZiBub3QgJGZvdW5kIHtcbiAgICAgIEBpZiB1bml0bGVzcy1jYWxjKCR2YWwpID4gJHZhbHVlIHtcbiAgICAgICAgJGZvdW5kOiB0cnVlO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRsYXN0OiAka2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxhc3Q7XG59XG5cbi8vLyBHZXQgYSB2YWx1ZSBmb3IgYSBicmVha3BvaW50IGZyb20gYSByZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIHNpbmdsZSB2YWx1ZSwgcmV0dXJuIGl0IHJlZ2FyZGxlc3Mgb2YgYCR2YWx1ZWAuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBoYXMgdGhlIGtleSBgJHZhbHVlYCwgdGhlIGV4YWN0IGJyZWFrcG9pbnQgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBkb2VzICpub3QqIGhhdmUgdGhlIGJyZWFrcG9pbnQsIHRoZSB2YWx1ZSBtYXRjaGluZyB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBpbiB0aGUgY29uZmlnIG1hcCBpcyByZXR1cm5lZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIFJlc3BvbnNpdmUgY29uZmlnIG1hcCBvciBzaW5nbGUgdmFsdWUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUgdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TWl4ZWR9IFRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUuXG5AZnVuY3Rpb24gLXpmLWdldC1icC12YWwoJG1hcCwgJHZhbHVlKSB7XG4gIC8vIElmIHRoZSBnaXZlbiBtYXAgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdFxuICBAaWYgdHlwZS1vZigkbWFwKSA9PSAnbnVtYmVyJyB7XG4gICAgQHJldHVybiAkbWFwO1xuICB9XG5cblxuICAvLyBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCBuYW1lIGV4aXN0cyBnbG9iYWxseVxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJHZhbHVlKSB7XG4gICAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgICAkdmFsdWU6IC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJHZhbHVlKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgaW4gdGhlIGxvY2FsIGNvbmZpZyBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJG1hcCwgJHZhbHVlKSB7XG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gICAgQHJldHVybiBtYXAtZ2V0KCRtYXAsICR2YWx1ZSk7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBuZXh0IGxvd2VzdCBicmVha3BvaW50IGFuZCByZXR1cm4gdGhhdCB2YWx1ZVxuICBAZWxzZSB7XG4gICAgJGFuY2hvcjogbnVsbDtcbiAgICAkZm91bmQ6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgQGlmIG5vdCAkZm91bmQge1xuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG1hcCwgJGtleSkge1xuICAgICAgICAgICRhbmNob3I6ICRrZXk7XG4gICAgICAgIH1cbiAgICAgICAgQGlmICRrZXkgPT0gJHZhbHVlIHtcbiAgICAgICAgICAkZm91bmQ6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgJGFuY2hvcik7XG4gIH1cbn1cblxuLy8vIFJldHVybiB0aGUgYmVzdCBicmVha3BvaW50IHRvIHVzZSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxpbmcgY29udGV4dC4gSXQgcmV0dXJucyBpbiBvcmRlcjpcbi8vLyAxLiB0aGUgZ2l2ZW4gYCR2YWx1ZWAgYXJndW1lbnQgaWYgaXQgaXMgbm90IG51bGwuXG4vLy8gMi4gdGhlIGdsb2JhbCBicmVha3BvaW50IGNvbnRleHQgYCQtemYtc2l6ZWAgaWYgaXQgaXMgbm90IG51bGwgKGxpa2UgaWYgY2FsbGVkIGluc2lkZSB0aGVuIGBicmVha3BvaW50KClgIG1peGluKVxuLy8vIDMuIHRoZSBnaXZlbiBgJGRlZmF1bHRgIGFyZ3VtZW50LlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgW251bGxdIC0gQnJlYWtwb2ludCB0byB1c2UgaW4gcHJpb3JpdHkgaWYgbm9uLW51bGwuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGVmYXVsdCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBieSBkZWZhdWx0IGlmIG5vIG90aGVyIHZhbHVlIGNhbiBiZSB1c2VkLlxuLy8vXG4vLy8gQHJldHVybiB7S2V5d29yZH0gVGhlIHJlc29sdmVkIGJyZWFrcG9pbnQuXG5AZnVuY3Rpb24gLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkdmFsdWU6IG51bGwsICRkZWZhdWx0OiBudWxsKSB7XG4gIEBpZiAoJHZhbHVlICE9IG51bGwpIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuICBAZWxzZSBpZiAodmFyaWFibGUtZXhpc3RzKC16Zi1zaXplKSBhbmQgdHlwZS1vZigkLXpmLXNpemUpICE9ICdudW1iZXInKSBhbmQgJC16Zi1zaXplICE9IG51bGwge1xuICAgIEByZXR1cm4gJC16Zi1zaXplO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICRkZWZhdWx0O1xuICB9XG59XG5cbi8vLyBSZXR1cm4gbWVkaWEgcXVlcnkgc3RyaW5nIGZyb20gdGhlIGdpdmVuIG1pbiBhbmQvb3IgbWF4IGxpbWl0cy5cbi8vLyBJZiBhIGxpbWl0IGlzIGVxdWFsIHRvIGBudWxsYCBvciBgMGAsIGl0IGlzIGlnbm9yZWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF0gLSBNaW4gbWVkaWEgcXVlcnkgbGltaXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXggWzBdIC0gTWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWluLW5hbWUgWydtaW4td2lkdGgnXSAtIE5hbWUgb2YgdGhlIG1pbiBtZWRpYSBxdWVyeSBsaW1pdC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGRlbGltaXRlciBbJ21heC13aWR0aCddIC0gTmFtZSBvZiB0aGUgbWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gTWVkaWEgUXVlcnkgc3RyaW5nLlxuQGZ1bmN0aW9uIC16Zi1icC1qb2luKFxuICAkbWluOiAwLFxuICAkbWF4OiAwLFxuICAkbWluLW5hbWU6ICdtaW4td2lkdGgnLFxuICAkbWF4LW5hbWU6ICdtYXgtd2lkdGgnXG4pIHtcbiAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICBpZigkbWluIGFuZCAkbWluID4gMCwgJygjeyRtaW4tbmFtZX06ICN7JG1pbn0pJywgbnVsbCksXG4gICAgaWYoJG1heCBhbmQgJG1heCA+IDAsICcoI3skbWF4LW5hbWV9OiAjeyRtYXh9KScsIG51bGwpLFxuICAgICcgYW5kICcpO1xufVxuXG4kc21hbGwtdXA6ICcnO1xuJHNtYWxsLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBzbWFsbCkge1xuICAkc21hbGwtdXA6IHNjcmVlbjtcbiAgJHNtYWxsLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHNtYWxsIG9ubHkpfScpO1xufVxuXG4kbWVkaXVtLXVwOiAnJztcbiRtZWRpdW0tb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIG1lZGl1bSkge1xuICAkbWVkaXVtLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChtZWRpdW0pfScpO1xuICAkbWVkaXVtLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KG1lZGl1bSBvbmx5KX0nKTtcbn1cblxuJGxhcmdlLXVwOiAnJztcbiRsYXJnZS1vbmx5OiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgbGFyZ2UpIHtcbiAgJGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSl9Jyk7XG4gICRsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSBvbmx5KX0nKTtcbn1cblxuJHhsYXJnZS11cDogJyc7XG4keGxhcmdlLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCB4bGFyZ2UpIHtcbiAgJHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeGxhcmdlKX0nKTtcbiAgJHhsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2Ugb25seSl9Jyk7XG59XG5cbiR4eGxhcmdlLXVwOiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgeHhsYXJnZSkge1xuICAkeHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeHhsYXJnZSl9Jyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcmV2ZWFsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSBtb2RhbC5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHdpZHRoIG9mIGEgbW9kYWwsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtd2lkdGg6IDYwMHB4ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXhpbXVtIHdpZHRoIG9mIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgYXJvdW5kIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHotaW5kZXggZm9yIG1vZGFscy4gVGhlIG92ZXJsYXkgdXNlcyB0aGlzIHZhbHVlLCB3aGlsZSB0aGUgbW9kYWwgaXRzZWxmIHVzZXMgdGhpcyB2YWx1ZSBwbHVzIG9uZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtemluZGV4OiAxMDA1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBvdmVybGF5cy5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjQ1KSAhZGVmYXVsdDtcblxuXG4vLyBQbGFjZWhvbGRlciBzZWxlY3RvciBmb3IgbWVkaXVtLWFuZC11cCBtb2RhbHNcbi8vIFByZXZlbnRzIGR1cGxpY2F0ZSBDU1Mgd2hlbiBkZWZpbmluZyBtdWx0aXBsZSBSZXZlYWwgc2l6ZXNcbi8vIFRoaXMgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGJyZWFrcG9pbnQgdGhlbiBgQG1peGluIHJldmVhbC1tb2RhbC13aWR0aGBcbkBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICVyZXZlYWwtY2VudGVyZWQge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cbn1cblxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbW9kYWwgb3ZlcmxheS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgb3ZlcmxheS5cbkBtaXhpbiByZXZlYWwtb3ZlcmxheSgkYmFja2dyb3VuZDogJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICRyZXZlYWwtemluZGV4O1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYSBtb2RhbC5cbkBtaXhpbiByZXZlYWwtbW9kYWwtYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgei1pbmRleDogJHJldmVhbC16aW5kZXggKyAxO1xuICAvLyBXb3JrYXJvdW5kIGFuZHJvaWQgYnJvd3NlciB6LWluZGV4IGJ1Z1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHJldmVhbC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJHJldmVhbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyZXZlYWwtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmV2ZWFsLWJhY2tncm91bmQ7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHJvd3MgZG9uJ3QgaGF2ZSBhIG1pbi13aWR0aCBvbiB0aGVtXG4gIC5jb2x1bW4ge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC8vIFN0cmlwIG1hcmdpbnMgZnJvbSB0aGUgbGFzdCBpdGVtIGluIHRoZSBtb2RhbFxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGp1c3RzIHRoZSB3aWR0aCBvZiBhIG1vZGFsLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBXaWR0aCBvZiB0aGUgbW9kYWwuIEdlbmVyYWxseSBhIHBlcmNlbnRhZ2UuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXgtd2lkdGggWyRyZXZlYWwtbWF4LXdpZHRoXSAtIE1heGltdW0gd2lkdGggb2YgdGhlIG1vZGFsLlxuQG1peGluIHJldmVhbC1tb2RhbC13aWR0aChcbiAgJHdpZHRoOiAkcmV2ZWFsLXdpZHRoLFxuICAkbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aFxuKSB7XG4gIC8vIEV4dGVuZHMgbXVzdCBiZSBtYWRlIG91dHNpZGUgb2YgYnJlYWtwb2ludHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBTYXNzIHZlcnNpb25zIChsaWJzYXNzIHYzLjUpXG4gIEBleHRlbmQgJXJldmVhbC1jZW50ZXJlZDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIG1heC13aWR0aDogJG1heC13aWR0aDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGZ1bGwtc2NyZWVuIG1vZGFsLCB3aGljaCBzdHJldGNoZXMgdGhlIGZ1bGwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgd2luZG93LlxuQG1peGluIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuIHtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXZlYWwge1xuXG4gIC8vLyBEaXNhYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGlzIHNob3duIHRvIHByZXZlbnQgdGhlIGJhY2tncm91bmQgZnJvbSBzaGlmdGluZ1xuICBodG1sLmlzLXJldmVhbC1vcGVuIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuXG4gICAgJi56Zi1oYXMtc2Nyb2xsIHtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB9XG5cbiAgICBib2R5IHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheVxuICAucmV2ZWFsLW92ZXJsYXkge1xuICAgIEBpbmNsdWRlIHJldmVhbC1vdmVybGF5O1xuICB9XG5cbiAgLy8gTW9kYWwgY29udGFpbmVyXG4gIC5yZXZlYWwge1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1iYXNlO1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgkcmV2ZWFsLXdpZHRoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFJlbW92ZSBwYWRkaW5nXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8vIFNpemluZyBjbGFzc2VzXG4gICAgJi50aW55ICB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgzMCUpOyB9XG4gICAgJi5zbWFsbCB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg1MCUpOyB9XG4gICAgJi5sYXJnZSB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg5MCUpOyB9XG5cbiAgICAvLyBGdWxsLXNjcmVlbiBtb2RlXG4gICAgJi5mdWxsIHtcbiAgICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJC16Zi16ZXJvLWJyZWFrcG9pbnQgb25seSkge1xuICAgICAgQGluY2x1ZGUgcmV2ZWFsLW1vZGFsLWZ1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgJi53aXRob3V0LW92ZXJsYXkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGZvdW5kYXRpb24tbm9ybWFsaXplKCkge1xuICAvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbiAgLy8gRG9jdW1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuXG4gIGh0bWwge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG4gIH1cblxuICAvLyBTZWN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2Vycy5cblxuICBib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gIC8vIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIG1hcmdpbjogMC42N2VtIDA7XG4gIH1cblxuICAvLyBHcm91cGluZyBjb250ZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAgLy8gMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG5cbiAgaHIge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLyAxXG4gICAgaGVpZ2h0OiAwOyAvLyAxXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIDJcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cblxuICBwcmUge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMWVtOyAvLyAyXG4gIH1cblxuICAvLyBUZXh0LWxldmVsIHNlbWFudGljc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cblxuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBDaHJvbWUgNTctXG4gIC8vIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG5cbiAgYWJiclt0aXRsZV0ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7IC8vIDFcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLy8gMlxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cblxuICBiLFxuICBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAvLyAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgY29kZSxcbiAga2JkLFxuICBzYW1wIHtcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8vIDFcbiAgICBmb250LXNpemU6IDFlbTsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogODAlO1xuICB9XG5cbiAgLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gIC8vIGFsbCBicm93c2Vycy5cblxuICBzdWIsXG4gIHN1cCB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIC8vIEVtYmVkZGVkIGNvbnRlbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuXG4gIGltZyB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gRm9ybXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAgLy8gMi4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMTAwJTsgLy8gMVxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgbWFyZ2luOiAwOyAvLyAyXG4gIH1cblxuICAvLyBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAgLy8gMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cblxuICBidXR0b24sXG4gIGlucHV0IHsgLy8gMVxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gIC8vIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cblxuICBidXR0b24sXG4gIHNlbGVjdCB7IC8vIDFcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG5cbiAgYnV0dG9uLFxuICBbdHlwZT1cImJ1dHRvblwiXSxcbiAgW3R5cGU9XCJyZXNldFwiXSxcbiAgW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gIFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAvLyBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG5cbiAgYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuICBbdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBmaWVsZHNldCB7XG4gICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAgLy8gMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICAvLyAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gIC8vICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuXG4gIGxlZ2VuZCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICAgIGNvbG9yOiBpbmhlcml0OyAvLyAyXG4gICAgZGlzcGxheTogdGFibGU7IC8vIDFcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8vIDFcbiAgICBwYWRkaW5nOiAwOyAvLyAzXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLy8gMVxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cblxuICBwcm9ncmVzcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSAxMCsuXG5cbiAgdGV4dGFyZWEge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gIC8vIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cblxuICBbdHlwZT1cImNoZWNrYm94XCJdLFxuICBbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gICAgcGFkZGluZzogMDsgLy8gMlxuICB9XG5cbiAgLy8gQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuXG4gIFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICBbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuXG4gIFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvLyAyXG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG5cbiAgW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cblxuICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMVxuICAgIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgfVxuXG4gIC8vIEludGVyYWN0aXZlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC5cblxuICBkZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cblxuICBzdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gIH1cblxuICAvLyBNaXNjXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuXG4gIHRlbXBsYXRlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG5cbiAgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgbm8tY29sb3ItbGl0ZXJhbHMsIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcblxuLy8vL1xuLy8vIEBncm91cCBnbG9iYWxcbi8vLy9cblxuQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8vIEZvbnQgc2l6ZSBhdHRyaWJ1dGUgYXBwbGllZCB0byBgPGh0bWw+YCBhbmQgYDxib2R5PmAuIFdlIHVzZSAxMDAlIGJ5IGRlZmF1bHQgc28gdGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB1c2VyJ3MgYnJvd3NlciBzZXR0aW5ncy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHdpZHRoIG9mIHlvdXIgc2l0ZS4gVXNlZCBieSB0aGUgZ3JpZCB0byBkZXRlcm1pbmUgcm93IHdpZHRoLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC13aWR0aDogcmVtLWNhbGMoMTIwMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBhbGwgdHlwZS4gYCRnbG9iYWwtbGluZWhlaWdodGAgaXMgMjRweCB3aGlsZSBgJGdsb2JhbC1mb250LXNpemVgIGlzIDE2cHhcbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbGluZWhlaWdodDogMS41ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3JzIHVzZWQgZm9yIGJ1dHRvbnMsIGNhbGxvdXRzLCBsaW5rcywgZXRjLiBUaGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbG9yIGNhbGxlZCBgcHJpbWFyeWAuXG4vLy8gQHR5cGUgTWFwXG4kZm91bmRhdGlvbi1wYWxldHRlOiAoXG4gIHByaW1hcnk6ICMxNzc5YmEsXG4gIHNlY29uZGFyeTogIzc2NzY3NixcbiAgc3VjY2VzczogIzNhZGI3NixcbiAgd2FybmluZzogI2ZmYWUwMCxcbiAgYWxlcnQ6ICNjYzRiMzcsXG4pICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgbGlnaHQgZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGxpZ2h0LWdyYXk6ICNlNmU2ZTYgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBtZWRpdW0gZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJG1lZGl1bS1ncmF5OiAjY2FjYWNhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgZGFyayBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kZGFyay1ncmF5OiAjOGE4YThhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgYmxhY2sgdWkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRibGFjazogIzBhMGEwYSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIHVzZWQgZm9yIHdoaXRlIHVpIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kd2hpdGU6ICNmZWZlZmUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1mb250LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0YWNrIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIExpc3RcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbi8vLyBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhbnRpYWxpYXNlZCB0eXBlLCB1c2luZyB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGFuZCBgLW1vei1vc3gtZm9udC1zbW9vdGhpbmdgIENTUyBwcm9wZXJ0aWVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRib2R5LWFudGlhbGlhc2VkOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIG1hcmdpbiBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgcGFkZGluZyBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIHBvc2l0aW9uaW5nIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXBvc2l0aW9uOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIG5vcm1hbCB0eXBlLlxuLy8vIEB0eXBlIEtleXdvcmQgfCBOdW1iZXJcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIGJvbGQgdHlwZS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kZ2xvYmFsLXdlaWdodC1ib2xkOiBib2xkICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBib3JkZXIgcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1yYWRpdXM6IDAgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgYWxsIG1lbnUgc3R5bGVzLiBDYW4gYmUgb3ZlcndyaXR0ZW4gYXQgaW5kaXZpZHVhbCBtZW51IGNvbXBvbmVudCBsZXZlbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbWVudS1wYWRkaW5nOiAwLjdyZW0gMXJlbSAhZGVmYXVsdDtcblxuLy8vIEdsb2JhbCB2YWx1ZSB1c2VkIGZvciBhbGwgbWVudSBzdHlsZXMuIE5lc3RlZCBtYXJnaW4gZm9yIHN1Ym1lbnUuXG4kZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBDU1MuIENhbiBiZSBlaXRoZXIgYGx0cmAgb3IgYHJ0bGAuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGdsb2JhbC10ZXh0LWRpcmVjdGlvbjogbHRyICFkZWZhdWx0O1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGZvciBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCBpdC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZ2xvYmFsLWZsZXhib3g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVkIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMgZm9yIHByb3RvdHlwZXMgaWYgYXBwbGljYWJsZVxuLy8vIEB0eXBlIEJvb2xlYW5cbiRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBjdXJzb3IncyB2YWx1ZSwgYGF1dG9gIGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBLZXl3b3JkXG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG8gIWRlZmF1bHQ7XG5cbkBpZiBub3QgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICBAZXJyb3IgJ0luICRmb3VuZGF0aW9uLXBhbGV0dGUsIHlvdSBtdXN0IGhhdmUgYSBjb2xvciBuYW1lZCBcInByaW1hcnlcIi4nO1xufVxuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgdGV4dCBkaXJlY3Rpb25cbiRnbG9iYWwtbGVmdDogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsIHJpZ2h0LCBsZWZ0KTtcbiRnbG9iYWwtcmlnaHQ6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBsZWZ0LCByaWdodCk7XG5cbi8vIEludGVybmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGZsZXgganVzdGlmeWluZyBvcHRpb25zXG4kLXpmLWZsZXgtanVzdGlmeTogLXpmLWZsZXgtanVzdGlmeSgkZ2xvYmFsLXRleHQtZGlyZWN0aW9uKTtcblxuLy8vIEdsb2JhbCB0b2xlcmFuY2UgZm9yIGNvbG9yIHBpY2sgY29udHJhc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwICFkZWZhdWx0O1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgY29sb3JzXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWdsb2JhbC1zdHlsZXMge1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLW5vcm1hbGl6ZTtcblxuICAvLyBUaGVzZSBzdHlsZXMgYXJlIGFwcGxpZWQgdG8gYSA8bWV0YT4gdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHRcbiAgLmZvdW5kYXRpb24tbXEge1xuICAgIGZvbnQtZmFtaWx5OiAnI3stemYtYnAtc2VyaWFsaXplKCRicmVha3BvaW50cyl9JztcbiAgfVxuXG4gIGh0bWwge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIFNldCBib3gtc2l6aW5nIGdsb2JhbGx5IHRvIGhhbmRsZSBwYWRkaW5nIGFuZCBib3JkZXIgd2lkdGhzXG4gICosXG4gICo6OmJlZm9yZSxcbiAgKjo6YWZ0ZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBEZWZhdWx0IGJvZHkgc3R5bGVzXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZDtcblxuICAgIGZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4gICAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG5cbiAgICBAaWYgKCRib2R5LWFudGlhbGlhc2VkKSB7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICAvLyBHZXQgcmlkIG9mIGdhcCB1bmRlciBpbWFnZXMgYnkgbWFraW5nIHRoZW0gZGlzcGxheTogaW5saW5lLWJsb2NrOyBieSBkZWZhdWx0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAvLyBHcmlkIGRlZmF1bHRzIHRvIGdldCBpbWFnZXMgYW5kIGVtYmVkcyB0byB3b3JrIHByb3Blcmx5XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIHRha2VzIG9uIGhlaWdodCBhdXRvbWF0aWNhbGx5XG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogNTBweDtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgfVxuXG4gIC8vIE1ha2Ugc2VsZWN0IGVsZW1lbnRzIGFyZSAxMDAlIHdpZHRoIGJ5IGRlZmF1bHRcbiAgc2VsZWN0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgLy8gU3R5bGVzIEdvb2dsZSBNYXBzIGFuZCBNYXBRdWVzdCBlbWJlZHMgcHJvcGVybHlcbiAgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1pZHNcbiAgLm1hcF9jYW52YXMsXG4gIC5tcWEtZGlzcGxheSB7XG4gICAgaW1nLFxuICAgIGVtYmVkLFxuICAgIG9iamVjdCB7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCA8YnV0dG9uPiBzdHlsZXMgY3JlYXRlZCBieSBtb3N0IGJyb3dzZXJzXG4gIGJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY3Vyc29yOiAkZ2xvYmFsLWJ1dHRvbi1jdXJzb3I7XG4gIH1cblxuICAvLyBQcmV2ZW50IHRleHQgb3ZlcmZsb3cgb24gcHJlXG4gIHByZSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAvLyBNYWtlIHJlc2V0IGluaGVyaXQgZm9udC1mYW1pbHkgaW5zdGVhZCBvZiBzZXR0aW5ncyBzYW5zLXNlcmlmXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGNsYXNzZXMgdG8gc2hvdy9oaWRlIGVsZW1lbnRzIGluIEphdmFTY3JpcHRcbiAgLmlzLXZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaXMtaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8vICBGb3VuZGF0aW9uIGZvciBTaXRlcyBTZXR0aW5nc1xuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gIFRhYmxlIG9mIENvbnRlbnRzOlxuLy9cbi8vICAgMS4gR2xvYmFsXG4vLyAgIDIuIEJyZWFrcG9pbnRzXG4vLyAgIDMuIFRoZSBHcmlkXG4vLyAgIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gICA1LiBUeXBvZ3JhcGh5IEhlbHBlcnNcbi8vICAgNi4gQWJpZGVcbi8vICAgNy4gQWNjb3JkaW9uXG4vLyAgIDguIEFjY29yZGlvbiBNZW51XG4vLyAgIDkuIEJhZGdlXG4vLyAgMTAuIEJyZWFkY3J1bWJzXG4vLyAgMTEuIEJ1dHRvblxuLy8gIDEyLiBCdXR0b24gR3JvdXBcbi8vICAxMy4gQ2FsbG91dFxuLy8gIDE0LiBDYXJkXG4vLyAgMTUuIENsb3NlIEJ1dHRvblxuLy8gIDE2LiBEcmlsbGRvd25cbi8vICAxNy4gRHJvcGRvd25cbi8vICAxOC4gRHJvcGRvd24gTWVudVxuLy8gIDE5LiBGbGV4Ym94IFV0aWxpdGllc1xuLy8gIDIwLiBGb3Jtc1xuLy8gIDIxLiBMYWJlbFxuLy8gIDIyLiBNZWRpYSBPYmplY3Rcbi8vICAyMy4gTWVudVxuLy8gIDI0LiBNZXRlclxuLy8gIDI1LiBPZmYtY2FudmFzXG4vLyAgMjYuIE9yYml0XG4vLyAgMjcuIFBhZ2luYXRpb25cbi8vICAyOC4gUHJvZ3Jlc3MgQmFyXG4vLyAgMjkuIFByb3RvdHlwZSBBcnJvd1xuLy8gIDMwLiBQcm90b3R5cGUgQm9yZGVyLUJveFxuLy8gIDMxLiBQcm90b3R5cGUgQm9yZGVyLU5vbmVcbi8vICAzMi4gUHJvdG90eXBlIEJvcmRlcmVkXG4vLyAgMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAgMzQuIFByb3RvdHlwZSBGb250LVN0eWxpbmdcbi8vICAzNS4gUHJvdG90eXBlIExpc3QtU3R5bGUtVHlwZVxuLy8gIDM2LiBQcm90b3R5cGUgT3ZlcmZsb3dcbi8vICAzNy4gUHJvdG90eXBlIFBvc2l0aW9uXG4vLyAgMzguIFByb3RvdHlwZSBSb3VuZGVkXG4vLyAgMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vICA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gIDQxLiBQcm90b3R5cGUgU2l6aW5nXG4vLyAgNDIuIFByb3RvdHlwZSBTcGFjaW5nXG4vLyAgNDMuIFByb3RvdHlwZSBUZXh0LURlY29yYXRpb25cbi8vICA0NC4gUHJvdG90eXBlIFRleHQtVHJhbnNmb3JtYXRpb25cbi8vICA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAgNDYuIFJlc3BvbnNpdmUgRW1iZWRcbi8vICA0Ny4gUmV2ZWFsXG4vLyAgNDguIFNsaWRlclxuLy8gIDQ5LiBTd2l0Y2hcbi8vICA1MC4gVGFibGVcbi8vICA1MS4gVGFic1xuLy8gIDUyLiBUaHVtYm5haWxcbi8vICA1My4gVGl0bGUgQmFyXG4vLyAgNTQuIFRvb2x0aXBcbi8vICA1NS4gVG9wIEJhclxuLy8gIDU2LiBYeSBHcmlkXG5cbi8vQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8gMS4gR2xvYmFsXG4vLyAtLS0tLS0tLS1cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCU7XG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKTtcbiRnbG9iYWwtbGluZWhlaWdodDogMS41O1xuJGZvdW5kYXRpb24tcGFsZXR0ZTogKFxuICAgICAgICBwcmltYXJ5OiAjMTc3OWJhLFxuICAgICAgICBzZWNvbmRhcnk6ICM3Njc2NzYsXG4gICAgICAgIHN1Y2Nlc3M6ICMzYWRiNzYsXG4gICAgICAgIHdhcm5pbmc6ICNmZmFlMDAsXG4gICAgICAgIGFsZXJ0OiAjY2M0YjM3LFxuKTtcbiRsaWdodC1ncmF5OiAjZTZlNmU2O1xuJG1lZGl1bS1ncmF5OiAjY2FjYWNhO1xuJGRhcmstZ3JheTogIzhhOGE4YTtcbiRibGFjazogIzBhMGEwYTtcbiR3aGl0ZTogI2ZlZmVmZTtcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjaztcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4kYm9keS1hbnRpYWxpYXNlZDogdHJ1ZTtcbiRnbG9iYWwtbWFyZ2luOiAxcmVtO1xuJGdsb2JhbC1wYWRkaW5nOiAxcmVtO1xuJGdsb2JhbC1wb3NpdGlvbjogMXJlbTtcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsO1xuJGdsb2JhbC13ZWlnaHQtYm9sZDogYm9sZDtcbiRnbG9iYWwtcmFkaXVzOiAwO1xuJGdsb2JhbC1tZW51LXBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW46IDFyZW07XG4kZ2xvYmFsLXRleHQtZGlyZWN0aW9uOiBsdHI7XG4kZ2xvYmFsLWZsZXhib3g6IHRydWU7XG4kZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50czogZmFsc2U7XG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG87XG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwO1xuJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzOiB0cnVlO1xuXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG4kcHJpbnQtaHJlZnM6IHRydWU7XG5cbi8vIDIuIEJyZWFrcG9pbnRzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWtwb2ludHM6IChcbiAgICAgICAgc21hbGw6IDAsXG4gICAgICAgIHNtZWRpdW06IDQwMHB4LFxuICAgICAgICBtZWRpdW06IDY0MHB4LFxuICAgICAgICBsYXJnZTogMTAyNHB4LFxuICAgICAgICB4bGFyZ2U6IDEyMDBweCxcbiAgICAgICAgeHhsYXJnZTogMTQ0MHB4LFxuKTtcbiRwcmludC1icmVha3BvaW50OiBsYXJnZTtcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBzbWVkaXVtIG1lZGl1bSBsYXJnZSk7XG5cbi8vIDMuIFRoZSBHcmlkXG4vLyAtLS0tLS0tLS0tLVxuXG4kZ3JpZC1yb3ctd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW4tY291bnQ6IDEyO1xuJGdyaWQtY29sdW1uLWd1dHRlcjogKFxuICAgICAgICBzbWFsbDogMjBweCxcbiAgICAgICAgbWVkaXVtOiAzMHB4LFxuKTtcbiRncmlkLWNvbHVtbi1hbGlnbi1lZGdlOiB0cnVlO1xuJGdyaWQtY29sdW1uLWFsaWFzOiAnY29sdW1ucyc7XG4kYmxvY2stZ3JpZC1tYXg6IDg7XG5cbi8vIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRoZWFkZXItZm9udC1mYW1pbHk6ICRib2R5LWZvbnQtZmFtaWx5O1xuJGhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGhlYWRlci1mb250LXN0eWxlOiBub3JtYWw7XG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiRoZWFkZXItY29sb3I6IGluaGVyaXQ7XG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJGhlYWRlci1zdHlsZXM6IChcbiAgICAgICAgc21hbGw6IChcbiAgICAgICAgICAgICAgICAnaDEnOiAoJ2ZvbnQtc2l6ZSc6IDI0KSxcbiAgICAgICAgICAgICAgICAnaDInOiAoJ2ZvbnQtc2l6ZSc6IDIwKSxcbiAgICAgICAgICAgICAgICAnaDMnOiAoJ2ZvbnQtc2l6ZSc6IDE5KSxcbiAgICAgICAgICAgICAgICAnaDQnOiAoJ2ZvbnQtc2l6ZSc6IDE4KSxcbiAgICAgICAgICAgICAgICAnaDUnOiAoJ2ZvbnQtc2l6ZSc6IDE3KSxcbiAgICAgICAgICAgICAgICAnaDYnOiAoJ2ZvbnQtc2l6ZSc6IDE2KSxcbiAgICAgICAgKSxcbiAgICAgICAgbWVkaXVtOiAoXG4gICAgICAgICAgICAgICAgJ2gxJzogKCdmb250LXNpemUnOiA0OCksXG4gICAgICAgICAgICAgICAgJ2gyJzogKCdmb250LXNpemUnOiA0MCksXG4gICAgICAgICAgICAgICAgJ2gzJzogKCdmb250LXNpemUnOiAzMSksXG4gICAgICAgICAgICAgICAgJ2g0JzogKCdmb250LXNpemUnOiAyNSksXG4gICAgICAgICAgICAgICAgJ2g1JzogKCdmb250LXNpemUnOiAyMCksXG4gICAgICAgICAgICAgICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICAgICAgICksXG4pO1xuJGhlYWRlci10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuJHNtYWxsLWZvbnQtc2l6ZTogODAlO1xuJGhlYWRlci1zbWFsbC1mb250LWNvbG9yOiAkbWVkaXVtLWdyYXk7XG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNjtcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRwYXJhZ3JhcGgtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiRjb2RlLWNvbG9yOiAkYmxhY2s7XG4kY29kZS1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiRjb2RlLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjb2RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjb2RlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNSAxKTtcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGFuY2hvci1jb2xvci1ob3Zlcjogc2NhbGUtY29sb3IoJGFuY2hvci1jb2xvciwgJGxpZ2h0bmVzczogLTE0JSk7XG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyOiBub25lO1xuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoO1xuJGhyLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRoci1tYXJnaW46IHJlbS1jYWxjKDIwKSBhdXRvO1xuJGxpc3QtbGluZWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0O1xuJGxpc3QtbWFyZ2luLWJvdHRvbTogJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tO1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiRsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuJGxpc3Qtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRkZWZubGlzdC10ZXJtLXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiRibG9ja3F1b3RlLWNvbG9yOiAkZGFyay1ncmF5O1xuJGJsb2NrcXVvdGUtcGFkZGluZzogcmVtLWNhbGMoOSAyMCAwIDE5KTtcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGNpdGUtY29sb3I6ICRkYXJrLWdyYXk7XG4kY2l0ZS1wc2V1ZG8tY29udGVudDogJ1xcMjAxNCBcXDAwMjAnO1xuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrO1xuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRrZXlzdHJva2UtcGFkZGluZzogcmVtLWNhbGMoMiA0IDApO1xuJGtleXN0cm9rZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGFiYnItdW5kZXJsaW5lOiAxcHggZG90dGVkICRibGFjaztcblxuLy8gNS4gVHlwb2dyYXBoeSBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjU7XG4kbGVhZC1saW5laGVpZ2h0OiAxLjY7XG4kc3ViaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXk7XG4kc3ViaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kc3ViaGVhZGVyLW1hcmdpbi10b3A6IDAuMnJlbTtcbiRzdWJoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJHN0YXQtZm9udC1zaXplOiAyLjVyZW07XG5cbi8vIDYuIEFiaWRlXG4vLyAtLS0tLS0tLVxuXG4kYWJpZGUtaW5wdXRzOiB0cnVlO1xuJGFiaWRlLWxhYmVsczogdHJ1ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCk7XG4kZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJGlucHV0LWVycm9yLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuXG4vLyA3LiBBY2NvcmRpb25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kYWNjb3JkaW9uLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlO1xuJGFjY29yZGlvbi10aXRsZS1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXk7XG4kYWNjb3JkaW9uLWl0ZW0tcGFkZGluZzogMS4yNXJlbSAxcmVtO1xuJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tY29udGVudC1ib3JkZXI6IDFweCBzb2xpZCAkbGlnaHQtZ3JheTtcbiRhY2NvcmRpb24tY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA4LiBBY2NvcmRpb24gTWVudVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG4kYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luOiAkZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiRhY2NvcmRpb25tZW51LWFycm93czogdHJ1ZTtcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhY2NvcmRpb25tZW51LWl0ZW0tYmFja2dyb3VuZDogbnVsbDtcbiRhY2NvcmRpb25tZW51LWJvcmRlcjogbnVsbDtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLWJhY2tncm91bmQ6IG51bGw7XG4kYWNjb3JkaW9uLXN1Ym1lbnUtdG9nZ2xlLWJvcmRlcjogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtd2lkdGg6IDQwcHg7XG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyA5LiBCYWRnZVxuLy8gLS0tLS0tLS1cblxuJGJhZGdlLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJhZGdlLWNvbG9yOiAkd2hpdGU7XG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2s7XG4kYmFkZ2UtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRiYWRnZS1wYWRkaW5nOiAwLjNlbTtcbiRiYWRnZS1taW53aWR0aDogMi4xZW07XG4kYmFkZ2UtZm9udC1zaXplOiAwLjZyZW07XG5cbi8vIDEwLiBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiRicmVhZGNydW1icy1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwO1xuJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplOiByZW0tY2FsYygxMSk7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50OiAkYmxhY2s7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtO1xuJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJztcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLXJ0bDogJ1xcXFwnO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWNvbG9yOiAkbWVkaXVtLWdyYXk7XG5cbi8vIDExLiBCdXR0b25cbi8vIC0tLS0tLS0tLS1cblxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdDtcbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbTtcbiRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRidXR0b24tZmlsbDogc29saWQ7XG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpO1xuJGJ1dHRvbi1jb2xvcjogJHdoaXRlO1xuJGJ1dHRvbi1jb2xvci1hbHQ6ICRibGFjaztcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRidXR0b24taG9sbG93LWJvcmRlci13aWR0aDogMXB4O1xuJGJ1dHRvbi1zaXplczogKFxuICAgICAgICB0aW55OiAwLjZyZW0sXG4gICAgICAgIHNtYWxsOiAwLjc1cmVtLFxuICAgICAgICBkZWZhdWx0OiAwLjlyZW0sXG4gICAgICAgIGxhcmdlOiAxLjI1cmVtLFxuKTtcbiRidXR0b24tcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlci1saWdodG5lc3M6IC0yMCU7XG4kYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3M6IC01MCU7XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0O1xuJGJ1dHRvbi1yZXNwb25zaXZlLWV4cGFuZGVkOiBmYWxzZTtcblxuLy8gMTIuIEJ1dHRvbiBHcm91cFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kYnV0dG9uZ3JvdXAtbWFyZ2luOiAxcmVtO1xuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweDtcbiRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcjogJy5idXR0b24nO1xuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDY7XG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWU7XG5cbi8vIDEzLiBDYWxsb3V0XG4vLyAtLS0tLS0tLS0tLVxuXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JTtcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KTtcbiRjYWxsb3V0LW1hcmdpbjogMCAwIDFyZW0gMDtcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW07XG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhbGxvdXQtZm9udC1jb2xvci1hbHQ6ICRib2R5LWJhY2tncm91bmQ7XG4kY2FsbG91dC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGNhbGxvdXQtbGluay10aW50OiAzMCU7XG5cbi8vIDE0LiBDYXJkXG4vLyAtLS0tLS0tLVxuXG4kY2FyZC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FyZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5O1xuJGNhcmQtc2hhZG93OiBub25lO1xuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmc7XG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcblxuLy8gMTUuIENsb3NlIEJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kY2xvc2VidXR0b24tcG9zaXRpb246IHJpZ2h0IHRvcDtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbDogKFxuICAgICAgICBzbWFsbDogMC42NnJlbSxcbiAgICAgICAgbWVkaXVtOiAxcmVtLFxuKTtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtdmVydGljYWw6IChcbiAgICAgICAgc21hbGw6IDAuMzNlbSxcbiAgICAgICAgbWVkaXVtOiAwLjVyZW0sXG4pO1xuJGNsb3NlYnV0dG9uLXNpemU6IChcbiAgICAgICAgc21hbGw6IDEuNWVtLFxuICAgICAgICBtZWRpdW06IDJlbSxcbik7XG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMTtcbiRjbG9zZWJ1dHRvbi1jb2xvcjogJGRhcmstZ3JheTtcbiRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjogJGJsYWNrO1xuXG4vLyAxNi4gRHJpbGxkb3duXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhcjtcbiRkcmlsbGRvd24tYXJyb3dzOiB0cnVlO1xuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcmlsbGRvd24tbmVzdGVkLW1hcmdpbjogMDtcbiRkcmlsbGRvd24tYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyaWxsZG93bi1zdWJtZW51LXBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyAxNy4gRHJvcGRvd25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kZHJvcGRvd24tcGFkZGluZzogMXJlbTtcbiRkcm9wZG93bi1iYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kO1xuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1mb250LXNpemU6IDFyZW07XG4kZHJvcGRvd24td2lkdGg6IDMwMHB4O1xuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZHJvcGRvd24tc2l6ZXM6IChcbiAgICAgICAgdGlueTogMTAwcHgsXG4gICAgICAgIHNtYWxsOiAyMDBweCxcbiAgICAgICAgbGFyZ2U6IDQwMHB4LFxuKTtcblxuLy8gMTguIERyb3Bkb3duIE1lbnVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlO1xuJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvcjogJGFuY2hvci1jb2xvcjtcbiRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nOiAxLjVyZW07XG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHg7XG4kZHJvcGRvd25tZW51LWJhY2tncm91bmQ6IG51bGw7XG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyb3Bkb3dubWVudS1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcm9wZG93bm1lbnUtbmVzdGVkLW1hcmdpbjogMDtcbiRkcm9wZG93bm1lbnUtc3VibWVudS1wYWRkaW5nOiAkZHJvcGRvd25tZW51LXBhZGRpbmc7XG4kZHJvcGRvd25tZW51LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1tZW51LWl0ZW0tY29sb3ItYWN0aXZlOiBnZXQtY29sb3IocHJpbWFyeSk7XG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudDtcblxuLy8gMTkuIEZsZXhib3ggVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2O1xuJGZsZXhib3gtcmVzcG9uc2l2ZS1icmVha3BvaW50czogdHJ1ZTtcblxuLy8gMjAuIEZvcm1zXG4vLyAtLS0tLS0tLS1cblxuJGZpZWxkc2V0LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRmaWVsZHNldC1wYWRkaW5nOiByZW0tY2FsYygyMCk7XG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKTtcbiRsZWdlbmQtcGFkZGluZzogcmVtLWNhbGMoMCAzKTtcbiRmb3JtLXNwYWNpbmc6IHJlbS1jYWxjKDE2KTtcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrO1xuJGhlbHB0ZXh0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGhlbHB0ZXh0LWZvbnQtc3R5bGU6IGl0YWxpYztcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjaztcbiRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1wcmVmaXgtcGFkZGluZzogMXJlbTtcbiRmb3JtLWxhYmVsLWNvbG9yOiAkYmxhY2s7XG4kZm9ybS1sYWJlbC1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kZm9ybS1sYWJlbC1saW5lLWhlaWdodDogMS44O1xuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5O1xuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGlucHV0LWNvbG9yOiAkYmxhY2s7XG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1mb250LWZhbWlseTogaW5oZXJpdDtcbiRpbnB1dC1mb250LXNpemU6IHJlbS1jYWxjKDE2KTtcbiRpbnB1dC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGlucHV0LWxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4kaW5wdXQtYmFja2dyb3VuZDogJHdoaXRlO1xuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMjtcbiRpbnB1dC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKCRibGFjaywgMC4xKTtcbiRpbnB1dC1zaGFkb3ctZm9jdXM6IDAgMCA1cHggJG1lZGl1bS1ncmF5O1xuJGlucHV0LWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG4kaW5wdXQtbnVtYmVyLXNwaW5uZXJzOiB0cnVlO1xuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZm9ybS1idXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjEuIExhYmVsXG4vLyAtLS0tLS0tLS1cblxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGxhYmVsLWNvbG9yOiAkd2hpdGU7XG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2s7XG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbTtcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbTtcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyMi4gTWVkaWEgT2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlO1xuXG4vLyAyMy4gTWVudVxuLy8gLS0tLS0tLS1cblxuJG1lbnUtbWFyZ2luOiAwO1xuJG1lbnUtbmVzdGVkLW1hcmdpbjogJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW47XG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW07XG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJG1lbnUtaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWU7XG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZTtcbiRtZW51LWljb25zLWJhY2stY29tcGF0OiB0cnVlO1xuXG4vLyAyNC4gTWV0ZXJcbi8vIC0tLS0tLS0tLVxuXG4kbWV0ZXItaGVpZ2h0OiAxcmVtO1xuJG1ldGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kbWV0ZXItYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5O1xuJG1ldGVyLWZpbGwtZ29vZDogJHN1Y2Nlc3MtY29sb3I7XG4kbWV0ZXItZmlsbC1tZWRpdW06ICR3YXJuaW5nLWNvbG9yO1xuJG1ldGVyLWZpbGwtYmFkOiAkYWxlcnQtY29sb3I7XG5cbi8vIDI1LiBPZmYtY2FudmFzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5O1xuJG9mZmNhbnZhcy1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoJGJsYWNrLCAwLjcpO1xuJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZTogMjBweDtcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LWNvbG9yOiByZ2JhKCRibGFjaywgMC4yNSk7XG4kb2ZmY2FudmFzLW92ZXJsYXktemluZGV4OiAxMTtcbiRvZmZjYW52YXMtcHVzaC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDogMTM7XG4kb2ZmY2FudmFzLXJldmVhbC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cztcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmc6IGVhc2U7XG4kb2ZmY2FudmFzLWZpeGVkLXJldmVhbDogdHJ1ZTtcbiRvZmZjYW52YXMtZXhpdC1iYWNrZ3JvdW5kOiByZ2JhKCR3aGl0ZSwgMC4yNSk7XG4kbWFpbmNvbnRlbnQtY2xhc3M6ICdvZmYtY2FudmFzLWNvbnRlbnQnO1xuXG4vLyAyNi4gT3JiaXRcbi8vIC0tLS0tLS0tLVxuXG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU6ICRkYXJrLWdyYXk7XG4kb3JiaXQtYnVsbGV0LWRpYW1ldGVyOiAxLjJyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbjogMC4xcmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW4tdG9wOiAwLjhyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbTtcbiRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTA7XG5cbi8vIDI3LiBQYWdpbmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kcGFnaW5hdGlvbi1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvcjogJGJsYWNrO1xuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKTtcbiRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZzogcmVtLWNhbGMoMSk7XG4kcGFnaW5hdGlvbi1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheTtcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1jdXJyZW50OiAkcHJpbWFyeS1jb2xvcjtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJHBhZ2luYXRpb24tZWxsaXBzaXMtY29sb3I6ICRibGFjaztcbiRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2U7XG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZTtcbiRwYWdpbmF0aW9uLWFycm93czogdHJ1ZTtcblxuLy8gMjguIFByb2dyZXNzIEJhclxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvZ3Jlc3MtaGVpZ2h0OiAxcmVtO1xuJHByb2dyZXNzLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRwcm9ncmVzcy1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm9ncmVzcy1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyOS4gUHJvdG90eXBlIEFycm93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtYXJyb3ctZGlyZWN0aW9uczogKFxuICAgICAgICBkb3duLFxuICAgICAgICB1cCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnRcbik7XG4kcHJvdG90eXBlLWFycm93LXNpemU6IDAuNDM3NXJlbTtcbiRwcm90b3R5cGUtYXJyb3ctY29sb3I6ICRibGFjaztcblxuLy8gMzAuIFByb3RvdHlwZSBCb3JkZXItQm94XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1ib3JkZXItYm94LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzEuIFByb3RvdHlwZSBCb3JkZXItTm9uZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlci1ub25lLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzIuIFByb3RvdHlwZSBCb3JkZXJlZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlcmVkLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtYm9yZGVyLXdpZHRoOiByZW0tY2FsYygxKTtcbiRwcm90b3R5cGUtYm9yZGVyLXR5cGU6IHNvbGlkO1xuJHByb3RvdHlwZS1ib3JkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcblxuLy8gMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kaXNwbGF5LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtZGlzcGxheTogKFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIGlubGluZS1ibG9jayxcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0YWJsZS1jZWxsXG4pO1xuXG4vLyAzNC4gUHJvdG90eXBlIEZvbnQtU3R5bGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1mb250LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtd2lkZS1sZXR0ZXItc3BhY2luZzogcmVtLWNhbGMoNCk7XG4kcHJvdG90eXBlLWZvbnQtbm9ybWFsOiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kcHJvdG90eXBlLWZvbnQtYm9sZDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcblxuLy8gMzUuIFByb3RvdHlwZSBMaXN0LVN0eWxlLVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtbGlzdC1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXN0eWxlLXR5cGUtdW5vcmRlcmVkOiAoXG4gICAgICAgIGRpc2MsXG4gICAgICAgIGNpcmNsZSxcbiAgICAgICAgc3F1YXJlXG4pO1xuJHByb3RvdHlwZS1zdHlsZS10eXBlLW9yZGVyZWQ6IChcbiAgICAgICAgZGVjaW1hbCxcbiAgICAgICAgbG93ZXItYWxwaGEsXG4gICAgICAgIGxvd2VyLWxhdGluLFxuICAgICAgICBsb3dlci1yb21hbixcbiAgICAgICAgdXBwZXItYWxwaGEsXG4gICAgICAgIHVwcGVyLWxhdGluLFxuICAgICAgICB1cHBlci1yb21hblxuKTtcblxuLy8gMzYuIFByb3RvdHlwZSBPdmVyZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLW92ZXJmbG93LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtb3ZlcmZsb3c6IChcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaGlkZGVuLFxuICAgICAgICBzY3JvbGxcbik7XG5cbi8vIDM3LiBQcm90b3R5cGUgUG9zaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1wb3NpdGlvbi1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXBvc2l0aW9uOiAoXG4gICAgICAgIHN0YXRpYyxcbiAgICAgICAgcmVsYXRpdmUsXG4gICAgICAgIGFic29sdXRlLFxuICAgICAgICBmaXhlZFxuKTtcbiRwcm90b3R5cGUtcG9zaXRpb24tei1pbmRleDogOTc1O1xuXG4vLyAzOC4gUHJvdG90eXBlIFJvdW5kZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXJvdW5kZWQtYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3JkZXItcmFkaXVzOiByZW0tY2FsYygzKTtcblxuLy8gMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtc2VwYXJhdG9yLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtc2VwYXJhdG9yLWFsaWduOiBjZW50ZXI7XG4kcHJvdG90eXBlLXNlcGFyYXRvci1oZWlnaHQ6IHJlbS1jYWxjKDIpO1xuJHByb3RvdHlwZS1zZXBhcmF0b3Itd2lkdGg6IDNyZW07XG4kcHJvdG90eXBlLXNlcGFyYXRvci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm90b3R5cGUtc2VwYXJhdG9yLW1hcmdpbi10b3A6ICRnbG9iYWwtbWFyZ2luO1xuXG4vLyA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaGFkb3ctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIC4xNiksXG4wIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpO1xuXG4vLyA0MS4gUHJvdG90eXBlIFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaXppbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zaXppbmc6IChcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuKTtcbiRwcm90b3R5cGUtc2l6ZXM6IChcbiAgICAgICAgMjU6IDI1JSxcbiAgICAgICAgNTA6IDUwJSxcbiAgICAgICAgNzU6IDc1JSxcbiAgICAgICAgMTAwOiAxMDAlXG4pO1xuXG4vLyA0Mi4gUHJvdG90eXBlIFNwYWNpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXNwYWNpbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zcGFjZXJzLWNvdW50OiAzO1xuXG4vLyA0My4gUHJvdG90eXBlIFRleHQtRGVjb3JhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kZWNvcmF0aW9uLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1kZWNvcmF0aW9uOiAoXG4gICAgICAgIG92ZXJsaW5lLFxuICAgICAgICB1bmRlcmxpbmUsXG4gICAgICAgIGxpbmUtdGhyb3VnaCxcbik7XG5cbi8vIDQ0LiBQcm90b3R5cGUgVGV4dC1UcmFuc2Zvcm1hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdHJhbnNmb3JtYXRpb24tYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS10ZXh0LXRyYW5zZm9ybWF0aW9uOiAoXG4gICAgICAgIGxvd2VyY2FzZSxcbiAgICAgICAgdXBwZXJjYXNlLFxuICAgICAgICBjYXBpdGFsaXplXG4pO1xuXG4vLyA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdXRpbGl0aWVzLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cbi8vIDQ2LiBSZXNwb25zaXZlIEVtYmVkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tOiByZW0tY2FsYygxNik7XG4kcmVzcG9uc2l2ZS1lbWJlZC1yYXRpb3M6IChcbiAgICAgICAgZGVmYXVsdDogNCBieSAzLFxuICAgICAgICB3aWRlc2NyZWVuOiAxNiBieSA5LFxuKTtcblxuLy8gNDcuIFJldmVhbFxuLy8gLS0tLS0tLS0tLVxuXG4kcmV2ZWFsLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRyZXZlYWwtd2lkdGg6IDYwMHB4O1xuJHJldmVhbC1tYXgtd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kcmV2ZWFsLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRyZXZlYWwtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJHJldmVhbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHJldmVhbC16aW5kZXg6IDEwMDU7XG4kcmV2ZWFsLW92ZXJsYXktYmFja2dyb3VuZDogcmdiYSgkYmxhY2ssIDAuNDUpO1xuXG4vLyA0OC4gU2xpZGVyXG4vLyAtLS0tLS0tLS0tXG5cbiRzbGlkZXItd2lkdGgtdmVydGljYWw6IDAuNXJlbTtcbiRzbGlkZXItdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4kc2xpZGVyLWhlaWdodDogMC41cmVtO1xuJHNsaWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRzbGlkZXItZmlsbC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kc2xpZGVyLWhhbmRsZS1oZWlnaHQ6IDEuNHJlbTtcbiRzbGlkZXItaGFuZGxlLXdpZHRoOiAxLjRyZW07XG4kc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRzbGlkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNDkuIFN3aXRjaFxuLy8gLS0tLS0tLS0tLVxuXG4kc3dpdGNoLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU6ICRwcmltYXJ5LWNvbG9yO1xuJHN3aXRjaC1oZWlnaHQ6IDJyZW07XG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW07XG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbTtcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW07XG4kc3dpdGNoLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kc3dpdGNoLW1hcmdpbjogJGdsb2JhbC1tYXJnaW47XG4kc3dpdGNoLXBhZGRsZS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc3dpdGNoLXBhZGRsZS1vZmZzZXQ6IDAuMjVyZW07XG4kc3dpdGNoLXBhZGRsZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0O1xuXG4vLyA1MC4gVGFibGVcbi8vIC0tLS0tLS0tLVxuXG4kdGFibGUtYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYmxlLWNvbG9yLXNjYWxlOiA1JTtcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1wYWRkaW5nOiByZW0tY2FsYyg4IDEwIDEwKTtcbiR0YWJsZS1ob3Zlci1zY2FsZTogMiU7XG4kdGFibGUtcm93LWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtcm93LXN0cmlwZS1ob3ZlcjogZGFya2VuKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUgKyAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWlzLXN0cmlwZWQ6IHRydWU7XG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1zdHJpcGU6IGV2ZW47XG4kdGFibGUtaGVhZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlIC8gMik7XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWZvb3QtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSk7XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWhlYWQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWJsZS1mb290LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kc2hvdy1oZWFkZXItZm9yLXN0YWNrZWQ6IGZhbHNlO1xuJHRhYmxlLXN0YWNrLWJyZWFrcG9pbnQ6IG1lZGl1bTtcblxuLy8gNTEuIFRhYnNcbi8vIC0tLS0tLS0tXG5cbiR0YWItbWFyZ2luOiAwO1xuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiR0YWItYmFja2dyb3VuZC1hY3RpdmU6ICRsaWdodC1ncmF5O1xuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJHRhYi1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZTtcbiR0YWItaXRlbS1wYWRkaW5nOiAxLjI1cmVtIDEuNXJlbTtcbiR0YWItY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbnRlbnQtYm9yZGVyOiAkbGlnaHQtZ3JheTtcbiR0YWItY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA1Mi4gVGh1bWJuYWlsXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiR0aHVtYm5haWwtYm9yZGVyOiA0cHggc29saWQgJHdoaXRlO1xuJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiR0aHVtYm5haWwtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgkYmxhY2ssIDAuMik7XG4kdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjogMCAwIDZweCAxcHggcmdiYSgkcHJpbWFyeS1jb2xvciwgMC41KTtcbiR0aHVtYm5haWwtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcyBlYXNlLW91dDtcbiR0aHVtYm5haWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTMuIFRpdGxlIEJhclxuLy8gLS0tLS0tLS0tLS0tLVxuXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrO1xuJHRpdGxlYmFyLWNvbG9yOiAkd2hpdGU7XG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtO1xuJHRpdGxlYmFyLXRleHQtZm9udC13ZWlnaHQ6IGJvbGQ7XG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlO1xuJHRpdGxlYmFyLWljb24tY29sb3ItaG92ZXI6ICRtZWRpdW0tZ3JheTtcbiR0aXRsZWJhci1pY29uLXNwYWNpbmc6IDAuMjVyZW07XG5cbi8vIDU0LiBUb29sdGlwXG4vLyAtLS0tLS0tLS0tLVxuXG4kaGFzLXRpcC1jdXJzb3I6IGhlbHA7XG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheTtcbiR0b29sdGlwLWJhY2tncm91bmQtY29sb3I6ICRibGFjaztcbiR0b29sdGlwLWNvbG9yOiAkd2hpdGU7XG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtO1xuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbTtcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbTtcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2O1xuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTUuIFRvcCBCYXJcbi8vIC0tLS0tLS0tLS0tXG5cbiR0b3BiYXItcGFkZGluZzogMC41cmVtO1xuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwO1xuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHg7XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtO1xuXG4vLyA1Ni4gWHkgR3JpZFxuLy8gLS0tLS0tLS0tLS1cblxuJHh5LWdyaWQ6IHRydWU7XG4kZ3JpZC1jb250YWluZXI6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW5zOiAxMjtcbiRncmlkLW1hcmdpbi1ndXR0ZXJzOiAoXG4gICAgICAgIHNtYWxsOiAyMHB4LFxuICAgICAgICBtZWRpdW06IDMwcHhcbik7XG4kZ3JpZC1wYWRkaW5nLWd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzO1xuJGdyaWQtY29udGFpbmVyLXBhZGRpbmc6ICRncmlkLXBhZGRpbmctZ3V0dGVycztcbiRncmlkLWNvbnRhaW5lci1tYXg6ICRnbG9iYWwtd2lkdGg7XG4keHktYmxvY2stZ3JpZC1tYXg6IDg7XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIENyZWF0ZXMgYW4gaW5uZXIgYm94LXNoYWRvdyBmb3Igb25seSBvbmUgc2lkZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2lkZSAtIFNpZGUgdGhlIHNoYWRvdyBpcyBzdXBwb3NlZCB0byBhcHBlYXIuIENhbiBiZSBgdG9wYCwgYGxlZnRgLCBgcmlnaHRgIG9yIGBib3R0b21gLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc2l6ZSAtIFdpZHRoIGZvciB0aGUgdGFyZ2V0IHNpZGUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIC0gQ29sb3Igb2YgdGhlIHNoYWRvdy5cbkBtaXhpbiBpbm5lci1zaWRlLXNoYWRvdyhcbiAgJHNpZGU6IGJvdHRvbSxcbiAgJHNpemU6IDIwcHgsXG4gICRjb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpXG4pIHtcblxuICAkaGVscGVyOiByb3VuZCgkc2l6ZSAqIDAuNjUpO1xuXG4gIEBpZiAoJHNpZGUgPT0gdG9wKSB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAkaGVscGVyICRzaXplICgtMSkqJGhlbHBlciAkY29sb3I7XG4gIH0gQGVsc2UgaWYgKCRzaWRlID09IGxlZnQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAkaGVscGVyIDAgJHNpemUgKC0xKSokaGVscGVyICRjb2xvcjtcbiAgfSBAZWxzZSBpZiAoJHNpZGUgPT0gcmlnaHQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAoLTEpKiRoZWxwZXIgMCAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9IEBlbHNlIGlmICgkc2lkZSA9PSBib3R0b20pIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwICgtMSkqJGhlbHBlciAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgQ1NTIHRyaWFuZ2xlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZHJvcGRvd24gYXJyb3dzLCBkcm9wZG93biBwaXBzLCBhbmQgbW9yZS4gVXNlIHRoaXMgbWl4aW4gaW5zaWRlIGEgYCY6OmJlZm9yZWAgb3IgYCY6OmFmdGVyYCBzZWxlY3RvciwgdG8gYXR0YWNoIHRoZSB0cmlhbmdsZSB0byBhbiBleGlzdGluZyBlbGVtZW50LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0cmlhbmdsZS1zaXplIC0gV2lkdGggb2YgdGhlIHRyaWFuZ2xlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICR0cmlhbmdsZS1jb2xvciAtIENvbG9yIG9mIHRoZSB0cmlhbmdsZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICR0cmlhbmdsZS1kaXJlY3Rpb24gLSBEaXJlY3Rpb24gdGhlIHRyaWFuZ2xlIHBvaW50cy4gQ2FuIGJlIGB1cGAsIGByaWdodGAsIGBkb3duYCwgb3IgYGxlZnRgLlxuQG1peGluIGNzcy10cmlhbmdsZShcbiAgJHRyaWFuZ2xlLXNpemUsXG4gICR0cmlhbmdsZS1jb2xvcixcbiAgJHRyaWFuZ2xlLWRpcmVjdGlvblxuKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuXG4gIGJvcmRlcjogaW5zZXQgJHRyaWFuZ2xlLXNpemU7XG5cbiAgY29udGVudDogJyc7XG5cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IGRvd24pIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJHRyaWFuZ2xlLWNvbG9yIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIEBpZiAoJHRyaWFuZ2xlLWRpcmVjdGlvbiA9PSB1cCkge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3I7XG4gIH1cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IHJpZ2h0KSB7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvcjtcbiAgfVxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gbGVmdCkge1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBtZW51IGljb24gd2l0aCBhIHNldCB3aWR0aCwgaGVpZ2h0LCBudW1iZXIgb2YgYmFycywgYW5kIGNvbG9ycy4gVGhlIG1peGluIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUgaWNvbiBhbmQgdGhlIHdlaWdodCBvZiB0aGUgYmFycyB0byBkZXRlcm1pbmUgc3BhY2luZy4gPGRpdiBjbGFzcz1cImRvY3MtZXhhbXBsZS1idXJnZXJcIj48L2Rpdj5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIGljb24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yLWhvdmVyIFskZGFyay1ncmF5XSAtIENvbG9yIHRvIHVzZSB3aGVuIHRoZSBpY29uIGlzIGhvdmVyZWQgb3Zlci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFsyMHB4XSAtIFdpZHRoIG9mIHRoZSBpY29uLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkaGVpZ2h0IFsxNnB4XSAtIEhlaWdodCBvZiB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdlaWdodCBbMnB4XSAtIEhlaWdodCBvZiBpbmRpdmlkdWFsIGJhcnMgaW4gdGhlIGljb24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXJzIFszXSAtIE51bWJlciBvZiBiYXJzIGluIHRoZSBpY29uLlxuQG1peGluIGhhbWJ1cmdlcihcbiAgJGNvbG9yOiAkYmxhY2ssXG4gICRjb2xvci1ob3ZlcjogJGRhcmstZ3JheSxcbiAgJHdpZHRoOiAyMHB4LFxuICAkaGVpZ2h0OiAxNnB4LFxuICAkd2VpZ2h0OiAycHgsXG4gICRiYXJzOiAzXG4pIHtcbiAgLy8gYm94LXNoYWRvdyBDU1Mgb3V0cHV0XG4gICRzaGFkb3c6ICgpO1xuICAkaG92ZXItc2hhZG93OiAoKTtcblxuICAvLyBTcGFjaW5nIGJldHdlZW4gYmFycyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGljb24gYW5kIHRoZSB3ZWlnaHQgb2YgZWFjaCBiYXJcbiAgJHNwYWNpbmc6ICgkaGVpZ2h0IC0gKCR3ZWlnaHQgKiAkYmFycykpIC8gKCRiYXJzIC0gMSk7XG5cbiAgQGlmIHVuaXQoJHNwYWNpbmcpID09ICdweCcge1xuICAgICRzcGFjaW5nOiBmbG9vcigkc3BhY2luZyk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAkb2Zmc2V0OiAoJHdlaWdodCArICRzcGFjaW5nKSAqICgkaSAtIDEpO1xuICAgICRzaGFkb3c6IGFwcGVuZCgkc2hhZG93LCAwICRvZmZzZXQgMCAkY29sb3IsIGNvbW1hKTtcbiAgfVxuXG4gIC8vIEljb24gY29udGFpbmVyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogJHdpZHRoO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBJY29uIGJhcnNcbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHdlaWdodDtcblxuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93O1xuXG4gICAgY29udGVudDogJyc7XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZVxuICBAaWYgJGNvbG9yLWhvdmVyIHtcbiAgICAvLyBHZW5lcmF0ZSBDU1NcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgICAkaG92ZXItc2hhZG93OiBhcHBlbmQoJGhvdmVyLXNoYWRvdywgMCAkb2Zmc2V0IDAgJGNvbG9yLWhvdmVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhvdmVyO1xuICAgICAgYm94LXNoYWRvdzogJGhvdmVyLXNoYWRvdztcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgYSBkb3dud2FyZC1mYWNpbmcgdHJpYW5nbGUgYXMgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGFuIGVsZW1lbnQuIFRoZSBpbWFnZSBpcyBmb3JtYXR0ZWQgYXMgYW4gU1ZHLCBtYWtpbmcgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIGNvbG9yLiBCZWNhdXNlIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3Qgc3VwcG9ydCBlbmNvZGVkIFNWR3MgYXMgYmFja2dyb3VuZCBpbWFnZXMsIGEgUE5HIGZhbGxiYWNrIGlzIGFsc28gaW5jbHVkZWQuXG4vLy8gVGhlcmUgYXJlIHR3byBQTkcgZmFsbGJhY2tzOiBhIGJsYWNrIHRyaWFuZ2xlIGFuZCBhIHdoaXRlIHRyaWFuZ2xlLiBUaGUgb25lIHVzZWQgZGVwZW5kcyBvbiB0aGUgbGlnaHRuZXNzIG9mIHRoZSBpbnB1dCBjb2xvci5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIHRyaWFuZ2xlLlxuQG1peGluIGJhY2tncm91bmQtdHJpYW5nbGUoJGNvbG9yOiAkYmxhY2spIHtcbiAgJHJnYjogJ3JnYiUyOCN7cm91bmQocmVkKCRjb2xvcikpfSwgI3tyb3VuZChncmVlbigkY29sb3IpKX0sICN7cm91bmQoYmx1ZSgkY29sb3IpKX0lMjknO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSczMicgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDMyIDI0Jz48cG9seWdvbiBwb2ludHM9JzAsMCAzMiwwIDE2LDI0JyBzdHlsZT0nZmlsbDogI3skcmdifSc+PC9wb2x5Z29uPjwvc3ZnPlwiKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjBcXDApIHtcbiAgICBAaWYgbGlnaHRuZXNzKCRjb2xvcikgPCA2MCUge1xuICAgICAgLy8gV2hpdGUgdHJpYW5nbGVcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFZQ0FZQUFBQ2JVLzgwQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJcEpSRUZVZU5yRWtja05nREFNQkJmUmtFdDBPYlJCQmRzR1hVRGdtUWZLNFhoSDJtOGN6UUFBeTI3UjN0c3c0UWZlMng4dU9PNm9ZTGI2R2xPb3IzR0Yrc3dVUkFPbVVKK1J3dEVKczlXdlRHRVl4QlhxSTFNUUFaaENmVVFLUnpETVZqK1R3ckFJVjZqdlNVRWtZQXIxTFNrY3lUQmIvVitLWWZYN3hBZXVzcTNzTER0R0gza0VHQUNQV0lmbE5aZmhSUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBCbGFjayB0cmlhbmdsZVxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU1CSlJFRlVlTnJFbGxzT2hDQU1SVnN6QzlJbHpVN0tDbVZIVEpzb01XWU1VdHB5djlCZ2J1WFFCNVpTZGdCWVlZNHljZ0Jpdms4S1lGc1FNZk1pVFRCUDRvM25VekNLek9hYkxKYkx5Mi9nMzFldkdrQWdpblI0L1plZ0tINXFYM2JKQ3NjQTN0MHgza2dPNXRRRnloaEZmNTB4UnFGTGJ5TVVOSlF6Z3lqR1Mvd2dDcHZLcWtSQnB1V3JFNFY5ZCsxRTRkUFVYcUlnMTA3U1FPRS8yRFJReE13VER5Z0lJblZERVQ5VDNsQ29qLzZqL1ZDbUdqWk9sMmxLcFo4QUF3RFFQN3pJaW1ER0ZRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHRoZSBtaWNybyBjbGVhcmZpeCBoYWNrIHBvcHVsYXJpemVkIGJ5IE5pY29sYXMgR2FsbGFnaGVyLiBJbmNsdWRlIHRoaXMgbWl4aW4gb24gYSBjb250YWluZXIgaWYgaXRzIGNoaWxkcmVuIGFyZSBhbGwgZmxvYXRlZCwgdG8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcHJvcGVyIGhlaWdodC5cbi8vLyBUaGUgY2xlYXJmaXggaXMgYXVnbWVudGVkIHdpdGggc3BlY2lmaWMgc3R5bGVzIHRvIHByZXZlbnQgYm9yZGVycyBpbiBmbGV4Ym94IGVudmlyb25tZW50c1xuLy8vIEBsaW5rIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLyBNaWNybyBDbGVhcmZpeCBIYWNrXG4vLy8gQGxpbmsgaHR0cDovL2RhbmlzYWRlc2lnbmVyLmNvbS9ibG9nL2ZsZXhib3gtY2xlYXItZml4LXBzZXVkby1lbGVtZW50cy8gRmxleGJveCBmaXhcbkBtaXhpbiBjbGVhcmZpeCB7XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleC1iYXNpczogMDtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLy8gQWRkcyBDU1MgZm9yIGEgXCJxdWFudGl0eSBxdWVyeVwiIHNlbGVjdG9yIHRoYXQgYXV0b21hdGljYWxseSBzaXplcyBlbGVtZW50cyBiYXNlZCBvbiBob3cgbWFueSB0aGVyZSBhcmUgaW5zaWRlIGEgY29udGFpbmVyLlxuLy8vIEBsaW5rIGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3F1YW50aXR5LXF1ZXJpZXMtZm9yLWNzcyBRdWFudGl0eSBRdWVyaWVzIGZvciBDU1Ncbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWF4IC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGV0ZWN0LiBUaGUgaGlnaGVyIHRoaXMgbnVtYmVyIGlzLCB0aGUgbW9yZSBDU1MgdGhhdCdzIHJlcXVpcmVkIHRvIGNvdmVyIGVhY2ggbnVtYmVyIG9mIGl0ZW1zLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGVsZW0gW2xpXSAtIFRhZyB0byB1c2UgZm9yIHNpYmxpbmcgc2VsZWN0b3JzLlxuQG1peGluIGF1dG8td2lkdGgoJG1heCwgJGVsZW06IGxpKSB7XG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJG1heCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQsXG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQgfiAjeyRlbGVtfSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgxIC8gJGkpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gUmVtb3ZlcyB0aGUgZm9jdXMgcmluZyBhcm91bmQgYW4gZWxlbWVudCB3aGVuIGEgbW91c2UgaW5wdXQgaXMgZGV0ZWN0ZWQuXG5AbWl4aW4gZGlzYWJsZS1tb3VzZS1vdXRsaW5lIHtcbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddICYge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgdmlzdWFsbHkgaGlkZGVuLCBidXQgc3RpbGwgYWNjZXNzaWJsZSB0byBrZXlib2FyZHMgYW5kIGFzc2lzdGl2ZSBkZXZpY2VzLlxuLy8vIEBsaW5rIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHkgSGlkaW5nIENvbnRlbnQgZm9yIEFjY2Vzc2liaWxpdHlcbi8vLyBAbGluayBodHRwOi8vaHVnb2dpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZW5mb3JjZSAtIElmIGB0cnVlYCwgdXNlIGAhaW1wb3J0YW50YCBvbiBhcHBsaWVkIHByb3BlcnRpZXNcbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZShcbiAgJGVuZm9yY2U6IHRydWVcbikge1xuICAkaW1wb3J0YW50OiBpZigkZW5mb3JjZSwgJyFpbXBvcnRhbnQnLCBudWxsKTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGUgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBoZWlnaHQ6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBwYWRkaW5nOiAwICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiBoaWRkZW4gI3skaW1wb3J0YW50fTtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKSAjeyRpbXBvcnRhbnR9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwICN7JGltcG9ydGFudH07XG4gIGJvcmRlcjogMCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gUmV2ZXJzZXMgdGhlIENTUyBvdXRwdXQgY3JlYXRlZCBieSB0aGUgYGVsZW1lbnQtaW52aXNpYmxlKClgIG1peGluLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGVuZm9yY2UgLSBJZiBgdHJ1ZWAsIHVzZSBgIWltcG9ydGFudGAgb24gYXBwbGllZCBwcm9wZXJ0aWVzXG5AbWl4aW4gZWxlbWVudC1pbnZpc2libGUtb2ZmKFxuICAkZW5mb3JjZTogdHJ1ZVxuKSB7XG4gICRpbXBvcnRhbnQ6IGlmKCRlbmZvcmNlLCAnIWltcG9ydGFudCcsIG51bGwpO1xuXG4gIHBvc2l0aW9uOiBzdGF0aWMgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgaGVpZ2h0OiBhdXRvICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiB2aXNpYmxlICN7JGltcG9ydGFudH07XG4gIGNsaXA6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gVmVydGljYWxseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiB2ZXJ0aWNhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCBpbnNpZGUgb2YgaXRzIGZpcnN0IG5vbi1zdGF0aWMgcGFyZW50LFxuLy8vIEBsaW5rIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9jZW50ZXJpbmctd2l0aC1zYXNzLyBDZW50ZXJpbmcgV2l0aCBTYXNzXG5AbWl4aW4gaG9yaXpvbnRhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLy8gQWJzb2x1dGVseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLy8gSXRlcmF0ZXMgdGhyb3VnaCBicmVha3BvaW50cyBkZWZpbmVkIGluIGAkYnJlYWtwb2ludC1jbGFzc2VzYCBhbmQgcHJpbnRzIHRoZSBDU1MgaW5zaWRlIHRoZSBtaXhpbiBhdCBlYWNoIGJyZWFrcG9pbnQncyBtZWRpYSBxdWVyeS4gVXNlIHRoaXMgd2l0aCB0aGUgZ3JpZCwgb3IgYW55IG90aGVyIGNvbXBvbmVudCB0aGF0IGhhcyByZXNwb25zaXZlIGNsYXNzZXMuXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRzbWFsbCBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBza2lwIHRoZSBgc21hbGxgIGJyZWFrcG9pbnQuIFVzZSB0aGlzIHdpdGggY29tcG9uZW50cyB0aGF0IGRvbid0IHByZWZpeCBjbGFzc2VzIHdpdGggYHNtYWxsLWAsIG9ubHkgYG1lZGl1bS1gIGFuZCB1cC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRhdXRvLWluc2VydC1icmVha3BvaW50cyBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBpdGVyYXRlIG92ZXIgYnJlYWtwb2ludHMgd2l0aG91dCBkb2luZyB0aGUgbWVkaWEgcXVlcnkgaXRzZWxmLiBVc2VmdWwgZm9yIG1vcmUgY29tcGxleCBtZWRpYSBxdWVyeSBnZW5lcmF0aW9uIGFzIGluIHRoZSBtYXJnaW4gZ3JpZC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50KFxuICAkc21hbGw6IHRydWUsXG4gICRhdXRvLWluc2VydC1icmVha3BvaW50czogdHJ1ZVxuKSB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oYXV0bywgLXpmLWJvb2woJHNtYWxsKSwgLXpmLWJvb2woJGF1dG8taW5zZXJ0LWJyZWFrcG9pbnRzKSkge1xuICAgIEBjb250ZW50XG4gIH07XG59XG5cbi8vLyBJdGVyYXRlcyB3aXRoIGBAY29udGVudGAgdGhyb3VnaCB0aGUgZ2l2ZW4gbGlzdCBvZiBicmVha3BvaW50cyBgJGJyZWFrcG9pbnRzYC5cbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfExpc3R9ICRicmVha3BvaW50cyBbYXV0b10gLSBCcmVha3BvaW50cyB0byBpdGVyYXRlcyBvbi4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbnxOdWxsfSAkemVyby1icmVha3BvaW50IFtudWxsXSAtIFdoZXRoZXIgdGhlIHplcm8tYnJlYWtwb2ludCAob2Z0ZW4gYHNtYWxsYCkgbXVzdCBiZSBpbmNsdWRlZC4gSWYgYHRydWVgLCBpdCB3aWxsIGFsd2F5cyBiZSBhZGRlZCB0byB0aGUgbGlzdCBpZiBub3QgYWxyZWFkeSB0aGVyZS4gSWYgYGZhbHNlYCwgaXQgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZC4gRG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4vLy8gQHBhcmFtIHtCb29sZWFufEtleXdvcmR9ICRtZWRpYS1xdWVyaWVzIFt0cnVlXSAtIFdoZXRoZXIgbWVkaWEtcXVlcmllcyBtdXN0IGJlIGdlbmVyYXRlZC4gSWYgYGZvci1saXN0c2AsIG9ubHkgZ2VuZXJhdGUgbWVkaWEtcXVlcmllcyB3aGVuIGAkYnJlYWtwb2ludHNgIGlzIGEgbGlzdC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50LWluKFxuICAkYnJlYWtwb2ludHM6IGF1dG8sXG4gICR6ZXJvLWJyZWFrcG9pbnQ6IG51bGwsXG4gICRtZWRpYS1xdWVyaWVzOiB0cnVlXG4pIHtcbiAgJC1saXN0OiAoKTtcbiAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IHRydWU7XG5cbiAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYnJlYWtwb2ludChzKSB0byBpdGVyYXRlIG9uLlxuICBAaWYgJGJyZWFrcG9pbnRzID09IGF1dG8ge1xuICAgICQtbGlzdDogJGJyZWFrcG9pbnQtY2xhc3NlcztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ2xpc3QnIHtcbiAgICAkLWxpc3Q6ICRicmVha3BvaW50cztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ3N0cmluZycge1xuICAgICQtbGlzdDogKCRicmVha3BvaW50cyk7XG4gICAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IGZhbHNlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCIkYnJlYWtwb2ludHNcIiBpbiBcIi16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oKVwiLiBHb3QgXCIjeyRicmVha3BvaW50c31cIiAoI3t0eXBlLW9mKCRicmVha3BvaW50cyl9KS4gRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUsIGEgbGlzdCBvZiBicmVha3BvaW50cyBvciBcImF1dG9cIic7XG4gIH1cblxuICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSB6ZXJvIGJyZWFrcG9pbnQgYWNjb3JkaW5nIHRvIGAkemVyby1icmVha3BvaW50YFxuICBAaWYgJHplcm8tYnJlYWtwb2ludCA9PSB0cnVlIHtcbiAgICAkLWxpc3Q6IGpvaW4oKCQtemYtemVyby1icmVha3BvaW50KSwgc2wtcmVtb3ZlKCQtbGlzdCwgJC16Zi16ZXJvLWJyZWFrcG9pbnQpKTtcbiAgfVxuICBAZWxzZSBpZiAkemVyby1icmVha3BvaW50ID09IGZhbHNlIHtcbiAgICAkLWxpc3Q6IHNsLXJlbW92ZSgkLWxpc3QsICQtemYtemVyby1icmVha3BvaW50KTtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb24gYnJlYWtwb2ludChzKVxuICBAZWFjaCAkYnAgaW4gJC1saXN0IHtcbiAgICAkb2xkLXpmLXNpemU6IG51bGw7XG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6ICRicCAhZ2xvYmFsO1xuXG4gICAgQGlmICgkbWVkaWEtcXVlcmllcyA9PSB0cnVlXG4gICAgICBvciAoJG1lZGlhLXF1ZXJpZXMgPT0gJ2Zvci1saXN0cycgYW5kICQtYnJlYWtwb2ludHMtaXMtYS1saXN0KSkge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnApIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgICQtemYtc2l6ZTogJG9sZC16Zi1zaXplICFnbG9iYWw7XG4gIH1cbn1cblxuLy8vIEdlbmVyYXRlIHRoZSBgQGNvbnRlbnRgIHBhc3NlZCB0byB0aGUgbWl4aW4gd2l0aCBhIHZhbHVlIGAkLXpmLWJwLXZhbHVlYCByZWxhdGVkIHRvIGEgYnJlYWtwb2ludCwgZGVwZW5kaW5nIG9uIHRoZSBgJG5hbWVgIHBhcmFtZXRlcjpcbi8vLyAtIEZvciBhIHNpbmdsZSB2YWx1ZSwgYCQtemYtYnAtdmFsdWVgIGlzIHRoaXMgdmFsdWUuXG4vLy8gLSBGb3IgYSBicmVha3BvaW50IG5hbWUsIGAkLXpmLWJwLXZhbHVlYCBpcyB0aGUgY29ycmVzcG9uZGluZyBicmVha3BvaW50IHZhbHVlIGluIGAkbWFwYC5cbi8vLyAtIEZvciBcImF1dG9cIiwgYCQtemYtYnAtdmFsdWVgIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUgaW4gYCRtYXBgIGFuZCBpcyBwYXNzZWQgdG8gYEBjb250ZW50YCwgd2hpY2ggaXMgbWFkZSByZXNwb25zaXZlIGZvciBlYWNoIGJyZWFrcG9pbnQgb2YgYCRtYXBgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfEFycmF5fEtleXdvcmR9ICRuYW1lIFthdXRvXSAtIFNpbmdsZSB2YWx1ZSwgYnJlYWtwb2ludCBuYW1lLCBvciBsaXN0IG9mIGJyZWFrcG9pbnQgbmFtZXMgdG8gdXNlLiBcImF1dG9cIiBieSBkZWZhdWx0LlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIE1hcCBvZiBicmVha3BvaW50cyBhbmQgdmFsdWVzIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2UuXG5AbWl4aW4gLXpmLWJyZWFrcG9pbnQtdmFsdWUoXG4gICRuYW1lOiBhdXRvLFxuICAkbWFwOiBudWxsXG4pIHtcbiAgQGlmICRuYW1lID09IGF1dG8gYW5kIHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcge1xuICAgIC8vIFwiYXV0b1wiXG4gICAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkaykge1xuICAgICAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZSgkdiwgJG1hcCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBicmVha3BvaW50IG5hbWVcbiAgICBAaWYgdHlwZS1vZigkbmFtZSkgPT0gJ3N0cmluZycge1xuICAgICAgJGJwLXZhbHVlOiAtemYtZ2V0LWJwLXZhbCgkbWFwLCAkbmFtZSk7XG4gICAgICBAaWYgJGJwLXZhbHVlICE9IG51bGwge1xuICAgICAgICAkbmFtZTogJGJwLXZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVcbiAgICAkLXpmLWJwLXZhbHVlOiAkbmFtZSAhZ2xvYmFsO1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEZvbnQgY29sb3Igb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBvZiBwbGFjZWhvbGRlciB0ZXh0IHdpdGhpbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGZhbWlseSBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBGb250XG4kaW5wdXQtZm9udC1mYW1pbHk6IGluaGVyaXQgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaW5wdXQtZm9udC1zaXplOiByZW0tY2FsYygxNikgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1saW5lLWhlaWdodDogJGdsb2JhbC1saW5laGVpZ2h0ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZm9jdXNlZCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBmb2N1c2VkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMiAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgaW5zaWRlIHRleHQgaW5wdXRzIHdoZW4gbm90IGZvY3VzZWQuXG4vLy8gQHR5cGUgU2hhZG93XG4kaW5wdXQtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIDAuMSkgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IG91dHNpZGUgdGV4dCBpbnB1dHMgd2hlbiBmb2N1c2VkLlxuLy8vIEB0eXBlIFNoYWRvd1xuJGlucHV0LXNoYWRvdy1mb2N1czogMCAwIDVweCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgdG8gdXNlIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGRpc2FibGVkIHRleHQgaW5wdXQuXG4vLy8gQHR5cGUgQ3Vyc29yXG4kaW5wdXQtY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuLy8vIFByb3BlcnRpZXMgdG8gdHJhbnNpdGlvbiBvbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVzIHRoZSB1cC9kb3duIGJ1dHRvbnMgdGhhdCBDaHJvbWUgYW5kIEZpcmVmb3ggYWRkIHRvIGA8aW5wdXQgdHlwZT0nbnVtYmVyJz5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRpbnB1dC1udW1iZXItc3Bpbm5lcnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBSYWRpdXMgZm9yIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBmb3JtIGJ1dHRvbnMsIGRlZmF1bHRlZCB0byBnbG9iYWwtcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGZvcm0tYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWVsZW1lbnQge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmc7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGlucHV0LXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3c7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgfVxuXG4gIC8vIEZvY3VzIHN0YXRlXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyLWZvY3VzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kLWZvY3VzO1xuICAgIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3ctZm9jdXM7XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS10ZXh0IHtcbiAgLy8gVGV4dCBpbnB1dHNcbiAgI3t0ZXh0LWlucHV0cygpfSxcbiAgdGV4dGFyZWEge1xuICAgIEBpbmNsdWRlIGZvcm0tZWxlbWVudDtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLy8gVGV4dCBhcmVhc1xuICB0ZXh0YXJlYSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgJltyb3dzXSB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgaW5wdXQsXG4gIHRleHRhcmVhIHtcbiAgICAvLyBEaXNhYmxlZC9yZWFkb25seSBzdGF0ZVxuICAgICY6ZGlzYWJsZWQsXG4gICAgJltyZWFkb25seV0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgICBjdXJzb3I6ICRpbnB1dC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgc3R5bGVzIG9uIGJ1dHRvbi1saWtlIGlucHV0c1xuICBbdHlwZT0nc3VibWl0J10sXG4gIFt0eXBlPSdidXR0b24nXSB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1idXR0b24tcmFkaXVzO1xuICB9XG5cbiAgLy8gUmVzZXQgTm9ybWFsaXplIHNldHRpbmcgY29udGVudC1ib3ggdG8gc2VhcmNoIGVsZW1lbnRzXG4gIGlucHV0W3R5cGU9J3NlYXJjaCddIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIC8vIE51bWJlciBpbnB1dCBzdHlsZXNcbiAgW3R5cGU9J251bWJlciddIHtcbiAgICBAaWYgbm90ICRpbnB1dC1udW1iZXItc3Bpbm5lcnMge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG5cbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXZlbmRvci1wcmVmaXhlc1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXIgdGV4dFxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gUmVtb3ZlcyB0aGUgdW5pdCAoZS5nLiBweCwgZW0sIHJlbSkgZnJvbSBhIHZhbHVlLCByZXR1cm5pbmcgdGhlIG51bWJlciBvbmx5LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRudW0gLSBOdW1iZXIgdG8gc3RyaXAgdW5pdCBmcm9tLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIHNhbWUgbnVtYmVyLCBzYW5zIHVuaXQuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtKSB7XG4gIEByZXR1cm4gJG51bSAvICgkbnVtICogMCArIDEpO1xufVxuXG4vLy8gQ29udmVydHMgb25lIG9yIG1vcmUgcGl4ZWwgdmFsdWVzIGludG8gbWF0Y2hpbmcgcmVtIHZhbHVlcy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICR2YWx1ZXMgLSBPbmUgb3IgbW9yZSB2YWx1ZXMgdG8gY29udmVydC4gQmUgc3VyZSB0byBzZXBhcmF0ZSB0aGVtIHdpdGggc3BhY2VzIGFuZCBub3QgY29tbWFzLiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdyYXAgdGhlIGxpc3QgaW4gcGFyZW50aGVzZXMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIFtudWxsXSAtIFRoZSBiYXNlIHZhbHVlIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgcmVtYC4gSWYgeW91J3JlIHVzaW5nIEZvdW5kYXRpb24gb3V0IG9mIHRoZSBib3gsIHRoaXMgaXMgMTZweC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgYG51bGxgLCB0aGUgZnVuY3Rpb24gd2lsbCByZWZlcmVuY2UgdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUgYXMgdGhlIGJhc2UuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gQSBsaXN0IG9mIGNvbnZlcnRlZCB2YWx1ZXMuXG5AZnVuY3Rpb24gcmVtLWNhbGMoJHZhbHVlcywgJGJhc2U6IG51bGwpIHtcbiAgJHJlbS12YWx1ZXM6ICgpO1xuICAkY291bnQ6IGxlbmd0aCgkdmFsdWVzKTtcblxuICAvLyBJZiBubyBiYXNlIGlzIGRlZmluZWQsIGRlZmVyIHRvIHRoZSBnbG9iYWwgZm9udCBzaXplXG4gIEBpZiAkYmFzZSA9PSBudWxsIHtcbiAgICAkYmFzZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBJZiB0aGUgYmFzZSBmb250IHNpemUgaXMgYSAlLCB0aGVuIG11bHRpcGx5IGl0IGJ5IDE2cHhcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIDEwMCUgZm9udCBzaXplID0gMTZweCBpbiBtb3N0IGFsbCBicm93c2Vyc1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVtIGFzIGJhc2UgYWxsb3dzIGNvcnJlY3Qgc2NhbGluZ1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgJGNvdW50ID09IDEge1xuICAgIEByZXR1cm4gLXpmLXRvLXJlbSgkdmFsdWVzLCAkYmFzZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJlbS12YWx1ZXM6IGFwcGVuZCgkcmVtLXZhbHVlcywgLXpmLXRvLXJlbShudGgoJHZhbHVlcywgJGkpLCAkYmFzZSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVtLXZhbHVlcztcbn1cblxuLy8gQ29udmVydHMgYSB1bml0bGVzcywgcGl4ZWwsIG9yIHJlbSB2YWx1ZSB0byBlbSwgZm9yIHVzZSBpbiBicmVha3BvaW50cy5cbkBmdW5jdGlvbiAtemYtYnAtdG8tZW0oJHZhbHVlKSB7XG4gIC8vIFBpeGVsIGFuZCB1bml0bGVzcyB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byByZW1zXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyBvciB1bml0bGVzcygkdmFsdWUpIHtcbiAgICAkdmFsdWU6IHJlbS1jYWxjKCR2YWx1ZSwgJGJhc2U6IDE2cHgpO1xuICB9XG5cbiAgLy8gVGhlbiB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGVtc1xuICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFlbTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgdG8gbWF0Y2hpbmcgcmVtIHZhbHVlLiAqQW55KiB2YWx1ZSBwYXNzZWQsIHJlZ2FyZGxlc3Mgb2YgdW5pdCwgaXMgYXNzdW1lZCB0byBiZSBhIHBpeGVsIHZhbHVlLiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBwaXhlbCB2YWx1ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcmVtIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gUGl4ZWwgdmFsdWUgdG8gY29udmVydC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gQmFzZSBmb3IgcGl4ZWwgY29udmVyc2lvbi5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IEEgbnVtYmVyIGluIHJlbXMsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZCB0aGUgYmFzZSBwaXhlbCB2YWx1ZS4gcmVtIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggYXMgaXMuXG5AZnVuY3Rpb24gLXpmLXRvLXJlbSgkdmFsdWUsICRiYXNlOiBudWxsKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpICE9ICdudW1iZXInIHtcbiAgICBAd2FybiBpbnNwZWN0KCR2YWx1ZSkgKyAnIHdhcyBwYXNzZWQgdG8gcmVtLWNhbGMoKSwgd2hpY2ggaXMgbm90IGEgbnVtYmVyLic7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZW0gaW50byByZW0gaWYgc29tZW9uZSBoYW5kcyBvdmVyICdlbSdzXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAxcmVtO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHJlbSBpZiB1bml0cyBmb3IgJHZhbHVlIGlzIG5vdCByZW0gb3IgZW1cbiAgQGlmIHVuaXQoJHZhbHVlKSAhPSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKSAqIDFyZW07XG4gIH1cblxuICAvLyBUdXJuIDByZW0gaW50byAwXG4gIEBpZiAkdmFsdWUgPT0gMHJlbSB7XG4gICAgJHZhbHVlOiAwO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vLyBDb252ZXJ0cyBhIHBpeGVsLCBwZXJjZW50YWdlLCByZW0gb3IgZW0gdmFsdWUgdG8gYSB1bml0bGVzcyB2YWx1ZSBiYXNlZCBvbiBhIGdpdmVuIGZvbnQgc2l6ZS4gSWRlYWwgZm9yIHdvcmtpbmcgb3V0IHVuaXRsZXNzIGxpbmUgaGVpZ2h0cy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBjb252ZXJ0IHRvIGEgdW5pdGxlc3MgbGluZSBoZWlnaHRcbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgLSBUaGUgZm9udCBzaXplIHRvIHVzZSB0byB3b3JrIG91dCB0aGUgbGluZSBoZWlnaHQgLSBkZWZhdWx0cyB0byAkZ2xvYmFsLWZvbnQtc2l6ZVxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIFVuaXRsZXNzIG51bWJlclxuQGZ1bmN0aW9uIHVuaXRsZXNzLWNhbGMoJHZhbHVlLCAkYmFzZTogbnVsbCkge1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIEZpcnN0LCBsZXRzIGNvbnZlcnQgb3VyICRiYXNlIHRvIHBpeGVsc1xuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdyZW0nIHtcbiAgICAkYmFzZTogc3RyaXAtdW5pdCgkYmFzZSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBOb3cgbGV0J3MgY29udmVydCBvdXIgdmFsdWUgdG8gcGl4ZWxzIHRvb1xuICBAaWYgdW5pdCgkdmFsdWUpID09ICclJyB7XG4gICAgJHZhbHVlOiAoJHZhbHVlIC8gMTAwJSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3JlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICBAaWYgdW5pdCgkdmFsdWUpID09ICdlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICAvLyAncHgnXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyB7XG4gICAgQHJldHVybiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKTtcbiAgfVxuXG4gIC8vIGFzc3VtZSB0aGF0IGxpbmUtaGVpZ2h0cyBncmVhdGVyIHRoYW4gMTAgYXJlIG1lYW50IHRvIGJlIGFic29sdXRlIGluICdweCdcbiAgQGlmIHVuaXRsZXNzKCR2YWx1ZSkgYW5kICgkdmFsdWUgPiAxMCkge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gc3RyaXAtdW5pdCgkYmFzZSk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWNoZWNrYm94IHtcbiAgW3R5cGU9J2ZpbGUnXSxcbiAgW3R5cGU9J2NoZWNrYm94J10sXG4gIFt0eXBlPSdyYWRpbyddIHtcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICB9XG5cbiAgLy8gU3R5bGVzIGZvciBpbnB1dC9sYWJlbCBzaWJsaW5nc1xuICBbdHlwZT0nY2hlY2tib3gnXSArIGxhYmVsLFxuICBbdHlwZT0ncmFkaW8nXSArIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuXG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGZvcm0tc3BhY2luZyAqIDAuNTtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJGZvcm0tc3BhY2luZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgJltmb3JdIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsZXMgZm9yIGlucHV0cyBpbnNpZGUgbGFiZWxzXG4gIGxhYmVsID4gW3R5cGU9J2NoZWNrYm94J10sXG4gIGxhYmVsID4gW3R5cGU9J3JhZGlvJ10ge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkZm9ybS1zcGFjaW5nICogMC41O1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGZpbGUgaW5wdXQgd2lkdGhcbiAgW3R5cGU9J2ZpbGUnXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3IgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kZm9ybS1sYWJlbC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBmb3JtIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgZm9ybSBsYWJlbHMuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGl0cyBpbnB1dCBmaWVsZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjggIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcblxuICBmb250LXNpemU6ICRmb3JtLWxhYmVsLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tbGFiZWwtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuQG1peGluIGZvcm0tbGFiZWwtbWlkZGxlIHtcbiAgJGlucHV0LWJvcmRlci13aWR0aDogZ2V0LWJvcmRlci12YWx1ZSgkaW5wdXQtYm9yZGVyLCB3aWR0aCk7XG5cbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogKCRmb3JtLXNwYWNpbmcgLyAyICsgcmVtLWNhbGMoJGlucHV0LWJvcmRlci13aWR0aCkpIDA7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tbGFiZWwge1xuICBsYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICYubWlkZGxlIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWwtbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWxwIHRleHQuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGhlbHAgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWxwdGV4dC1mb250LXNpemU6IHJlbS1jYWxjKDEzKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzdHlsZSBmb3IgaGVscCB0ZXh0LlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoZWxwdGV4dC1mb250LXN0eWxlOiBpdGFsaWMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0taGVscHRleHQge1xuICAuaGVscC10ZXh0IHtcbiAgICAkbWFyZ2luLXRvcDogKCRmb3JtLXNwYWNpbmcgKiAwLjUpICogLTE7XG5cbiAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLXRvcDtcbiAgICBmb250LXNpemU6ICRoZWxwdGV4dC1mb250LXNpemU7XG4gICAgZm9udC1zdHlsZTogJGhlbHB0ZXh0LWZvbnQtc3R5bGU7XG4gICAgY29sb3I6ICRoZWxwdGV4dC1jb2xvcjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBDb2xvciBvZiBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcHJlZml4LWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIExlZnQvcmlnaHQgcGFkZGluZyBvZiBhbiBwcmUvcG9zdGZpeGVkIGlucHV0IGxhYmVsXG4kaW5wdXQtcHJlZml4LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tcHJlcG9zdGZpeCB7XG4gICRoZWlnaHQ6ICgkaW5wdXQtZm9udC1zaXplICogJGlucHV0LWxpbmUtaGVpZ2h0KSArIChnZXQtc2lkZSgkaW5wdXQtcGFkZGluZywgJ3RvcCcpICsgZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICdib3R0b20nKSkgLSByZW0tY2FsYygxKTtcblxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlmKCRnbG9iYWwtZmxleGJveCwgZmxleCwgdGFibGUpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmc7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cblxuICAgID4gOmZpcnN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAlaW5wdXQtZ3JvdXAtY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nOiAwICRpbnB1dC1wcmVmaXgtcGFkZGluZztcbiAgICBib3JkZXI6ICRpbnB1dC1wcmVmaXgtYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6ICRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDtcblxuICAgIGNvbG9yOiAkaW5wdXQtcHJlZml4LWNvbG9yO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICB3aWR0aDogMSU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtcHJlZml4LWJvcmRlcikge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtZ3JvdXAtY2hpbGQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIGEsXG4gICAgaW5wdXQsXG4gICAgYnV0dG9uLFxuICAgIGxhYmVsIHtcbiAgICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuXG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgICB9XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljaXR5IGJ1bXAgbmVlZGVkIHRvIHByZXZlbnQgb3ZlcnJpZGUgYnkgYnV0dG9uc1xuICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIC5pbnB1dC1ncm91cC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJvcmRlciBhcm91bmQgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBCb3JkZXJcbiRmaWVsZHNldC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtcGFkZGluZzogcmVtLWNhbGMoMjApICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gYXJvdW5kIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBiZXR3ZWVuIHRoZSBsZWdlbmQgdGV4dCBhbmQgZmllbGRzZXQgYm9yZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlZ2VuZC1wYWRkaW5nOiByZW0tY2FsYygwIDMpICFkZWZhdWx0O1xuXG5AbWl4aW4gZmllbGRzZXQge1xuICBtYXJnaW46ICRmaWVsZHNldC1tYXJnaW47XG4gIHBhZGRpbmc6ICRmaWVsZHNldC1wYWRkaW5nO1xuICBib3JkZXI6ICRmaWVsZHNldC1ib3JkZXI7XG5cbiAgbGVnZW5kIHtcbiAgICAvLyBDb3ZlcnMgdXAgdGhlIGZpZWxkc2V0J3MgYm9yZGVyIHRvIGNyZWF0ZSBhcnRpZmljaWFsIHBhZGRpbmdcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogcmVtLWNhbGMoLTMpO1xuICAgIHBhZGRpbmc6ICRsZWdlbmQtcGFkZGluZztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWZpZWxkc2V0IHtcbiAgZmllbGRzZXQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmcgKiAwLjU7XG4gIH1cblxuICAuZmllbGRzZXQge1xuICAgIEBpbmNsdWRlIGZpZWxkc2V0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiB0aGUgZHJvcGRvd24gdHJpYW5nbGUgaW5zaWRlIHNlbGVjdCBtZW51cy4gU2V0IHRvIGB0cmFuc3BhcmVudGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5LlxuLy8vIEB0eXBlIENvbG9yXG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG5AbWl4aW4gZm9ybS1zZWxlY3Qge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgaGVpZ2h0OiAkaGVpZ2h0O1xuICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRzZWxlY3QtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LWJhY2tncm91bmQ7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiAkc2VsZWN0LXRyaWFuZ2xlLWNvbG9yICE9IHRyYW5zcGFyZW50IHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXRyaWFuZ2xlKCRzZWxlY3QtdHJpYW5nbGUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkZ2xvYmFsLXJpZ2h0ICgtJGZvcm0tc3BhY2luZykgY2VudGVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA5cHggNnB4O1xuXG4gICAgcGFkZGluZy0jeyRnbG9iYWwtcmlnaHR9OiAoJGZvcm0tc3BhY2luZyAqIDEuNSk7XG4gIH1cblxuICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gIH1cblxuICAvLyBGb2N1cyBzdGF0ZVxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogJGlucHV0LWJvcmRlci1mb2N1cztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZC1mb2N1cztcbiAgICBib3gtc2hhZG93OiAkaW5wdXQtc2hhZG93LWZvY3VzO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgY3Vyc29yOiAkaW5wdXQtY3Vyc29yLWRpc2FibGVkO1xuICB9XG5cbiAgLy8gSGlkZSB0aGUgZHJvcGRvd24gYXJyb3cgc2hvd24gaW4gbmV3ZXIgSUUgdmVyc2lvbnNcbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZbbXVsdGlwbGVdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmOm5vdChbbXVsdGlwbGVdKSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1zZWxlY3Qge1xuICBzZWxlY3Qge1xuICAgIEBpbmNsdWRlIGZvcm0tc2VsZWN0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYWJpZGVcbi8vLy9cblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBpbnB1dHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWlucHV0czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBsYWJlbHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWxhYmVsczogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgdG8gdXNlIGZvciBpbnZhbGlkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYmFja2dyb3VuZC1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdG8gdXNlIGZvciBsYWJlbHMgb2YgaW52YWxpZCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRmb3JtLWxhYmVsLWNvbG9yLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRpbnB1dC1lcnJvci1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZXJyb3ItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTdHlsZXMgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlciBvZiBhbiBpbnB1dCBmaWVsZCB0byBoYXZlIGFuIGVycm9yIHN0YXRlLlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRhbGVydC1jb2xvcl0gLSBDb2xvciB0byB1c2UgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYWNrZ3JvdW5kLWxpZ2h0ZW4gWzEwJV0gLSBMaWdodG5lc3MgbGV2ZWwgb2YgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gZm9ybS1pbnB1dC1lcnJvcihcbiAgJGJhY2tncm91bmQ6ICRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQsXG4gICRiYWNrZ3JvdW5kLWxpZ2h0ZW46IDEwJVxuKSB7XG4gICY6bm90KDpmb2N1cykge1xuICAgIGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCRiYWNrZ3JvdW5kLCAkd2hpdGUsICRiYWNrZ3JvdW5kLWxpZ2h0ZW4pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBlcnJvciBzdHlsZXMgdG8gYSBmb3JtIGVsZW1lbnQsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNldHRpbmdzIGZpbGUuXG5AbWl4aW4gZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmcgKiAtMC41O1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nO1xuXG4gIGZvbnQtc2l6ZTogJGlucHV0LWVycm9yLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRpbnB1dC1lcnJvci1mb250LXdlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1lcnJvciB7XG4gIEBpZiAkYWJpZGUtaW5wdXRzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgaW52YWxpZCBpbnB1dHNcbiAgICAuaXMtaW52YWxpZC1pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkYWJpZGUtbGFiZWxzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgbGFiZWxzIG9mIGludmFsaWQgb3V0cHV0c1xuICAgIC5pcy1pbnZhbGlkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gZXJyb3IgZWxlbWVudFxuICAuZm9ybS1lcnJvciB7XG4gICAgQGluY2x1ZGUgZm9ybS1lcnJvcjtcblxuICAgICYuaXMtdmlzaWJsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0eXBvZ3JhcGh5LWJhc2Vcbi8vLy9cblxuLy8gQmFzZSBUeXBvZ3JhcGh5XG4vLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuLy8gVGhlc2UgYXJlIHN0eWxlcyBhcHBsaWVkIHRvIGJhc2ljIEhUTUwgdGFncywgaW5jbHVkaW5nOlxuLy8gICAtIFBhcmFncmFwaHMgPHA+XG4vLyAgIC0gQm9sZC9pdGFsaWNzIDxiPiA8c3Ryb25nPiA8aT4gPGVtPlxuLy8gICAtIFNtYWxsIHRleHQgPHNtYWxsPlxuLy8gICAtIEhlYWRpbmdzIDxoMT4tPGg2PlxuLy8gICAtIEFuY2hvcnMgPGE+XG4vLyAgIC0gRGl2aWRlcnMgPGhyPlxuLy8gICAtIExpc3RzIDx1bD4gPG9sPiA8ZGw+XG4vLyAgIC0gQmxvY2txdW90ZXMgPGJsb2NrcXVvdGU+XG4vLyAgIC0gQ29kZSBibG9ja3MgPGNvZGU+XG4vLyAgIC0gQWJicmV2aWF0aW9ucyA8YWJicj5cbi8vICAgLSBDaXRhdGlvbnMgPGNpdGU+XG4vLyAgIC0gS2V5c3Ryb2tlcyA8a2JkPlxuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGhlYWRlciBlbGVtZW50cy5cbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kaGVhZGVyLWZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0eWxlIChlLmcuIGl0YWxpY2l6ZWQpIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtc3R5bGU6IG5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc3RhY2sgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCB1c2UgbW9ub3NwYWNlZCB0eXBlLCBzdWNoIGFzIGNvZGUgc2FtcGxlc1xuLy8vIEB0eXBlIFN0cmluZyB8IExpc3RcbiRmb250LWZhbWlseS1tb25vc3BhY2U6IENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgQ291cmllciwgbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBDb2xvclxuJGhlYWRlci1jb2xvcjogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNCAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gU3R5bGVzIGZvciBoZWFkaW5ncyBhdCB2YXJpb3VzIHNjcmVlbiBzaXplcy4gRWFjaCBrZXkgaXMgYSBicmVha3BvaW50LCBhbmQgZWFjaCB2YWx1ZSBpcyBhIG1hcCBvZiBoZWFkaW5nIHN0eWxlcy5cbi8vLyBAdHlwZSBNYXBcbiRoZWFkZXItc3R5bGVzOiAoXG4gIHNtYWxsOiAoXG4gICAgJ2gxJzogKCdmb250LXNpemUnOiAyNCksXG4gICAgJ2gyJzogKCdmb250LXNpemUnOiAyMCksXG4gICAgJ2gzJzogKCdmb250LXNpemUnOiAxOSksXG4gICAgJ2g0JzogKCdmb250LXNpemUnOiAxOCksXG4gICAgJ2g1JzogKCdmb250LXNpemUnOiAxNyksXG4gICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogNDgpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogNDApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMzEpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMjUpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuKSAhZGVmYXVsdDtcblxuLy8gJGhlYWRlci1zdHlsZXMgbWFwIGlzIGJ1aWx0IGZyb20gJGhlYWRlci1zaXplcyBpbiBvcmRlciB0byBlbnN1cmUgZG93bndhcmQgY29tcGF0aWJpbGl0eVxuLy8gd2hlbiAkaGVhZGVyLXNpemVzIGlzIGRlcHJlY2lhdGVkLCAkaGVhZGVyLXN0eWxlcyBuZWVkcyB0byBnZXQgIWRlZmF1bHQgdmFsdWVzIGxpa2Ugc2V0dGluZ3Muc2Nzc1xuQGZ1bmN0aW9uIGJ1aWxkX2Zyb21faGVhZGVyLXNpemVzKCRoZWFkZXItc2l6ZXMpIHtcbiAgQHdhcm4gJ05vdGUsIHRoYXQgJGhlYWRlci1zaXplcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoICRoZWFkZXItc3R5bGVzLiAkaGVhZGVyLXNpemVzIHN0aWxsIHdvcmtzLCBidXQgaXQgaXMgZ29pbmcgdG8gYmUgZGVwcmVjaWF0ZWQuJztcbiAgJGhlYWRlci1zdHlsZXM6ICgpO1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zaXplcyB7XG4gICAgJGhlYWRlci1tYXA6ICgpO1xuICAgIEBlYWNoICRoZWFkZXIsICRmb250LXNpemUgaW4gJGhlYWRlcnMge1xuICAgICAgJGhlYWRlci1tYXA6IG1hcC1tZXJnZSgkaGVhZGVyLW1hcCwgKCRoZWFkZXI6ICgnZm9udC1zaXplJzogJGZvbnQtc2l6ZSkpKTtcbiAgICB9XG4gICAgJGhlYWRlci1zdHlsZXM6IG1hcC1tZXJnZSgkaGVhZGVyLXN0eWxlcywgKCRzaXplOiAkaGVhZGVyLW1hcCkpO1xuICB9XG4gIEByZXR1cm4gJGhlYWRlci1zdHlsZXM7XG59XG5cbi8vIElmIGl0IGV4aXN0cyAkaGVhZGVycy1zaXplcyBpcyB1c2VkIHRvIGJ1aWxkICRoZWFkZXItc3R5bGVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGhlYWRlci1zaXplcykge1xuICAkaGVhZGVyLXN0eWxlczogYnVpbGRfZnJvbV9oZWFkZXItc2l6ZXMoJGhlYWRlci1zaXplcyk7XG59XG5cbi8vLyBUZXh0IHJlbmRlcmluZyBtZXRob2Qgb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiBgPHNtYWxsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc21hbGwtZm9udC1zaXplOiA4MCUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBgPHNtYWxsPmAgZWxlbWVudHMgd2hlbiBwbGFjZWQgaW5zaWRlIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTGluZSBoZWlnaHQgb2YgdGV4dCBpbnNpZGUgYDxwPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNiAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFRleHQgcmVuZGVyaW5nIG1ldGhvZCBmb3IgcGFyYWdyYXBoIHRleHQuXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHkgIWRlZmF1bHQ7XG5cbi8vLyBVc2UgdGhlIGAuY29kZS1pbmxpbmVgIGNvbXBvbmVudCBhcyBkZWZhdWx0IGZvciBgPGNvZGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZW5hYmxlLWNvZGUtaW5saW5lOiB0cnVlO1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3MuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRhbmNob3ItY29sb3IsICRsaWdodG5lc3M6IC0xNCUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGRlY29yYXRpb24gZm9yIGxpbmtzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb246IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgZGVjb3JhdGlvbiBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3Zlcjogbm9uZSAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gd2lkdGggb2YgYSBkaXZpZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBMaXN0XG4kaHItYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kaHItbWFyZ2luOiByZW0tY2FsYygyMCkgYXV0byAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1saW5laGVpZ2h0OiAkcGFyYWdyYXBoLWxpbmVoZWlnaHQgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1tYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20gIWRlZmF1bHQ7XG5cbi8vLyBCdWxsZXQgdHlwZSB0byB1c2UgZm9yIHVub3JkZXJlZCBsaXN0cyAoZS5nLiwgYHNxdWFyZWAsIGBjaXJjbGVgLCBgZGlzY2ApLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYyAhZGVmYXVsdDtcblxuLy8vIFBvc2l0aW9uaW5nIGZvciBidWxsZXRzIG9uIHVub3JkZXJlZCBsaXN0IGl0ZW1zLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGUgIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0IChvciByaWdodCkgbWFyZ2luIGZvciBsaXN0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsaXN0LXNpZGUtbWFyZ2luOiAxLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gTGVmdCAob3IgcmlnaHQpIG1hcmdpbiBmb3IgYSBsaXN0IGluc2lkZSBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBgPGRsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBgPGR0PmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kZGVmbmxpc3QtdGVybS13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gYDxkdD5gIGFuZCBgPGRkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtdGVybS1tYXJnaW4tYm90dG9tOiAwLjNyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmxvY2txdW90ZS1jb2xvcjogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgaW5zaWRlIGEgYDxibG9ja3F1b3RlPmAgZWxlbWVudC5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kYmxvY2txdW90ZS1wYWRkaW5nOiByZW0tY2FsYyg5IDIwIDAgMTkpICFkZWZhdWx0O1xuXG4vLy8gU2lkZSBib3JkZXIgZm9yIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIFVzZSB0aGUgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQgYXMgZGVmYXVsdCBmb3IgYDxjaXRlPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGVuYWJsZS1jaXRlLWJsb2NrOiB0cnVlO1xuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGtleXN0cm9rZS1wYWRkaW5nOiByZW0tY2FsYygyIDQgMCkgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBgPGtiZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBib3JkZXIgc3R5bGUgZm9yIGA8YWJicj5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2sgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktYmFzZSB7XG4gIC8vIFR5cG9ncmFwaHkgcmVzZXRzXG4gIGRpdixcbiAgZGwsXG4gIGR0LFxuICBkZCxcbiAgdWwsXG4gIG9sLFxuICBsaSxcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcHJlLFxuICBmb3JtLFxuICBwLFxuICBibG9ja3F1b3RlLFxuICB0aCxcbiAgdGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGFyYWdyYXBoc1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICB0ZXh0LXJlbmRlcmluZzogJHBhcmFncmFwaC10ZXh0LXJlbmRlcmluZztcbiAgfVxuXG4gIC8vIEVtcGhhc2l6ZWQgdGV4dFxuICBlbSxcbiAgaSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG5cbiAgLy8gU3Ryb25nIHRleHRcbiAgc3Ryb25nLFxuICBiIHtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEhlYWRpbmdzXG4gIGgxLCAuaDEsXG4gIGgyLCAuaDIsXG4gIGgzLCAuaDMsXG4gIGg0LCAuaDQsXG4gIGg1LCAuaDUsXG4gIGg2LCAuaDYge1xuICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtc3R5bGU6ICRoZWFkZXItZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGhlYWRlci1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGhlYWRlci1jb2xvcjtcbiAgICB0ZXh0LXJlbmRlcmluZzogJGhlYWRlci10ZXh0LXJlbmRlcmluZztcblxuICAgIHNtYWxsIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgY29sb3I6ICRoZWFkZXItc21hbGwtZm9udC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkaW5nIHN0eWxlc1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zdHlsZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgIEBlYWNoICRoZWFkZXIsICRoZWFkZXItZGVmcyBpbiAkaGVhZGVycyB7XG4gICAgICAgICRmb250LXNpemUtdGVtcDogMXJlbTtcbiAgICAgICAgI3skaGVhZGVyfSwgLiN7JGhlYWRlcn0ge1xuXG4gICAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRoZWFkZXItZGVmcywgZm9udC1zaXplKSB7XG4gICAgICAgICAgICAkZm9udC1zaXplLXRlbXA6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBmb250LXNpemUpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBmcykge1xuICAgICAgICAgICAgJGZvbnQtc2l6ZS10ZW1wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgZnMpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgJHNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGxpbmUtaGVpZ2h0KSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdW5pdGxlc3MtY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbGluZS1oZWlnaHQpLCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBsaCkge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXRsZXNzLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIGxoKSwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB1bml0bGVzcy1jYWxjKCRoZWFkZXItbGluZWhlaWdodCwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tdG9wKSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLXRvcCkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtdCkge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG10KSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tYm90dG9tKSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLWJvdHRvbSkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYikge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG1iKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYygkaGVhZGVyLW1hcmdpbi1ib3R0b20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkYW5jaG9yLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGFuY2hvci10ZXh0LWRlY29yYXRpb247XG5cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRhbmNob3ItY29sb3ItaG92ZXI7XG4gICAgICBAaWYgJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXIgIT0gJGFuY2hvci10ZXh0LWRlY29yYXRpb24ge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246ICRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGltZyB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9yaXpvbnRhbCBydWxlXG4gIGhyIHtcbiAgICBjbGVhcjogYm90aDtcblxuICAgIG1heC13aWR0aDogJGhyLXdpZHRoO1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46ICRoci1tYXJnaW47XG5cbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkaHItYm9yZGVyO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICB9XG5cbiAgLy8gTGlzdHNcbiAgdWwsXG4gIG9sLFxuICBkbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxpc3QtbWFyZ2luLWJvdHRvbTtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiAkbGlzdC1zdHlsZS1wb3NpdGlvbjtcbiAgICBsaW5lLWhlaWdodDogJGxpc3QtbGluZWhlaWdodDtcbiAgfVxuXG4gIC8vIExpc3QgaXRlbXNcbiAgbGkge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBsaXN0c1xuICB1bCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gICAgbGlzdC1zdHlsZS10eXBlOiAkbGlzdC1zdHlsZS10eXBlO1xuICB9XG5cbiAgLy8gT3JkZXJlZCBsaXN0c1xuICBvbCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gIH1cblxuICAvLyBOZXN0ZWQgdW5vcmRlcmVkL29yZGVyZWQgbGlzdHNcbiAgdWwsIG9sIHtcbiAgICAmICYge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZpbml0aW9uIGxpc3RzXG4gIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTtcblxuICAgIGR0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b207XG4gICAgICBmb250LXdlaWdodDogJGRlZm5saXN0LXRlcm0td2VpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMCAwICRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTtcbiAgICBwYWRkaW5nOiAkYmxvY2txdW90ZS1wYWRkaW5nO1xuICAgIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06ICRibG9ja3F1b3RlLWJvcmRlcjtcblxuICAgICYsIHAge1xuICAgICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICAgIGNvbG9yOiAkYmxvY2txdW90ZS1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBJbmxpbmUgQ2l0YXRpb25zXG4gIEBpZiAoJGVuYWJsZS1jaXRlLWJsb2NrID09IHRydWUpIHtcbiAgICBjaXRlIHtcbiAgICAgIC8vIEV4dGVuZGluZyBhIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgIC8vIFRPRE86IEJyZWFrIHRoZSB0eXBvZ3JhcGh5LWJhc2UvdHlwb2dyYXBoeS1oZWxwZXJzIHNlcGFyYXRpb25cbiAgICAgIEBleHRlbmQgLmNpdGUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJicmV2aWF0aW9uc1xuICBhYmJyLCBhYmJyW3RpdGxlXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFiYnItdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBGaWd1cmVzXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLy8gQ29kZVxuICBAaWYgKCRlbmFibGUtY29kZS1pbmxpbmUgPT0gdHJ1ZSkge1xuICAgIGNvZGUge1xuICAgICAgQGV4dGVuZCAuY29kZS1pbmxpbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5c3Ryb2tlc1xuICBrYmQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAka2V5c3Ryb2tlLXBhZGRpbmc7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAka2V5c3Ryb2tlLWJhY2tncm91bmQ7XG5cbiAgICBmb250LWZhbWlseTogJGtleXN0cm9rZS1mb250O1xuICAgIGNvbG9yOiAka2V5c3Ryb2tlLWNvbG9yO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgka2V5c3Ryb2tlLXJhZGl1cykge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGtleXN0cm9rZS1yYWRpdXM7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdHlwb2dyYXBoeS1oZWxwZXJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgbGVhZCBwYXJhZ3JhcGhzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBsZWFkIHBhcmFncmFwaHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kbGVhZC1saW5laGVpZ2h0OiAxLjYgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1saW5laGVpZ2h0OiAxLjQgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgd2VpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJHN1YmhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0b3AgbWFyZ2luIGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1tYXJnaW4tdG9wOiAwLjJyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4gZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3ViaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIGZvciBzdGF0aXN0aWMgbnVtYmVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdGF0LWZvbnQtc2l6ZTogMi41cmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjaXRlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBgLmNpdGUtYmxvY2tgIGNvbXBvbmVudC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpICFkZWZhdWx0O1xuXG4vLy8gUHNldWRvIGNvbnRlbnQgZm9yIGAuY2l0ZS1ibG9ja2AgY29tcG9uZW50LlxuLy8vIEB0eXBlIFN0cmluZ1xuJGNpdGUtcHNldWRvLWNvbnRlbnQ6ICdcXDIwMTQgXFwwMDIwJyAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNvZGUtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGNvZGUtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2UgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGluIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kY29kZS1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBgLmNvZGUtaW5saW5lYCBhbmQgYC5jb2RlLWJsb2NrYCBjb21wb25lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBMaXN0XG4kY29kZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGFyb3VuZCB0ZXh0IG9mIHRoZSBgLmNvZGUtaW5saW5lYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtcGFkZGluZzogcmVtLWNhbGMoMiA1IDEpICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBhcm91bmQgdGV4dCBvZiB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtYmxvY2stcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIE1hcmdpbiB1bmRlciB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY29kZS1ibG9jay1tYXJnaW4tYm90dG9tOiAxLjVyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBjaXRlLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAkY2l0ZS1jb2xvcjtcbiAgZm9udC1zaXplOiAkY2l0ZS1mb250LXNpemU7XG5cbiAgJjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICRjaXRlLXBzZXVkby1jb250ZW50O1xuICB9XG59XG5cbi8vLyBBZGQgYmFzaWMgc3R5bGVzIGZvciBhIGNvZGUgaGVscGVyLlxuLy8vIFNlZSBgY29kZS1pbmxpbmVgIGFuZCBgY29kZS1ibG9ja2AgbWl4aW5zLlxuQG1peGluIGNvZGUtc3R5bGUge1xuICBib3JkZXI6ICRjb2RlLWJvcmRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmFja2dyb3VuZDtcblxuICBmb250LWZhbWlseTogJGNvZGUtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkY29kZS1mb250LXdlaWdodDtcbiAgY29sb3I6ICRjb2RlLWNvbG9yO1xufVxuXG4vLy8gTWFrZSBjb2RlIGhlbHBlciBmcm9tIHRoZSBgY29kZS1zdHlsZWAgbWl4aW4gaW5saW5lLlxuLy8vIFVzZWQgdG8gZ2VuZXJhdGUgYC5jb2RlLWlubGluZWBcbkBtaXhpbiBjb2RlLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG5cbiAgcGFkZGluZzogJGNvZGUtcGFkZGluZztcbn1cblxuLy8vIE1ha2UgY29kZSBoZWxwZXIgZnJvbSB0aGUgYGNvZGUtc3R5bGVgIG1peGluIGEgYmxvY2suXG4vLy8gVXNlZCB0byBnZW5lcmF0ZSBgLmNvZGUtYmxvY2tgXG5AbWl4aW4gY29kZS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcblxuICBwYWRkaW5nOiAkY29kZS1ibG9jay1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkY29kZS1ibG9jay1tYXJnaW4tYm90dG9tO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi10eXBvZ3JhcGh5LWhlbHBlcnMge1xuICAvLyBVc2UgdG8gY3JlYXRlIGEgc3ViaGVhZGluZyB1bmRlciBhIG1haW4gaGVhZGVyXG4gIC8vIE1ha2Ugc3VyZSB5b3UgcGFpciB0aGUgdHdvIGVsZW1lbnRzIGluIGEgPGhlYWRlcj4gZWxlbWVudCwgbGlrZSB0aGlzOlxuICAvLyA8aGVhZGVyPlxuICAvLyAgIDxoMT5IZWFkaW5nPC9oMT5cbiAgLy8gICA8aDI+U3ViaGVhZGluZzwvaDI+XG4gIC8vIDwvaGVhZGVyPlxuICAuc3ViaGVhZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAkc3ViaGVhZGVyLW1hcmdpbi10b3A7XG4gICAgbWFyZ2luLWJvdHRvbTogJHN1YmhlYWRlci1tYXJnaW4tYm90dG9tO1xuXG4gICAgZm9udC13ZWlnaHQ6ICRzdWJoZWFkZXItZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRzdWJoZWFkZXItbGluZWhlaWdodDtcbiAgICBjb2xvcjogJHN1YmhlYWRlci1jb2xvcjtcbiAgfVxuXG4gIC8vIFVzZSB0byBzdHlsZSBhbiBpbnRyb2R1Y3RvcnkgbGVhZCwgZGVjaywgYmx1cmIsIGV0Yy5cbiAgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogJGxlYWQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGVhZC1saW5laGVpZ2h0O1xuICB9XG5cbiAgLy8gVXNlIHRvIHN0eWxlIGEgbGFyZ2UgbnVtYmVyIHRvIGRpc3BsYXkgYSBzdGF0aXN0aWNcbiAgLnN0YXQge1xuICAgIGZvbnQtc2l6ZTogJHN0YXQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgcCArICYge1xuICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwsIG9sIHtcbiAgICAvLyBVc2UgdG8gcmVtb3ZlIG51bWJlcnMgZnJvbSBvcmRlcmVkIGxpc3QgJiBidWxsZXRzIGZyb20gdW5vcmRlcmVkIGxpc3RcbiAgICAmLm5vLWJ1bGxldCB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuY2l0ZS1ibG9jayB7XG4gICAgQGluY2x1ZGUgY2l0ZS1ibG9jaztcbiAgfVxuXG4gIC5jb2RlLWlubGluZSB7XG4gICAgQGluY2x1ZGUgY29kZS1zdHlsZTtcbiAgICBAaW5jbHVkZSBjb2RlLWlubGluZTtcbiAgfVxuXG4gIC5jb2RlLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBjb2RlLXN0eWxlO1xuICAgIEBpbmNsdWRlIGNvZGUtYmxvY2s7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tdGV4dC1hbGlnbm1lbnQge1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICBAZWFjaCAkYWxpZ24gaW4gKGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGp1c3RpZnkpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tdGV4dC0jeyRhbGlnbn0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJGFsaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgLnRleHQtI3skYWxpZ259IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246ICRhbGlnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIElmIGB0cnVlYCwgYWxsIGVsZW1lbnRzIHdpbGwgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcyB3aGVuIHByaW50ZWQsIHRvIHNhdmUgb24gaW5rLlxuLy8vIEB0eXBlIEJvb2xlYW5cbi8vLyBAZ3JvdXAgZ2xvYmFsXG4kcHJpbnQtdHJhbnNwYXJlbnQtYmFja2dyb3VuZHM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGRpc3BsYXlzIG5leHQgdG8gYWxsIGxpbmtzIHRoZWlyIFwiaHJlZlwiIHdoZW4gcHJpbnRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4vLy8gQGdyb3VwIGdsb2JhbFxuJHByaW50LWhyZWZzOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZS1hbGxcblxuQG1peGluIGZvdW5kYXRpb24tcHJpbnQtc3R5bGVzIHtcbiAgLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICAqIHtcbiAgICAgIC8vIEVuc3VyZSBhIFwiYmxhY2stb24td2hpdGVcIiBwcmludCBieSByZW1vdmluZyBiYWNrZ3JvdW5kcyxcbiAgICAgIC8vIHVzaW5nIGJsYWNrIHRleHQgZXZlcnl3aGVyZSBhbmQgZm9yY2luZyB0aGUgYnJvd3NlciB0byBlY29ub21pemUgaW5rLlxuICAgICAgQGlmICRwcmludC10cmFuc3BhcmVudC1iYWNrZ3JvdW5kcyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyAvLyBCbGFjayBwcmludHMgZmFzdGVyOiBoNWJwLmNvbS9zXG4gICAgICAgIGNvbG9yLWFkanVzdDogZWNvbm9teTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgcHJldmVudCBhbnkgZWNvbm9teSBieSB0aGUgYnJvd3Nlci5cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgY29sb3ItYWRqdXN0OiBleGFjdDtcbiAgICAgIH1cblxuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgLmhpZGUtZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgICB0YWJsZS5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgICB0aGVhZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gICAgdGJvZHkuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICAgIHRyLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgICB0ZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICAgIHRoLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG5cbiAgICAvLyBEaXNwbGF5IHRoZSBVUkwgb2YgYSBsaW5rIGFmdGVyIHRoZSB0ZXh0XG4gICAgYSxcbiAgICBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4gICAgQGlmICRwcmludC1ocmVmcyB7XG4gICAgICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogJyAoJyBhdHRyKGhyZWYpICcpJzsgfVxuICAgIH1cblxuICAgIC8vIERvbid0IGRpc3BsYXkgdGhlIFVSTCBmb3IgaW1hZ2VzIG9yIEphdmFTY3JpcHQvaW50ZXJuYWwgbGlua3NcbiAgICAuaXIgYTphZnRlcixcbiAgICBhW2hyZWZePSdqYXZhc2NyaXB0OiddOmFmdGVyLFxuICAgIGFbaHJlZl49JyMnXTphZnRlciB7IGNvbnRlbnQ6ICcnOyB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgYW4gYWJicmV2aWF0aW9uIHN0YW5kcyBmb3IgYWZ0ZXIgdGhlIHRleHRcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICcgKCcgYXR0cih0aXRsZSkgJyknOyB9XG5cbiAgICAvLyBQcmV2ZW50IHBhZ2UgYnJlYWtzIGluIHRoZSBtaWRkbGUgb2YgYSBibG9ja3F1b3RlIG9yIHByZWZvcm1hdHRlZCB0ZXh0IGJsb2NrXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICAvLyBoNWJwLmNvbS90XG4gICAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cblxuICAgIHRyLFxuICAgIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfVxuXG4gICAgaW1nIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICBvcnBoYW5zOiAzO1xuICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIC8vIEF2b2lkIHBhZ2UgYnJlYWtzIGFmdGVyIGEgaGVhZGluZ1xuICAgIGgyLFxuICAgIGgzIHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cblxuICAgIC8vIEhlbHBlciB0byByZS1hbGxvdyBwYWdlIGJyZWFrcyBpbiB0aGUgbWlkZGxlIG9mIGNlcnRhaW4gZWxlbWVudHMgKGUuZy4gcHJlLCBibG9ja3F1b3RlLCB0cilcbiAgICAucHJpbnQtYnJlYWstaW5zaWRlIHtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LWJhc2UtZ3JpZC1jbGFzc2VzIHtcblxuICAvLyBHcmlkIENvbnRhaW5lclxuICAuZ3JpZC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQtY29udGFpbmVyO1xuXG4gICAgJi5mbHVpZCB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWNvbnRhaW5lcigxMDAlKTtcbiAgICB9XG5cbiAgICAmLmZ1bGwge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb250YWluZXIoMTAwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFzZSBncmlkIHN0eWxlc1xuICAuZ3JpZC14IHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkO1xuICB9XG5cbiAgLmNlbGwge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoZnVsbCwgJGd1dHRlci10eXBlOiBub25lKTtcblxuICAgICYuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2UoYXV0byk7XG4gICAgfVxuXG4gICAgJi5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgfVxuXG4gIH1cbiAgLmdyaWQteCB7XG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG5cbiAgICA+IC5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKHNocmluaywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdXRvIHdpZHRoXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyAmIFBScyBmb3IgdGhlIGJhY2tzdG9yeTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMDI0NFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL3B1bGwvMTAxNjRcbiAgICAuZ3JpZC14IHtcbiAgICAgICRzdHI6IFwiPiAuI3skLXpmLXNpemV9LXNocmluaywgPiAuI3skLXpmLXNpemV9LWZ1bGxcIjtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICRzdHI6ICRzdHIgKyBcIiwgPiAuI3skLXpmLXNpemV9LSN7JGl9XCJcbiAgICAgIH1cbiAgICAgICN7JHN0cn0ge1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gUmVzcG9uc2l2ZSBcImF1dG9cIiBtb2RpZmllclxuICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAuZ3JpZC14ID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbChhdXRvLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2Uoc2hyaW5rKTtcbiAgICB9XG5cbiAgICAvLyBSZXNwb25zaXZlIFwic2hyaW5rXCIgbW9kaWZpZXJcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tc2hyaW5rIHtcbiAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstaG9yaXpvbnRhbC0jeyQtemYtc2l6ZX07XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBtb2RpZmllcnNcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICBAZXh0ZW5kICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRpLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2V0IHdpZHRoIHdoZW4gdXNpbmcgYC5ncmlkLW1hcmdpbi14YCBub3Qgb24gYC5ncmlkLXhgXG4gIC5ncmlkLW1hcmdpbi14Om5vdCguZ3JpZC14KSA+IC5jZWxsIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC8vIFJlc2V0IGhlaWdodCB3aGVuIHVzaW5nIGAuZ3JpZC1tYXJnaW4teWAgbm90IG9uIGAuZ3JpZC15YFxuICAuZ3JpZC1tYXJnaW4teTpub3QoLmdyaWQteSkgPiAuY2VsbCB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbkBtaXhpbiAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGNsYXNzLWJyZWFrcG9pbnQsICRndXR0ZXItYnJlYWtwb2ludCwgJHZlcnRpY2FsKSB7XG4gICRwcmVmaXg6IGlmKCRjbGFzcy1icmVha3BvaW50ID09ICQtemYtemVyby1icmVha3BvaW50LCAnJywgJyN7JGNsYXNzLWJyZWFrcG9pbnR9LScpO1xuICA+IC4jeyRwcmVmaXh9YXV0byB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKGF1dG8sICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gID4gLiN7JHByZWZpeH1zaHJpbmsge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICRjbGFzc25hbWU6IGlmKCR2ZXJ0aWNhbCwgJy4jeyRjbGFzcy1icmVha3BvaW50fS0jeyRpfScsICcuI3skY2xhc3MtYnJlYWtwb2ludH0tI3skaX0nKTtcblxuICAgID4gI3skY2xhc3NuYW1lfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoXG4gICRndXR0ZXItcG9zaXRpb246IGxlZnQgcmlnaHQsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICR3cmFwcGluZy1zZWxlY3RvcjogJy5ncmlkLW1hcmdpbi14J1xuKXtcbiAgI3skd3JhcHBpbmctc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRuZWdhdGl2ZTogdHJ1ZSwgJGd1dHRlci1wb3NpdGlvbjogJGd1dHRlci1wb3NpdGlvbik7XG5cbiAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgfVxuXG4gICAgLy8gYmFzZSBzdHlsZXMgbmVlZCB0byBhbGwgYmUgYmVmb3JlIHRoZSBhdXRvIGFuZCBzaHJpbmsgc3R5bGVzXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIEBpZih0eXBlLW9mKCRncmlkLW1hcmdpbi1ndXR0ZXJzKSA9PSAnbWFwJyBhbmQgbWFwLWhhcy1rZXkoJGdyaWQtbWFyZ2luLWd1dHRlcnMsICQtemYtc2l6ZSkgYW5kICQtemYtc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgICA+IC5jZWxsIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuXG4gICAgICAvLyBUaGlzIGlzIHB1cmVseSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzIC0gdGhlIG1hcmdpbiBncmlkIGhhcyB0byBnbyBiYWNrIGFuZCBhZGp1c3Qgd2lkdGhzIChvciBoZWlnaHRzKVxuICAgICAgLy8gZm9yIGFsbCBwcmlvciBicmVha3BvaW50cy5cbiAgICAgIC8vIEFzIHRoZWlyIGd1dHRlciBpcyBkZWZpbmVkIHdpdGggdGhlaXIgd2lkdGgvaGVpZ2h0LCBldmVuIGJyZWFrcG9pbnQgd2l0aG91dCBhIG5ldyBtYXJnaW4gbXVzdCBiZVxuICAgICAgLy8gZ2VuZXJhdGVkIHRvIG5vdCBoYXZpbmcgdGhlaXIgd2lkdGgvaGVpZ2h0IG92ZXJyaWRlZCBieSByZS1hZGp1c3RlZCBzbWFsbGVyIGJyZWFrcG9pbnRzLlxuICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICBAZWFjaCAkYnAgaW4gLXpmLWJyZWFrcG9pbnRzLWxlc3MtdGhhbigkLXpmLXNpemUpIHtcbiAgICAgICAgICBAaW5jbHVkZSAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGJwLCAkLXpmLXNpemUsICR2ZXJ0aWNhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgLXh5LWJyZWFrcG9pbnQtY2VsbC1jbGFzc2VzKCQtemYtc2l6ZSwgJC16Zi1zaXplLCAkdmVydGljYWwpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQYWRkaW5nIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzIHtcbiAgLmdyaWQtcGFkZGluZy14IHtcblxuICAgIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3IgbmVzdGVkIGdyaWRzXG4gICAgLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJG5lZ2F0aXZlOiB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIGdyaWRzIHdpdGhpbiBgZ3JpZC1jb250YWluZXIvZ3JpZC1jb250YWluZXIuZmx1aWRgXG4gICAgLy8gVGhpcyBhbGxvd3MgbWFyZ2luIGFuZCBwYWRkaW5nIGdyaWRzIHRvIGxpbmUgdXAgd2l0aCBlYWNob3RoZXJcbiAgICAuZ3JpZC1jb250YWluZXI6bm90KC5mdWxsKSA+ICYge1xuICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUpO1xuICAgIH1cblxuICAgIC8vIEJhc2UgY2VsbCBzdHlsZXNcbiAgICA+IC5jZWxsIHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRncmlkLXBhZGRpbmctZ3V0dGVycywgJGd1dHRlci10eXBlOiBwYWRkaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQmxvY2sgR3JpZCBjbGFzc2VzXG5AbWl4aW4geHktYmxvY2stZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZDogdHJ1ZSwgJHBhZGRpbmctZ3JpZDogdHJ1ZSkge1xuICBAaWYgJHBhZGRpbmctZ3JpZCB7XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC4jeyQtemYtc2l6ZX0tdXAtI3skaX0ge1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtbGF5b3V0KCRuOiAkaSwgJHNlbGVjdG9yOiAnLmNlbGwnLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRvdXRwdXQ6IChzaXplKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50IHtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJHh5LWJsb2NrLWdyaWQtbWF4IHtcbiAgICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycyAtIHRoZSBtYXJnaW4gZ3JpZCBoYXMgdG8gZ28gYmFjayBhbmQgYWRqdXN0IHdpZHRocyAob3IgaGVpZ2h0cylcbiAgICAgICAgLy8gZm9yIHByaW9yIGJyZWFrcG9pbnRzIGJhc2VkIG9uIHRoZSByZXNwb25zaXZlIGd1dHRlci5cbiAgICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICAgIEBlYWNoICRicCBpbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCQtemYtc2l6ZSkge1xuICAgICAgICAgICAgQGlmKG1hcC1oYXMta2V5KCRncmlkLW1hcmdpbi1ndXR0ZXJzLCAkYnApKSB7XG4gICAgICAgICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JGJwfS11cC0jeyRpfSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JC16Zi1zaXplfS11cC0jeyRpfSB7XG4gICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbGxhcHNlIGNsYXNzZXNcbkBtaXhpbiB4eS1jb2xsYXBzZS1ncmlkLWNsYXNzZXMoJG1hcmdpbi1ncmlkOiB0cnVlLCAkcGFkZGluZy1ncmlkOiB0cnVlKSB7XG4gIEBlYWNoICRicCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICAgIC4jeyRicH0tbWFyZ2luLWNvbGxhcHNlIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb2xsYXBzZSgkZ3V0dGVyLXR5cGU6IG1hcmdpbiwgJG1pbi1icmVha3BvaW50OiAkYnApO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkcGFkZGluZy1ncmlkIHtcbiAgICAgIC4jeyRicH0tcGFkZGluZy1jb2xsYXBzZSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtY29sbGFwc2UoJGd1dHRlci10eXBlOiBwYWRkaW5nLCAkbWluLWJyZWFrcG9pbnQ6ICRicCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE9mZnNldCBjbGFzc2VzXG5AbWl4aW4geHktb2Zmc2V0LWNlbGwtY2xhc3NlcyB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAvLyBPZmZzZXRzXG4gICAgICAkbzogJGkgLSAxO1xuXG4gICAgICAuI3skLXpmLXNpemV9LW9mZnNldC0jeyRvfSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtb2Zmc2V0KCRvLCAkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuICAgICAgfVxuXG4gICAgICAuZ3JpZC1tYXJnaW4teCA+IC4jeyQtemYtc2l6ZX0tb2Zmc2V0LSN7JG99IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1vZmZzZXQoJG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBWZXJ0aWNhbCBHcmlkIGNsYXNzZXNcbkBtaXhpbiB4eS12ZXJ0aWNhbC1ncmlkLWNsYXNzZXMoXG4gICRtYXJnaW4tZ3JpZDogdHJ1ZSxcbiAgJHBhZGRpbmctZ3JpZDogdHJ1ZVxuKSB7XG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLXkge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQodmVydGljYWwsIGZhbHNlKTtcblxuXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXJlc2V0KCk7XG4gICAgfVxuXG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lLCAkdmVydGljYWw6IHRydWUpO1xuICAgIH1cblxuICAgID4gLnNocmluayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoc2hyaW5rLCAkZ3V0dGVyLXR5cGU6IG5vbmUsICR2ZXJ0aWNhbDogdHJ1ZSk7XG4gICAgfVxuXG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyBhbmQgUFJzIGZvciB0aGUgYmFja3N0b3J5OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTAyNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDE2NFxuICAgICAgJHN0cjogXCI+IC4jeyQtemYtc2l6ZX0tc2hyaW5rLCA+IC4jeyQtemYtc2l6ZX0tZnVsbFwiO1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgJHN0cjogJHN0ciArIFwiLCA+IC4jeyQtemYtc2l6ZX0tI3skaX1cIlxuICAgICAgfVxuICAgICAgI3skc3RyfSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJhdXRvXCIgbW9kaWZpZXJcbiAgICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAgID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKGF1dG8sICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJzaHJpbmtcIiBtb2RpZmllclxuICAgICAgQGlmIG5vdCgkLXpmLXNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgPiAuI3skLXpmLXNpemV9LXNocmluayB7XG4gICAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9O1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIG1vZGlmaWVyc1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgICA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICAgIEBleHRlbmQgJS14eS1jZWxsLWJhc2Utc2hyaW5rLXZlcnRpY2FsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWRkaW5nLWdyaWQge1xuICAgIC5ncmlkLXBhZGRpbmcteSB7XG4gICAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIG5lc3RlZCBncmlkc1xuICAgICAgLmdyaWQtcGFkZGluZy15IHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuXG4gICAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgICA+IC5jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkbWFyZ2luLWdyaWQge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXModG9wIGJvdHRvbSwgdHJ1ZSwgJy5ncmlkLW1hcmdpbi15Jyk7XG4gIH1cblxufVxuXG5AbWl4aW4geHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkOiB0cnVlLCAkbWFyZ2luLWdyaWQ6IHRydWUpIHtcbiAgLy8gRnJhbWVkIGdyaWQgc3R5bGVzXG4gIC5ncmlkLWZyYW1lIHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lO1xuICB9XG5cbiAgLmNlbGwgLmdyaWQtZnJhbWUge1xuICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICB9XG5cbiAgLmNlbGwtYmxvY2sge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2soKTtcbiAgfVxuXG4gIC5jZWxsLWJsb2NrLXkge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gIH1cblxuXG4gIC5jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ibG9jay1jb250YWluZXIoKTtcbiAgfVxuXG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuXG4gICAgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWU7XG4gICAgfVxuXG4gICAgLmNlbGwgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrKCk7XG4gICAgfVxuXG4gICAgLiN7JC16Zi1zaXplfS1jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jay15IHtcbiAgICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICR2ZXJ0aWNhbC1ncmlkIHtcbiAgICAuZ3JpZC15IHtcbiAgICAgICYuZ3JpZC1mcmFtZSB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgICYuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgICAuY2VsbCB7XG4gICAgICAuZ3JpZC15LmdyaWQtZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IC8vIFNhbWUgYXMgaW5jbHVkZSB3aXRoICRuZXN0ZWQsIGJ1dCB3aXRoIGxlc3MgY3NzXG4gICAgICB9XG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgIC5ncmlkLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIGhlaWdodDogMTAwJTsgLy8gU2FtZSBhcyBpbmNsdWRlIHdpdGggJG5lc3RlZCwgYnV0IHdpdGggbGVzcyBjc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSB4eS1tYXJnaW4tZ3JpZC1jbGFzc2VzKHRvcCBib3R0b20sIHRydWUsICcuZ3JpZC1tYXJnaW4teScpO1xuICAgIC5ncmlkLWZyYW1lLmdyaWQtbWFyZ2luLXkge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1mcmFtZSh0cnVlLCBmYWxzZSwgJGdyaWQtbWFyZ2luLWd1dHRlcnMsICRpbmNsdWRlLWJhc2U6IGZhbHNlKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuICAgICAgLmdyaWQtbWFyZ2luLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUsIGZhbHNlLCAkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZpbmFsIGNsYXNzZXNcbkBtaXhpbiBmb3VuZGF0aW9uLXh5LWdyaWQtY2xhc3NlcyhcbiAgJGJhc2UtZ3JpZDogdHJ1ZSxcbiAgJG1hcmdpbi1ncmlkOiB0cnVlLFxuICAkcGFkZGluZy1ncmlkOiB0cnVlLFxuICAkYmxvY2stZ3JpZDogdHJ1ZSxcbiAgJGNvbGxhcHNlOiB0cnVlLFxuICAkb2Zmc2V0OiB0cnVlLFxuICAkdmVydGljYWwtZ3JpZDogdHJ1ZSxcbiAgJGZyYW1lLWdyaWQ6IHRydWVcbikge1xuXG4gIC8vIEJhc2UgZ3JpZCBzdHlsZXNcbiAgQGlmKCRiYXNlLWdyaWQpIHtcbiAgICBAaW5jbHVkZSB4eS1iYXNlLWdyaWQtY2xhc3NlcygpO1xuICB9XG5cbiAgLy8gTWFyZ2luIGdyaWRcbiAgQGlmKCRtYXJnaW4tZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFBhZGRpbmcgZ3JpZFxuICBAaWYoJHBhZGRpbmctZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzKCk7XG4gIH1cblxuICAvLyBCbG9jayBncmlkXG4gIEBpZigkYmxvY2stZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LWJsb2NrLWdyaWQtY2xhc3NlcygkbWFyZ2luLWdyaWQsICRwYWRkaW5nLWdyaWQpO1xuICB9XG5cbiAgLy8gQ29sbGFwc2UgZ3V0dGVyc1xuICBAaWYoJGNvbGxhcHNlKSB7XG4gICAgQGluY2x1ZGUgeHktY29sbGFwc2UtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICAvLyBPZmZzZXQgZ3V0dGVyc1xuICBAaWYoJG9mZnNldCkge1xuICAgIEBpbmNsdWRlIHh5LW9mZnNldC1jZWxsLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsIGdyaWRcbiAgQGlmKCR2ZXJ0aWNhbC1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktdmVydGljYWwtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICBAaWYgKCRmcmFtZS1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkLCAkbWFyZ2luLWdyaWQpXG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGUgZ3V0dGVycyBmb3IgYSBjZWxsL2NvbnRhaW5lci5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgZWl0aGVyIG1hcmdpbiBvciBwYWRkaW5nLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb24gdG8gYXBwbHkgZ3V0dGVycyB0by4gQWNjZXB0cyBgdG9wYCwgYGJvdHRvbWAsIGBsZWZ0YCwgYHJpZ2h0YCBpbiBhbnkgY29tYmluYXRpb24uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkbmVnYXRpdmUgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gYXBwbHkgdGhlIGd1dHRlciBhcyBhIG5lZ2F0aXZlIHZhbHVlLiBDb21tb25seSB1c2VkIGZvciBuZXN0ZWQgZ3JpZHMuXG5AbWl4aW4geHktZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogcmlnaHQgbGVmdCxcbiAgJG5lZ2F0aXZlOiBmYWxzZVxuKSB7XG4gICRvcGVyYXRvcjogaWYoJG5lZ2F0aXZlLCAnLScsICcnKTtcblxuICAvLyBJZiB3ZSBoYXZlIGRlY2xhcmVkIG5lZ2F0aXZlIGd1dHRlcnMsIGZvcmNlIHR5cGUgdG8gYG1hcmdpbi5cbiAgJGd1dHRlci10eXBlOiBpZigkbmVnYXRpdmUsICdtYXJnaW4nLCAkZ3V0dGVyLXR5cGUpO1xuXG4gIC8vIE91dHB1dCBvdXIgbWFyZ2luIGd1dHRlcnMuXG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkZ3V0dGVycykge1xuICAgICAgJGd1dHRlcjogcmVtLWNhbGMoJC16Zi1icC12YWx1ZSkgLyAyO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgI3skZ3V0dGVyLXR5cGV9LSN7JHZhbHVlfTogdW5xdW90ZShcIiN7JG9wZXJhdG9yfSN7JGd1dHRlcn1cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICh0eXBlLW9mKCRndXR0ZXJzKSA9PSAnbnVtYmVyJykge1xuICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXJzKSAvIDI7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAjeyRndXR0ZXItdHlwZX0tI3skdmFsdWV9OiB1bnF1b3RlKFwiI3skb3BlcmF0b3J9I3skZ3V0dGVyfVwiKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGVzIGEgbWF4IHdpZHRoIGNvbnRhaW5lciwgZGVzaWduZWQgdG8gaG91c2UgeW91ciBncmlkIGNvbnRlbnQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFskZ3JpZC1jb250YWluZXJdIC0gYSB3aWR0aCB0byBsaW1pdCB0aGUgY29udGFpbmVyIHRvLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkcGFkZGluZyBbJGdyaWQtY29udGFpbmVyLXBhZGRpbmddIC0gcGFkZGluZ3Mgb2YgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiB4eS1ncmlkLWNvbnRhaW5lcihcbiAgJHdpZHRoOiAkZ3JpZC1jb250YWluZXIsXG4gICRwYWRkaW5nOiAkZ3JpZC1jb250YWluZXItcGFkZGluZ1xuKSB7XG4gIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRwYWRkaW5nLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuXG4gIG1heC13aWR0aDogJHdpZHRoO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4vLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgeW91ciBmbGV4IGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyZWN0aW9uIFtob3Jpem9udGFsXSAtIEVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRpcmVjdGlvbiBvZiBjZWxscyB3aXRoaW4uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkd3JhcCBbdHJ1ZV0gLSBJZiB0aGUgY2VsbHMgd2l0aGluIHNob3VsZCB3cmFwIG9yIG5vdC5cbkBtaXhpbiB4eS1ncmlkKFxuICAkZGlyZWN0aW9uOiBob3Jpem9udGFsLFxuICAkd3JhcDogdHJ1ZVxuKSB7XG4gICRkaXJlY3Rpb246IGlmKCRkaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnLCByb3csIGNvbHVtbik7XG4gICR3cmFwOiBpZigkd3JhcCwgd3JhcCwgbm93cmFwKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6ICRkaXJlY3Rpb24gJHdyYXA7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIGZsZXggdmFsdWUgZm9yIGEgY2VsbCBiYXNlLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gVGhlIGNlbGwgZmxleCBwcm9wZXJ0eSB2YWx1ZS5cbkBmdW5jdGlvbiB4eS1jZWxsLWJhc2UoJHNpemU6IGZ1bGwpIHtcbiAgQGlmICgkc2l6ZSA9PSAnYXV0bycpIHtcbiAgICBAcmV0dXJuIDEgMSAwcHg7XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdncm93Jykge1xuICAgIEByZXR1cm4gMSAwIGF1dG87XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdzaHJpbmsnIG9yICRzaXplID09ICdmdWxsJyBvciB6Zi1pcy1mcmFjdGlvbigkc2l6ZSwgJGFsbG93LW5vLWRlbm9taW5hdG9yOiB0cnVlKSkge1xuICAgIEByZXR1cm4gMCAwIGF1dG87XG4gIH1cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLy8gQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgY2VsbCBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgZ3V0dGVycyBtYXAgYCRndXR0ZXJzYC4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcnxNYXB9IFRoZSBjZWxsIGd1dHRlciBzaXplIG9yIHRoZSByZXNwb25zaXZlIGd1dHRlcnMgbWFwLlxuQGZ1bmN0aW9uIHh5LWNlbGwtZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gIC8vIEZvciBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgbWFwIGAkZ3V0dGVyc2AuXG4gIEBpZiAoJGJyZWFrcG9pbnQgPT0gJ2F1dG8nKSB7XG4gICAgQHJldHVybiAkZ3V0dGVycztcbiAgfVxuXG4gIC8vIFVzZSB0aGUgY29udGV4dHVhbCBicmVha3BvaW50IGJ5IGRlZmF1bHQuXG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50KTtcblxuICBAaWYgKCRicmVha3BvaW50KSB7XG4gICAgQHJldHVybiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIC16Zi1nZXQtYnAtdmFsKCRndXR0ZXJzLCAkLXpmLXplcm8tYnJlYWtwb2ludCkgb3IgMDtcbiAgfVxufVxuXG4vLy8gUmV0dXJucyB0aGUgcGVyY2VudGFnZSBzaXplIG9mIGEgY2VsbC5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICRzaXplIFskZ3JpZC1jb2x1bW5zXSAtIFNpemUgdG8gbWFrZSB0aGUgY2VsbC4gWW91IGNhbiBwYXNzIGEgdmFsdWUgaW4gbXVsdGlwbGUgZm9ybWF0cywgc3VjaCBhcyBgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8zYC5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFNpemUgb2YgdGhlIGNlbGwgKGluIHBlcmNlbnQpLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZShcbiAgJHNpemU6ICRncmlkLWNvbHVtbnNcbikge1xuICBAcmV0dXJuIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoJHNpemUsICRkZW5vbWluYXRvcjogJGdyaWQtY29sdW1ucyk7XG59XG5cbi8vLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBDU1MgdmFsdWUgZm9yIGEgY2VsbCBzaXplLlxuLy8vXG4vLy8gR3V0dGVycy1yZWxhdGVkIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMgKGJ5IGRlZmF1bHQpIGFzIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfE51bWJlcn0gJHNpemUgW2Z1bGxdIC0gVGhlIHNpemUgb2YgeW91ciBjZWxsLiBDYW4gYmUgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgIG9yIGFueSBmcmFjdGlvbiBsaWtlIGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCByZXR1cm5zIGEgbWFwIG9mIHNpemVzIGFkYXB0ZWQgdG8gcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ3xNYXB9IFRoZSBjZWxsIHNpemluZyBwcm9wZXJ0eSB2YWx1ZSwgb3IgYSByZXNwb25zaXZlIG1hcCBvZiB0aGVtLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZS1jc3MoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gICRtYXJnaW4tZ3V0dGVyOiAwO1xuXG4gIEBpZiAoJHNpemUgPT0gJ2F1dG8nIG9yICRzaXplID09ICdzaHJpbmsnKSB7XG4gICAgQHJldHVybiBhdXRvO1xuICB9XG5cbiAgLy8gRm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMsIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuICAgICRtYXJnaW4tZ3V0dGVyOiB4eS1jZWxsLWd1dHRlcnMoJGd1dHRlcnMsICRicmVha3BvaW50KTtcbiAgICBAaWYgKCRtYXJnaW4tZ3V0dGVyID09IG51bGwpIHtcbiAgICAgIEBlcnJvciAneHktY2VsbC1zaXplOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBjZWxsIHNpemUgKG51bWJlcilcbiAgJHNpemUtcmF3OiBpZigkc2l6ZSA9PSAnZnVsbCcsIDEwMCUsIHh5LWNlbGwtc2l6ZSgkc2l6ZSkpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCBDU1Mgc2l6ZSBpbmNsdWRpbmcgZ3V0dGVycyAoc3RyaW5nKVxuICAvLyBJZiB0aGUgY2VsbCBoYXMgcmVzcG9uc2l2ZSBtYXJnaW4gZ3V0dGVycywgcmV0dXJuIGEgcmVzcG9uc2l2ZSBtYXAgb2Ygc2l6ZXMuXG4gIEBpZiB0eXBlLW9mKCRtYXJnaW4tZ3V0dGVyKSA9PSAnbWFwJyB7XG4gICAgJHJlc3BvbnNpdmUtY3NzLXNpemVzOiAoKTtcblxuICAgIEBlYWNoICRicCwgJG1nIGluICRtYXJnaW4tZ3V0dGVyIHtcbiAgICAgICRzaXplLWNzczogaWYoJG1nID09IDAsICRzaXplLXJhdywgY2FsYygjeyRzaXplLXJhd30gLSAje3JlbS1jYWxjKCRtZyl9KSk7XG4gICAgICAkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXM6IG1hcC1tZXJnZSgkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXMsICgkYnA6ICRzaXplLWNzcykpO1xuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3BvbnNpdmUtY3NzLXNpemVzO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgc2luZ2xlIENTUyBzaXplLlxuICBAZWxzZSB7XG4gICAgJGNzcy1zaXplOiBpZigkbWFyZ2luLWd1dHRlciA9PSAwLCAkc2l6ZS1yYXcsIGNhbGMoI3skc2l6ZS1yYXd9IC0gI3tyZW0tY2FsYygkbWFyZ2luLWd1dHRlcil9KSk7XG4gICAgQHJldHVybiAkY3NzLXNpemU7XG4gIH1cbn1cblxuLy8vIFNldHMgYmFzZSBmbGV4IHByb3BlcnRpZXMgZm9yIGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG5AbWl4aW4geHktY2VsbC1iYXNlKCRzaXplOiBmdWxsKSB7XG4gICRiYXNlOiB4eS1jZWxsLWJhc2UoJHNpemUpO1xuXG4gIGZsZXg6ICN7JGJhc2V9O1xuXG4gIC8vIFNldCBiYXNlIHN0eWxlcyBmb3IgXCJmdWxsXCIgb25seVxuICBAaWYoJHNpemUgPT0gJ2Z1bGwnKSB7XG4gICAgbWluLWhlaWdodDogMHB4O1xuICAgIG1pbi13aWR0aDogMHB4O1xuICB9XG59XG5cbi8vLyBSZXNldHMgYSBjZWxscyB3aWR0aCAob3IgaGVpZ2h0IGlmIHZlcnRpY2FsIGlzIHRydWUpIGFzIHdlbGwgYXMgc3RyaXBzIGl0cyBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtcmVzZXQoJHZlcnRpY2FsOiB0cnVlKSB7XG4gICRkaXJlY3Rpb246IGlmKCR2ZXJ0aWNhbCA9PSB0cnVlLCBoZWlnaHQsIHdpZHRoKTtcbiAgI3skZGlyZWN0aW9ufTogYXV0bztcbiAgbWF4LSN7JGRpcmVjdGlvbn06IG5vbmU7XG59XG5cbi8vLyBTZXRzIHNpemluZyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEd1dHRlcnMtcmVsYXRlZCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGZvciBjZWxscyB3aXRoIG1hcmdpbiBndXR0ZXJzIChieSBkZWZhdWx0KSBhcyB0aGUgZ3V0dGVyIGlzIGluY2x1ZGVkIGluIHRoZSB3aWR0aC5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gVHlwZSBvZiBndXR0ZXIgdG8gb3V0cHV0LiBBY2NlcHRzIGBtYXJnaW5gLCBgcGFkZGluZ2Agb3IgYG5vbmVgLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uIElmIGBhdXRvYCwgZ2VuZXJhdGVzIHNpemVzIGFkYXB0ZWQgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycy4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJHZlcnRpY2FsIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBvdXRwdXQgdmVydGljYWwgKGhlaWdodCkgc3R5bGVzIHJhdGhlciB0aGFuIHdpZHRocy5cbkBtaXhpbiB4eS1jZWxsLXNpemUoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRzaXplczogeHktY2VsbC1zaXplLWNzcygkc2l6ZSwgJGd1dHRlcnMsICRndXR0ZXItdHlwZSwgJGJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgaGVpZ2h0LCB3aWR0aCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzaXplcykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkc2l6ZXMpIHtcbiAgICAgICN7JGRpcmVjdGlvbn06ICQtemYtYnAtdmFsdWU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRkaXJlY3Rpb259OiAkc2l6ZXM7XG4gIH1cbn1cblxuLy8vIFNldHMgZ3V0dGVycyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtMaXN0fSAkZ3V0dGVyLXBvc2l0aW9uIFtudWxsXSAtIFRoZSBwb3NpdGlvbiB0byBhcHBseSBndXR0ZXJzIHRvLiBBY2NlcHRzIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgLCBgcmlnaHRgIGluIGFueSBjb21iaW5hdGlvbi4gQnkgZGVmYXVsdCBgcmlnaHQgbGVmdGAgZm9yIGhvcml6b250YWwgY2VsbHMgYW5kIGB0b3AgYm90dG9tYCBmb3IgdmVydGljYWwgY2VsbHMuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCBnZW5lcmF0ZXMgcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIERpcmVjdGlvbiBvZiB0aGUgZ3V0dGVycyB0byBvdXRwdXQuIFNlZSBgJGd1dHRlci1wb3NpdGlvbmAuXG5AbWl4aW4geHktY2VsbC1ndXR0ZXJzKFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIC8vIEdldCB0aGUgZGVmYXVsdCBndXR0ZXIgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGNlbGwgZGlyZWN0aW9uXG4gIEBpZigkZ3V0dGVyLXBvc2l0aW9uID09IG51bGwpIHtcbiAgICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGd1dHRlciB3aWR0aCBmb3IgdGhpcyBicmVha3BvaW50XG4gICRndXR0ZXItd2lkdGg6IHh5LWNlbGwtZ3V0dGVycygkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICBAaWYgKCRndXR0ZXItd2lkdGggPT0gbnVsbCkge1xuICAgIEBlcnJvciAneHktY2VsbC1ndXR0ZXJzOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gIH1cblxuICBAaWYgKCRndXR0ZXItdHlwZSBhbmQgJGd1dHRlci10eXBlICE9IG5vbmUpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXItd2lkdGgsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBjZWxsIGZvciB5b3VyIGdyaWQuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIENhbiBiZSBgZnVsbGAgKDEwMCUgd2lkdGgpLCBgYXV0b2AgKHVzZSBhbGwgYXZhaWxhYmxlIHNwYWNlKSwgYHNocmlua2AgKHVzZSBvbmx5IHRoZSByZXF1aXJlZCBzcGFjZSkgb3IgYW55IGZyYWN0aW9uIChgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8yYC4uLikuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIGdlbmVyYXRlcyByZXNwb25zaXZlIGd1dHRlcnMuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gb3V0cHV0IHZlcnRpY2FsIChoZWlnaHQpIHN0eWxlcyByYXRoZXIgdGhhbiB3aWR0aHMuXG4vLy8gQHBhcmFtIHtMaXN0fSAkb3V0cHV0IFsoYmFzZSBzaXplIGd1dHRlcnMpXSAtIENlbGwgcGFydHMgdG8gb3V0cHV0LiBZb3Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlIG90aGVycyBwYXJ0cyBvZiB0aGUgY2VsbCBzZXBlcmF0ZWx5LCBpdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgb3RoZXJ3aXNlLlxuQG1peGluIHh5LWNlbGwoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyLW91dHB1dDogbnVsbCxcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogbnVsbCxcbiAgJGJyZWFrcG9pbnQ6IG51bGwsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICRvdXRwdXQ6IChiYXNlIHNpemUgZ3V0dGVycylcbikge1xuICAvLyBEZWZhdWx0IGZvciAkZ3V0dGVyLW91dHB1dFxuICBAaWYgKCRndXR0ZXItb3V0cHV0ICE9IG51bGwpIHtcbiAgICBAd2FybiAneHktY2VsbDogJGd1dHRlci1vdXRwdXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBTZWUgbWlncmF0aW9uIG5vdGVzIGF0IGh0dHBzOi8vZ2l0LmlvL2ZvdW5kYXRpb24tNi02LTAnO1xuICAgIEBpZiAoJGd1dHRlci1vdXRwdXQgPT0gZmFsc2UpIHtcbiAgICAgICRvdXRwdXQ6IHNsLXJlbW92ZSgkb3V0cHV0LCBndXR0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGJhc2UpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKCRzaXplKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIHNpemUpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRzaXplLCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGd1dHRlcnMpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkZ3V0dGVyLXR5cGUsICRndXR0ZXItcG9zaXRpb24sICRicmVha3BvaW50LCAkdmVydGljYWwpO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2luZ2xlIGJyZWFrcG9pbnQgc2l6ZWQgZ3JpZC4gVXNlZCB0byBnZW5lcmF0ZSBvdXIgZ3JpZCBjbGFzc2VzLlxuLy8vXG4vLy8gYHh5LWNlbGwtc3RhdGljKClgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC5cbi8vLyBVc2UgYHh5LWNlbGwoKWAgaW5zdGVhZCB3aXRoIGAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKWAgdG8gbm90IGdlbmVyYXRlIHRoZSBjZWxsIGJhc2UuXG4vLy8gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wXG4vLy9cbi8vLyBAZGVwcmVjYXRlZCB2Ni42LjBcbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRndXR0ZXItb3V0cHV0IFt0cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBndXR0ZXJzLiBBbHdheXMgYHRydWVgIGZvciBtYXJnaW4gZ3V0dGVycy5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtc3RhdGljKFxuICAkc2l6ZTogZnVsbCxcbiAgJGd1dHRlci1vdXRwdXQ6IHRydWUsXG4gICRndXR0ZXJzOiAkZ3JpZC1tYXJnaW4tZ3V0dGVycyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRicmVha3BvaW50OiAkLXpmLXplcm8tYnJlYWtwb2ludCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIEB3YXJuICd4eS1jZWxsLXN0YXRpYygpIG1peGluIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIFwieHktY2VsbCgpXCIgaW5zdGVhZC4gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wJztcblxuICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG5cbiAgJC1ndXR0ZXItb3V0cHV0OiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsIHRydWUsICRndXR0ZXItb3V0cHV0KTtcbiAgJC1ndXR0ZXItbWFyZ2luOiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsICRndXR0ZXIsIDApO1xuXG4gIEBpbmNsdWRlIC14eS1jZWxsLXByb3BlcnRpZXMoJHNpemUsICQtZ3V0dGVyLW1hcmdpbiwgJHZlcnRpY2FsKTtcbiAgQGlmICgkLWd1dHRlci1vdXRwdXQpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXIsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gaW50ZWdlcnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJGEgLSBGaXJzdCBudW1iZXIgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGIgLSBTZWNvbmQgbnVtYmVyIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuXG5AZnVuY3Rpb24gZ2NkKCRhLCAkYikge1xuICAvLyBGcm9tOiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvR3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IjSmF2YVNjcmlwdFxuICBAaWYgKCRiICE9IDApIHtcbiAgICBAcmV0dXJuIGdjZCgkYiwgJGEgJSAkYik7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYWJzKCRhKTtcbiAgfVxufVxuXG4vLy8gSGFuZGxlcyBkZWNpbWFsIGV4cG9uZW50cyBieSB0cnlpbmcgdG8gY29udmVydCB0aGVtIGludG8gYSBmcmFjdGlvbiBhbmQgdGhlbiB1c2UgYSBudGgtcm9vdC1hbGdvcml0aG0gZm9yIHBhcnRzIG9mIHRoZSBjYWxjdWxhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gVGhlIGJhc2UgbnVtYmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZXhwb25lbnQgLSBUaGUgZXhwb25lbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgcHJvZHVjdCBvZiB0aGUgZXhwb25lbnRpYXRpb24uXG5AZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQsICRwcmVjOiAxNikge1xuICBAaWYgKGZsb29yKCRleHBvbmVudCkgIT0gJGV4cG9uZW50KSB7XG4gICAgJHByZWMyIDogcG93KDEwLCAkcHJlYyk7XG4gICAgJGV4cG9uZW50OiByb3VuZCgkZXhwb25lbnQgKiAkcHJlYzIpO1xuICAgICRkZW5vbWluYXRvcjogZ2NkKCRleHBvbmVudCwgJHByZWMyKTtcbiAgICBAcmV0dXJuIG50aC1yb290KHBvdygkYmFzZSwgJGV4cG9uZW50IC8gJGRlbm9taW5hdG9yKSwgJHByZWMyIC8gJGRlbm9taW5hdG9yLCAkcHJlYyk7XG4gIH1cblxuICAkdmFsdWU6ICRiYXNlO1xuICBAaWYgJGV4cG9uZW50ID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkZXhwb25lbnQge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiAkYmFzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGV4cG9uZW50IDwgMSB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAtJGV4cG9uZW50IHtcbiAgICAgICR2YWx1ZTogJHZhbHVlIC8gJGJhc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbkBmdW5jdGlvbiBudGgtcm9vdCgkbnVtLCAkbjogMiwgJHByZWM6IDEyKSB7XG4gIC8vIEZyb206IGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICR4OiAxO1xuXG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJHByZWMge1xuICAgICR4OiAxIC8gJG4gKiAoKCRuIC0gMSkgKiAkeCArICgkbnVtIC8gcG93KCR4LCAkbiAtIDEpKSk7XG4gIH1cblxuICBAcmV0dXJuICR4O1xufVxuXG4vLy8gQ2FsY3VsYXRlcyB0aGUgaGVpZ2h0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggZm9yIGEgZ2l2ZW4gcmF0aW8uXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmF0aW8gLSBSYXRpbyB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQsIGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGhlaWdodCByZWxhdGl2ZSB0byB0aGUgd2lkdGggb2YgYSByZXNwb25zaXZlIGNvbnRhaW5lci5cbkBmdW5jdGlvbiByYXRpby10by1wZXJjZW50YWdlKCRyYXRpbykge1xuICAkdzogbnRoKCRyYXRpbywgMSk7XG4gICRoOiBudGgoJHJhdGlvLCAzKTtcbiAgQHJldHVybiAkaCAvICR3ICogMTAwJTtcbn1cblxuLy8vIFBhcnNlIHRoZSBnaXZlbiBgJGZyYWN0aW9uYCB0byBudW1lcmF0b3JzIGFuZCBkZW51bWVyYXRvcnMuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICRmcmFjdGlvbiAtIFZhbHVlIHJlcHJlc2VudGluZyBhIGZyYWN0aW9uIHRvIHBhcnNlLiBJdCBjYW4gYmUgZm9ybWF0dGVkIGFzIGA1MCVgLCBgMSBvZiAyYCwgYDEvMmAgb3IgYDUwYCAobm8gZGVub21pbmF0b3Igd291bGQgYmUgcmV0dXJuZWQpLlxuLy8vXG4vLy8gQHJldHVybiB7TGlzdH0gTGlzdCBvZiBwYXJzZWQgdmFsdWVzIHdpdGggbnVtZXJhdG9yIGF0IGZpcnN0IHBvc2l0aW9uIGFuZCBkZW51bWVyYXRvciBhcyBzZWNvbmQuIFRoZXNlIHZhbHVlcyBtYXkgYmUgbnVsbC5cbkBmdW5jdGlvbiB6Zi1wYXJzZS1mcmFjdGlvbigkZnJhY3Rpb24pIHtcblxuICBAaWYgdHlwZS1vZigkZnJhY3Rpb24pID09ICdudW1iZXInIHtcbiAgICAvLyBcIjUwJVwiXG4gICAgQGlmIHVuaXQoJGZyYWN0aW9uKSA9PSAnJScge1xuICAgICAgQHJldHVybiAoc3RyaXAtdW5pdCgkZnJhY3Rpb24pLCAxMDApO1xuICAgIH1cbiAgICBAZWxzZSBpZiAodW5pdCgkZnJhY3Rpb24pID09ICcnKSB7XG4gICAgICAvLyBcIjAuNVwiXG4gICAgICBAaWYgJGZyYWN0aW9uIDwgMSB7XG4gICAgICAgIEByZXR1cm4gKCRmcmFjdGlvbiAqIDEwMCwgMTAwKTtcbiAgICAgIH1cbiAgICAgIC8vIFwiNTBcIlxuICAgICAgQGVsc2Uge1xuICAgICAgICBAcmV0dXJuICgkZnJhY3Rpb24sIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZyYWN0aW9uKSA9PSAnbGlzdCcge1xuICAgIC8vIFwiNTAgb2YgMTAwXCIsIFwiNTAvMTAwXCIuLi5cbiAgICBAaWYgbGVuZ3RoKCRmcmFjdGlvbikgPT0gM1xuICAgICAgYW5kIHR5cGUtb2YobnRoKCRmcmFjdGlvbiwgMSkgPT0gJ251bWJlcicpXG4gICAgICBhbmQgdHlwZS1vZihudGgoJGZyYWN0aW9uLCAzKSA9PSAnbnVtYmVyJykge1xuICAgICAgQHJldHVybiAobnRoKCRmcmFjdGlvbiwgMSksIG50aCgkZnJhY3Rpb24sIDMpKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIChudWxsLCBudWxsKTtcbn1cblxuLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLiBTdXBwb3J0cyBmb3JtYXRzIGxpa2UgYDUwJWAsIGAxIG9mIDJgLCBgMSBwZXIgMmAgb3IgYDEvMmAuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICR2YWx1ZSAtIFZhbHVlIHRvIHRlc3QuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkYWxsb3ctbm8tZGVub21pbmF0b3IgW2ZhbHNlXSAtIElmIGB0cnVlYCwgc2ltcGxlIG51bWJlcnMgd2l0aG91dCBkZW5vbWluYXRvcnMgbGlrZSBgNTBgIGFyZSBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLCBgZmFsc2VgIG90aGVyd2lzZS5cbkBmdW5jdGlvbiB6Zi1pcy1mcmFjdGlvbigkdmFsdWUsICRhbGxvdy1uby1kZW5vbWluYXRvcjogZmFsc2UpIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJHZhbHVlKTtcbiAgQHJldHVybiBub3QobnRoKCRwYXJzZWQsIDEpID09IG51bGxcbiAgICBvciAobnRoKCRwYXJzZWQsIDIpID09IG51bGwgYW5kICRhbGxvdy1uby1kZW5vbWluYXRvciA9PSBmYWxzZSkpO1xufVxuXG4vLy8gQ2FsY3VsYXRlIGEgcGVyY2VudGFnZSBmcm9tIGEgZ2l2ZW4gZnJhY3Rpb24uXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkZnJhY3Rpb24gLSBWYWx1ZSByZXByZXNlbnRpbmcgYSBmcmFjdGlvbiB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlLCBmb3JtYXR0ZWQgYXMgYDUwYCAocmVsYXRpdmUgdG8gYCRkZW5vbWluYXRvcmApLCBgNTAlYCwgYDEgb2YgMmAgb3IgYDEvMmAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGRlbm9taW5hdG9yIC0gRGVmYXVsdCB2YWx1ZSB0byB1c2UgYXMgZGVub21pbmF0b3Igd2hlbiBgJGZyYWN0aW9uYCByZXByZXNlbnRzIGFuIGFic29sdXRlIHZhbHVlLlxuQGZ1bmN0aW9uIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoXG4gICRmcmFjdGlvbixcbiAgJGRlbm9taW5hdG9yOiBudWxsXG4pIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJGZyYWN0aW9uKTtcbiAgJHBhcnNlZC1ub21pbmF0b3I6IG50aCgkcGFyc2VkLCAxKTtcbiAgJHBhcnNlZC1kZW5vbWluYXRvcjogbnRoKCRwYXJzZWQsIDIpO1xuXG4gIEBpZiAkcGFyc2VkLW5vbWluYXRvciA9PSBudWxsIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gVXNlIGEgbnVtYmVyLCBkZWNpbWFsLCBwZXJjZW50YWdlLCBvciBcIm4gb2YgblwiIC8gXCJuL25cIi4nO1xuICB9XG4gIEBpZiAkcGFyc2VkLWRlbm9taW5hdG9yID09IG51bGwge1xuICAgIEBpZiB0eXBlLW9mKCRkZW5vbWluYXRvcikgPT0gJ251bWJlcicge1xuICAgICAgJHBhcnNlZC1kZW5vbWluYXRvcjogJGRlbm9taW5hdG9yO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAZXJyb3IgJ0Vycm9yIHdpdGggXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gQSBkZWZhdWx0IFwiJGRlbm9taW5hdG9yXCIgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBhYnNvbHV0ZSB2YWx1ZXMnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gcGVyY2VudGFnZSgkcGFyc2VkLW5vbWluYXRvciAvICRwYXJzZWQtZGVub21pbmF0b3IpO1xufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIFNpemVzIGNoaWxkIGVsZW1lbnRzIHNvIHRoYXQgYCRuYCBudW1iZXIgb2YgaXRlbXMgYXBwZWFyIG9uIGVhY2ggcm93LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRuIC0gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRpc3BsYXkgcGVyIHJvdy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFsnLmNlbGwnXSAtIFNlbGVjdG9yKHMpIHRvIHVzZSBmb3IgY2hpbGQgZWxlbWVudHMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIGJyZWFrcG9pbnQgdG8gdXNlIGZvciB0aGUgY2VsbCBnZW5lcmF0aW9uLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuLy8vIEBwYXJhbSB7TGlzdH0gJG91dHB1dCBbKGJhc2Ugc2l6ZSBndXR0ZXJzKV0gLSBDZWxsIHBhcnRzIHRvIG91dHB1dC4gWW91IHdpbGwgbmVlZCB0byBnZW5lcmF0ZSBvdGhlcnMgcGFydHMgb2YgdGhlIGNlbGwgc2VwZXJhdGVseSwgaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSBvdGhlcndpc2UuXG5AbWl4aW4geHktZ3JpZC1sYXlvdXQoXG4gICRuLFxuICAkc2VsZWN0b3I6ICcuY2VsbCcsXG4gICRndXR0ZXItb3V0cHV0OiBudWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZSxcbiAgJG91dHB1dDogKGJhc2Ugc2l6ZSBndXR0ZXJzKVxuKSB7XG4gICRzaXplOiBwZXJjZW50YWdlKDEvJG4pO1xuXG4gICYgPiAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoJHNpemUsICRndXR0ZXItb3V0cHV0LCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkZ3V0dGVyLXBvc2l0aW9uLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsLCAkb3V0cHV0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIENvbGxhcHNlcyB0aGUgZ3JpZCBhIGNlbGxzIHdpdGhpbiBpdC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWy5jZWxsXSAtIFRoZSBjaGlsZCBlbGVtZW50IHRvIHJlbW92ZSB0aGUgZ3V0dGVyIGZyb20uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUaGUgdHlwZSBvZiBndXR0ZXIgdG8gcmVtb3ZlLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb25zIHRvIHJlbW92ZSBndXR0ZXJzIGZyb20uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG1pbi1icmVha3BvaW50IFskLXpmLXplcm8tYnJlYWtwb2ludF0gLSBNaW5pbXVtIGJyZWFrcG9pbnQgaW4gYCRicmVha3BvaW50LWNsYXNzZXNgIGZvciB3aGljaCB0byBjb2xsYXBzZSB0aGUgZ3V0dGVyLlxuQG1peGluIHh5LWdyaWQtY29sbGFwc2UoXG4gICRzZWxlY3RvcjogJy5jZWxsJyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRndXR0ZXItcG9zaXRpb246IHJpZ2h0IGxlZnQsXG4gICRtaW4tYnJlYWtwb2ludDogJC16Zi16ZXJvLWJyZWFrcG9pbnRcbikge1xuICAvLyBGaXJzdCwgbGV0cyBuZWdhdGUgYW55IG1hcmdpbnMgb24gdGhlIHRvcCBsZXZlbFxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbWluLWJyZWFrcG9pbnQpIHtcbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgIH1cblxuICAgICAgPiAjeyRzZWxlY3Rvcn0ge1xuICAgICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRleGNsdWRlZC1icHM6IC16Zi1icmVha3BvaW50cy1sZXNzLXRoYW4oJG1pbi1icmVha3BvaW50KTtcblxuICAgIC8vIE91dHB1dCBuZXcgd2lkdGhzIHRvIG5vdCBpbmNsdWRlIGd1dHRlcnNcbiAgICBAZWFjaCAkYnAgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYoc2wtY29udGFpbigkZXhjbHVkZWQtYnBzLCAkYnApKSB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgICAgIC8vIFNpemluZyAocGVyY2VudGFnZSlcbiAgICAgICAgICAgID4gLiN7JGJwfS0jeyRpfSB7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZSgkaSwgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicCkge1xuICAgICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICAgICAvLyBTaXppbmcgKHBlcmNlbnRhZ2UpXG4gICAgICAgICAgICA+IC4jeyRicH0tI3skaX0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgIG1hcmdpbi0jeyR2YWx1ZX06IDA7XG4gICAgICB9XG5cbiAgICAgID4gI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGVhY2ggJHZhbHVlIGluICRndXR0ZXItcG9zaXRpb24ge1xuICAgICAgICAgIHBhZGRpbmctI3skdmFsdWV9OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIHZhbHVlIHRvIG9mZnNldCBhIGNlbGwuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ30gVGhlIGNlbGwgb2Zmc2V0IHByb3BlcnR5IHZhbHVlLlxuQGZ1bmN0aW9uIHh5LWNlbGwtb2Zmc2V0KFxuICAkbixcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGJyZWFrcG9pbnQ6IG51bGxcbikge1xuICAkYnJlYWtwb2ludDogLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkYnJlYWtwb2ludCwgJGRlZmF1bHQ6ICQtemYtemVyby1icmVha3BvaW50KTtcbiAgJHNpemU6IHh5LWNlbGwtc2l6ZSgkbik7XG5cbiAgJG9mZnNldDogJHNpemU7XG4gIEBpZiAoJGd1dHRlci10eXBlID09ICdtYXJnaW4nKSB7XG4gICAgJGd1dHRlcjogcmVtLWNhbGMoeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkYnJlYWtwb2ludCkgLyAyKTtcbiAgICAkb2Zmc2V0OiBpZigkZ3V0dGVyID09IDAsICRzaXplLCBjYWxjKCN7JHNpemV9ICsgI3skZ3V0dGVyfSkpO1xuICB9XG4gIEByZXR1cm4gJG9mZnNldDtcbn1cblxuLy8vIE9mZnNldHMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0L2JvdHRvbSBieSBgJG5gIGNvbHVtbnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge051bWJlcnxBcnJheXxLZXl3b3JkfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBmb3IgYCRndXR0ZXJzYC4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLiBJZiBhIGxpc3QgaXMgZ2l2ZW4sIG1lZGlhLXF1ZXJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIFNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb2Zmc2V0LiBJZiBzZXQgdG8gdHJ1ZSB3aWxsIGFwcGx5IG1hcmdpbi10b3AgaW5zdGVhZC5cbkBtaXhpbiB4eS1jZWxsLW9mZnNldChcbiAkbixcbiAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gJGJyZWFrcG9pbnQ6IG51bGwsXG4gJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50LCAkZGVmYXVsdDogJC16Zi16ZXJvLWJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwsICd0b3AnLCAkZ2xvYmFsLWxlZnQpO1xuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oJGJyZWFrcG9pbnQsICRtZWRpYS1xdWVyaWVzOiAnZm9yLWxpc3RzJykge1xuICAgICRvZmZzZXQ6IHh5LWNlbGwtb2Zmc2V0KCRuLCAkZ3V0dGVycywgJGd1dHRlci10eXBlKTtcbiAgICBtYXJnaW4tI3skZGlyZWN0aW9ufTogI3skb2Zmc2V0fTtcbiAgfVxufVxuIiwiLy8vIE1vZGlmaWVzIGEgZ3JpZCB0byBnaXZlIGl0IFwiZnJhbWVcIiBiZWhhdmlvciAobm8gb3ZlcmZsb3csIG5vIHdyYXAsIHN0cmV0Y2ggYmVoYXZpb3IpXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gSXMgZ3JpZCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBTaG91bGQgbWF0Y2ggZ3JpZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRuZXN0ZWQgW2ZhbHNlXSAtIElzIGdyaWQgbmVzdGVkIG9yIG5vdC4gSWYgbmVzdGVkIGlzIHRydWUgdGhpcyBzZXRzIHRoZSBmcmFtZSB0byAxMDAlIGhlaWdodCwgb3RoZXJ3aXNlIHdpbGwgYmUgMTAwdmguXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbbnVsbF0gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkaW5jbHVkZS1iYXNlIFt0cnVlXSAtIEluY2x1ZGUgdGhlIGJhc2Ugc3R5bGVzIHRoYXQgZG9uJ3QgdmFyeSBwZXIgYnJlYWtwb2ludC5cbkBtaXhpbiB4eS1ncmlkLWZyYW1lKFxuICAkdmVydGljYWw6IGZhbHNlLFxuICAkbmVzdGVkOiBmYWxzZSxcbiAgJGd1dHRlcnM6IG51bGwsXG4gICRicmVha3BvaW50OiBudWxsLFxuICAkaW5jbHVkZS1iYXNlOiB0cnVlXG4pIHtcblxuICBAaWYgJGluY2x1ZGUtYmFzZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cblxuICBAaWYgJGJyZWFrcG9pbnQgPT0gbnVsbCBhbmQgdHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcge1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKCR2ZXJ0aWNhbCwgJG5lc3RlZCwgJGd1dHRlcnMsICQtemYtc2l6ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgLy8gR2V0IG91ciBndXR0ZXJzIGlmIGFwcGxpY2FibGVcbiAgICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIGd1dHRlciwgYWRkIGl0IHRvIHRoZSB3aWR0aC9oZWlnaHRcbiAgICBAaWYgJGd1dHRlciB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2aCk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoI3skdW5pdH0gKyAjeyRndXR0ZXJ9KTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2dyk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICB3aWR0aDogY2FsYygjeyR1bml0fSArICN7JGd1dHRlcn0pO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICBoZWlnaHQ6IGlmKCRuZXN0ZWQgPT0gdHJ1ZSwgMTAwJSwgMTAwdmgpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHdpZHRoOiBpZigkbmVzdGVkID09IHRydWUsIDEwMCUsIDEwMHZ3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIE1vZGlmaWVzIGEgY2VsbCB0byBnaXZlIGl0IFwiYmxvY2tcIiBiZWhhdmlvciAob3ZlcmZsb3cgYXV0bywgaW5lcnRpYWwgc2Nyb2xsaW5nKVxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIElzIGdyaWQgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gU2hvdWxkIG1hdGNoIGdyaWQuXG5AbWl4aW4geHktY2VsbC1ibG9jayhcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRwcm9wZXJ0eTogaWYoJHZlcnRpY2FsID09IHRydWUsICdvdmVyZmxvdy15JywgJ292ZXJmbG93LXgnKTtcblxuICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICB9IEBlbHNlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG59XG5cbi8vLyBDb250YWluZXIgZm9yIGluc2lkZSBhIGdyaWQgZnJhbWUgY29udGFpbmluZyBtdWx0aXBsZSBibG9ja3MuIFR5cGljYWxseSB1c2VkXG4vLy8gYXMgYSBtb2RpZmllciBmb3IgYSBgLmNlbGxgIHRvIGFsbG93IHRoZSBjZWxsIHRvIHBhc3MgYWxvbmcgZmxleCBzaXppbmdcbi8vLyBjb25zdHJhaW50cyAvIGZyb20gcGFyZW50cyB0byBjaGlsZHJlbi5cbkBtaXhpbiB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogMTAwJTtcblxuICA+IC5ncmlkLXgge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b25cbi8vLy9cblxuLy8vIEZvbnQgZmFtaWx5IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gQHR5cGUgRm9udFxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gSWdub3JlZCBpZiBudWxsIChkZWZhdWx0KVxuLy8vIEB0eXBlIEZvbnQtV2VpZ2h0XG4kYnV0dG9uLWZvbnQtd2VpZ2h0OiBudWxsICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXBhZGRpbmc6IDAuODVlbSAxZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYXJvdW5kIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmaWxsIGZvciBidXR0b25zLiBDYW4gZWl0aGVyIGJlIGBzb2xpZGAgb3IgYGhvbGxvd2AuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGJ1dHRvbi1maWxsOiBzb2xpZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBDb2xvclxuJGJ1dHRvbi1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJ1dHRvbi1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgY29sb3IgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQWx0ZXJuYXRpdmUgZm9udCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWNvbG9yLWFsdDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHJhZGl1cyBmb3IgYnV0dG9ucywgZGVmYXVsdGVkIHRvIGdsb2JhbC1yYWRpdXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgZm9yIGJ1dHRvbnMsIHRyYW5zcGFyZW50IGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHdpZHRoIGZvciBob2xsb3cgb3V0bGluZSBidXR0b25zXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNpemVzIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1zaXplczogKFxuICB0aW55OiAwLjZyZW0sXG4gIHNtYWxsOiAwLjc1cmVtLFxuICBkZWZhdWx0OiAwLjlyZW0sXG4gIGxhcmdlOiAxLjI1cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIENvbG9yaW5nIGNsYXNzZXMuIEEgbWFwIG9mIGNsYXNzZXMgdG8gb3V0cHV0IGluIHlvdXIgQ1NTLCBsaWtlIGAuc2Vjb25kYXJ5YCwgYC5zdWNjZXNzYCwgYW5kIHNvIG9uLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gb3BhY2l0eSBmb3IgYSBkaXNhYmxlZCBidXR0b24uXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1vcGFjaXR5LWRpc2FibGVkOiAwLjI1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBsaWdodG5lc3Mgb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWJhY2tncm91bmQtaG92ZXItbGlnaHRuZXNzOiAtMjAlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyIGZvciBob2xsb3cgYnV0dG9ucy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b24taG9sbG93LWhvdmVyLWxpZ2h0bmVzczogLTUwJSAhZGVmYXVsdDtcblxuLy8gSW50ZXJuYWw6IGZsaXAgZnJvbSBtYXJnaW4tcmlnaHQgdG8gbWFyZ2luLWxlZnQgZm9yIGRlZmF1bHRzXG5AaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gJGdsb2JhbC1tYXJnaW4gIWRlZmF1bHQ7XG59XG5cbi8vLyB0cmFuc2l0aW9ucyBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gQWRkaXRpb25hbCByZXNwb25zaXZlIGNsYXNzZXMgZm9yIC5leHBhbmRlZFxuLy8vIEB0eXBlIEJvb2xlYW5cbiRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFRPRE86IERvY3VtZW50IGJ1dHRvbi1iYXNlKCkgbWl4aW5cbkBtaXhpbiBidXR0b24tYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW46ICRidXR0b24tbWFyZ2luO1xuXG4gIEBpZiAodHlwZS1vZigkYnV0dG9uLXBhZGRpbmcpID09ICdtYXAnKSB7XG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluICRidXR0b24tcGFkZGluZyB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nO1xuICB9XG5cbiAgYm9yZGVyOiAkYnV0dG9uLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gIHRyYW5zaXRpb246ICRidXR0b24tdHJhbnNpdGlvbjtcbiAgZm9udC1mYW1pbHk6ICRidXR0b24tZm9udC1mYW1pbHk7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcbiAgZm9udC13ZWlnaHQ6ICRidXR0b24tZm9udC13ZWlnaHQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vLy8gRXhwYW5kcyBhIGJ1dHRvbiB0byBtYWtlIGl0IGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFt0cnVlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBleHBhbmQgYmVoYXZpb3IuIFNldCB0byBgZmFsc2VgIHRvIHJldmVyc2UgdGhpcyBiZWhhdmlvci5cbkBtaXhpbiBidXR0b24tZXhwYW5kKCRleHBhbmQ6IHRydWUpIHtcbiAgQGlmICRleHBhbmQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IG9yIGNsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWZpbGwtc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZmlsbCBbJGJ1dHRvbi1maWxsXSAtIFR5cGUgb2YgZmlsbGluZyBiZXR3ZWVuIGBob2xsb3dgIGFuZCBgY2xlYXJgLiBgc29saWRgIGhhcyBubyBlZmZlY3RzLlxuQG1peGluIGJ1dHRvbi1maWxsKFxuICAkZmlsbDogJGJ1dHRvbi1maWxsXG4pIHtcbiAgQGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdztcbiAgfVxuICBAZWxzZSBpZiAkZmlsbCA9PSBjbGVhciB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWNsZWFyO1xuICB9XG59XG5cbi8vLyBTZXRzIHRoZSB2aXN1YWwgc3R5bGVzIG9mIGEgc29saWQvaG9sbG93L2NsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbnMgYGJ1dHRvbi1zdHlsZWAsIGBidXR0b24taG9sbG93LXN0eWxlYCBhbmQgYGJ1dHRvbi1jbGVhci1zdHlsZWAgZm9yIGVmZmVjdHMgb2YgdmlzdWFsIHN0eWxpbmcgcGFyYW1ldGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRmaWxsIFskYnV0dG9uLWZpbGxdIC0gVHlwZSBvZiBmaWxsaW5nIGJldHdlZW4gYGhvbGxvd2AgYW5kIGBjbGVhcmAuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRidXR0b24tYmFja2dyb3VuZF0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQtaG92ZXIgWyRidXR0b24tYmFja2dyb3VuZC1ob3Zlcl0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIC1cbkBtaXhpbiBidXR0b24tZmlsbC1zdHlsZShcbiAgJGZpbGw6ICRidXR0b24tZmlsbCxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yXG4pIHtcbiAgQGlmICRmaWxsID09IHNvbGlkIHtcbiAgICBAaW5jbHVkZSBidXR0b24tc3R5bGUoJGJhY2tncm91bmQsICRiYWNrZ3JvdW5kLWhvdmVyLCAkY29sb3IpO1xuICB9XG4gIEBlbHNlIGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdy1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbiAgQGVsc2UgaWYgJGZpbGwgPT0gY2xlYXIge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1jbGVhci1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGJ1dHRvbi1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZC1ob3ZlciBbJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgaG92ZXIgY29sb3IuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLXN0eWxlKFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzc1xuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIEBpZiAkYmFja2dyb3VuZC1ob3ZlciA9PSBhdXRvIHtcbiAgICAkYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJhY2tncm91bmQsICRsaWdodG5lc3M6ICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzcyk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGFuZCBkaXNhYmxlZCBzdGF0ZXNcbiAgJixcbiAgJi5kaXNhYmxlZCwgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQ6aG92ZXIsICZbZGlzYWJsZWRdOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzLCAmW2Rpc2FibGVkXTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBTZWUgbWl4aW4gYGJ1dHRvbi1ob2xsb3ctc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG5AbWl4aW4gYnV0dG9uLWhvbGxvdyB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgdmlzdWFsIHN0eWxlIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGFuZCBib3JkZXIgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkaG92ZXItbGlnaHRuZXNzIFskYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3NdIC0gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRib3JkZXItd2lkdGggWyRidXR0b24taG9sbG93LWJvcmRlci13aWR0aF0gLSBCb3JkZXIgd2lkdGggb2YgdGhlIGJ1dHRvbi5cbkBtaXhpbiBidXR0b24taG9sbG93LXN0eWxlKFxuICAkY29sb3I6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzLFxuICAkYm9yZGVyLXdpZHRoOiAkYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGhcbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3I7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3ItaG92ZXI7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgY2xlYXIgYnV0dG9uLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWNsZWFyLXN0eWxlYCBmb3IgdGhlIGZpbGxpbmcgc3R5bGVzLlxuQG1peGluIGJ1dHRvbi1jbGVhciB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGNsZWFyIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGNvbG9yIG9mIHRoZSBidXR0b24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGhvdmVyLWxpZ2h0bmVzcyBbJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzXSAtIENvbG9yIGxpZ2h0bmVzcyBvbiBob3Zlci5cbkBtaXhpbiBidXR0b24tY2xlYXItc3R5bGUoXG4gICRjb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkaG92ZXItbGlnaHRuZXNzOiAkYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3Ncbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cblxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGNvbG9yLWhvdmVyO1xuICB9XG59XG5cbi8vLyBBZGRzIGRpc2FibGVkIHN0eWxlcyB0byBhIGJ1dHRvbiBieSBmYWRpbmcgdGhlIGVsZW1lbnQgYW5kIHJlc2V0aW5nIHRoZSBjdXJzb3IuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcGFjaXR5IFskYnV0dG9uLW9wYWNpdHktZGlzYWJsZWRdIC0gT3BhY2l0eSBvZiB0aGUgZGlzYWJsZWQgYnV0dG9uLlxuQG1peGluIGJ1dHRvbi1kaXNhYmxlZChcbiAgJG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZFxuKSB7XG4gIG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8vIEFkZHMgYSBkcm9wZG93biBhcnJvdyB0byBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNpemUgWzAuNGVtXSAtIFNpemUgb2YgdGhlIGFycm93LiBXZSByZWNvbW1lbmQgdXNpbmcgYW4gYGVtYCB2YWx1ZSBzbyB0aGUgdHJpYW5nbGUgc2NhbGVzIHdoZW4gdXNlZCBpbnNpZGUgZGlmZmVyZW50IHNpemVzIG9mIGJ1dHRvbnMuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFt3aGl0ZV0gLSBDb2xvciBvZiB0aGUgYXJyb3cuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvZmZzZXQgWyRidXR0b24tcGFkZGluZ10gLSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBhcnJvdyBhbmQgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbi4gRGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIHJpZ2h0IHBhZGRpbmcgb2YgYSBidXR0b24gaXMuXG5AbWl4aW4gYnV0dG9uLWRyb3Bkb3duKFxuICAkc2l6ZTogMC40ZW0sXG4gICRjb2xvcjogJHdoaXRlLFxuICAkb2Zmc2V0OiBnZXQtc2lkZSgkYnV0dG9uLXBhZGRpbmcsIHJpZ2h0KVxuKSB7XG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHNpemUsICRjb2xvciwgZG93bik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMC40ZW07IC8vIEFsaWducyB0aGUgYXJyb3cgd2l0aCB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1yaWdodH07XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJG9mZnNldDtcbiAgfVxufVxuXG4vLy8gQWRkcyBhbGwgc3R5bGVzIGZvciBhIGJ1dHRvbi4gRm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIHN0eWxlcywgdXNlIHRoZSBpbmRpdmlkdWFsIGJ1dHRvbiBtaXhpbnMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFtmYWxzZV0gLSBTZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGJ1dHRvbiBmdWxsLXdpZHRoLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIFskYnV0dG9uLWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kLWhvdmVyIFskYnV0dG9uLWJhY2tncm91bmQtaG92ZXJdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uIG9uIGhvdmVyLiBTZXQgdG8gYGF1dG9gIHRvIGhhdmUgdGhlIG1peGluIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBob3ZlciBjb2xvci5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tY29sb3JdIC0gVGV4dCBjb2xvciBvZiB0aGUgYnV0dG9uLiBTZXQgdG8gYGF1dG9gIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBjb2xvciBiYXNlZCBvbiB0aGUgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHlsZSBbc29saWRdIC0gU2V0IHRvIGBob2xsb3dgIHRvIGNyZWF0ZSBhIGhvbGxvdyBidXR0b24uIFRoZSBjb2xvciBkZWZpbmVkIGluIGAkYmFja2dyb3VuZGAgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcmltYXJ5IGNvbG9yIG9mIHRoZSBidXR0b24uXG5AbWl4aW4gYnV0dG9uKFxuICAkZXhwYW5kOiBmYWxzZSxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yLFxuICAkc3R5bGU6ICRidXR0b24tZmlsbFxuKSB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1iYXNlO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbCgkc3R5bGUpO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkc3R5bGUsICRiYWNrZ3JvdW5kLCAkYmFja2dyb3VuZC1ob3ZlciwgJGNvbG9yKTtcblxuICBAaWYgJGV4cGFuZCB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1idXR0b24ge1xuICAuYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBidXR0b24oJHN0eWxlOiBub25lKTtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBmb250LXNpemU6ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmV4cGFuZGVkIHsgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDsgfVxuXG4gICAgQGlmICRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZCB7XG4gICAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBvbmx5KSB7XG4gICAgICAgICAgJi4jeyRzaXplfS1vbmx5LWV4cGFuZGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1leHBhbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAkc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBkb3duKSB7XG4gICAgICAgICAgICAmLiN7JHNpemV9LWRvd24tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoI3skc2l6ZX0pIHtcbiAgICAgICAgICAgICYuI3skc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvbGlkLCBob2xsb3cgJiBjbGVhciBzdHlsZXNcbiAgICBAZWFjaCAkZmlsbGluZyBpbiAoc29saWQgaG9sbG93IGNsZWFyKSB7XG4gICAgICAkc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkZmlsbGluZyk7XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcsICRjb2xvciwgYXV0bywgYXV0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAmLmRpc2FibGVkLCAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd24gYXJyb3dcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1kcm9wZG93bjtcblxuICAgICAgQGlmICRidXR0b24tZmlsbCA9PSBob2xsb3cge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuaG9sbG93LCAmLmNsZWFyIHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRidXR0b24tYmFja2dyb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1dHRvbiB3aXRoIGRyb3Bkb3duIGFycm93IG9ubHlcbiAgICAmLmFycm93LW9ubHk6OmFmdGVyIHtcbiAgICAgIHRvcDogLTAuMWVtO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIH1cbiAgfVxuXG4gIGEuYnV0dG9uIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b24tZ3JvdXBcbi8vLy9cblxuLy8vIE1hcmdpbiBmb3IgYnV0dG9uIGdyb3Vwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b25ncm91cC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3I6ICcuYnV0dG9uJyAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGJ1dHRvbnMgdGhhdCBjYW4gYmUgaW4gYW4gZXZlbi13aWR0aCBidXR0b24gZ3JvdXAuIChPbmx5IG5lZWRlZCB3aGVuICRnbG9iYWwtZmxleGJveDogZmFsc2U7KVxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDYgIWRlZmF1bHQ7XG5cbi8vLyBEZXRlcm1pbmVzIGlmICRidXR0b24tcmFkaXVzIGlzIGFwcGxpZWQgdG8gZWFjaCBidXR0b24gb3IgdGhlIGJ1dHRvbiBncm91cCBhcyBhIHdob2xlLiBVc2UgJGdsb2JhbC1yYWRpdXMgaW4gX3NldHRpbmdzLnNjc3MgdG8gY2hhbmdlIHJhZGl1cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBBZGQgc3R5bGVzIGZvciBhIGJ1dHRvbiBncm91cCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRjaGlsZC1zZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzcGFjaW5nIFskYnV0dG9uZ3JvdXAtc3BhY2luZ10gLSBTcGFjaW5nIGJldHdlZW4gYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAoXG4gICRjaGlsZC1zZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmdcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLWJvdHRvbTogJGJ1dHRvbmdyb3VwLW1hcmdpbjtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gRGlzYWJsZSBjbGVhcmZpeFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZm9udC1zaXplOiAwO1xuICB9XG5cbiAgI3skY2hpbGQtc2VsZWN0b3J9IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRzcGFjaW5nO1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBNYWtlIGJ1dHRvbnMgYm9uZGVkIHdpdGhvdXQgZ2FwIGJldHdlZW4gdGhlbS4gQm9yZGVycyBiZXR3ZWVuIGJ1dHRvbnMgYXJlIG1lcmdlZFxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcl0gLSBTZWxlY3RvciBmb3IgdGhlIGJ1dHRvbnMgaW5zaWRlIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1uby1nYXBzKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcixcbiAgJGJvcmRlci13aWR0aDogJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoXG4pIHtcbiAgI3skc2VsZWN0b3J9IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogcmVtLWNhbGMoLSRib3JkZXItd2lkdGgpO1xuXG4gICAgKyAjeyRzZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgZnVsbC13aWR0aCBidXR0b24gZ3JvdXAsIG1ha2luZyBlYWNoIGJ1dHRvbiBlcXVhbCB3aWR0aC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1leHBhbmQoXG4gICRzZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmcsXG4gICRjb3VudDogbnVsbFxuKSB7XG4gIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogLSRzcGFjaW5nO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIERpc2FibGUgY2xlYXJmaXhcbiAgICB9XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gT25lIGNoaWxkXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gI3skc3BhY2luZ30pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFR3byBvciBtb3JlIGNoaWxkcmVlblxuICAgICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkYnV0dG9uZ3JvdXAtZXhwYW5kLW1heCB7XG4gICAgICAgICY6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoI3skaX0pIHtcbiAgICAgICAgICAmLCAmOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKCN7JGl9KSB+ICN7JHNlbGVjdG9yfSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygje3BlcmNlbnRhZ2UoMSAvICRpKX0gLSAjeyRzcGFjaW5nfSk7XG4gICAgICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZyAqIC0kYnV0dG9uZ3JvdXAtZXhwYW5kLW1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFN0YWNrcyB0aGUgYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBVbi1zdGFja3MgdGhlIGJ1dHRvbnMgaW4gYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgdGhlIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAtdW5zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgQGlmIG5vdCAkYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2gge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJ1dHRvbi1ncm91cCB7XG4gIC5idXR0b24tZ3JvdXAge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cDtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0gI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgZm9udC1zaXplOiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBHcm91cFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLWV4cGFuZDtcbiAgICB9XG5cbiAgICAvLyBTb2xpZCwgaG9sbG93ICYgY2xlYXIgc3R5bGVzXG4gICAgQGVhY2ggJGZpbGxpbmcgaW4gKHNvbGlkIGhvbGxvdyBjbGVhcikge1xuICAgICAgJGJhc2Utc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skYmFzZS1zZWxlY3Rvcn0ge1xuICAgICAgICAvLyBEbyBub3QgZ2VuZXJhdGUgYnV0dG9uIGJhc2Ugc3R5bGVzIGZvciB0aGUgZGVmYXVsdCBmaWxsaW5nXG4gICAgICAgIEBpZigkYnV0dG9uLWZpbGwgIT0gJGZpbGxpbmcpIHtcbiAgICAgICAgICAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAkaW5kaXZpZHVhbC1zZWxlY3RvcjogaWYoJGJ1dHRvbi1maWxsID09ICRmaWxsaW5nLCBudWxsLCAnICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfS4jeyRuYW1lfScpO1xuXG4gICAgICAgICAgJi4jeyRuYW1lfSAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0sICN7JGluZGl2aWR1YWwtc2VsZWN0b3J9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1maWxsLXN0eWxlKCRmaWxsaW5nLCAkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi5uby1nYXBzIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1uby1nYXBzO1xuICAgIH1cblxuICAgICYuc3RhY2tlZCxcbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsLFxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1zdGFjaztcblxuICAgICAgJi5leHBhbmRlZCB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zdGFja2VkLWZvci1zbWFsbCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZ3JvdXAtdW5zdGFjaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC11bnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bS5leHBhbmRlZCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSBkb3duKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjbG9zZS1idXR0b25cbi8vLy9cblxuLy8vIERlZmF1bHQgcG9zaXRpb24gb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBgcmlnaHRgIG9yIGBsZWZ0YCwgYW5kIHRoZSBzZWNvbmQgdmFsdWUgc2hvdWxkIGJlIGB0b3BgIG9yIGBib3R0b21gLlxuLy8vIEB0eXBlIExpc3RcbiRjbG9zZWJ1dHRvbi1wb3NpdGlvbjogcmlnaHQgdG9wICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB6LWluZGV4IGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjbG9zZWJ1dHRvbi16LWluZGV4OiAxMCAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBzaXplIHRvIHVzZSBhcyBkZWZhdWx0XG4vLy8gQHR5cGUgU3RyaW5nXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tc2l6ZVxuLy8vIEBzZWUgJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsXG4kY2xvc2VidXR0b24tZGVmYXVsdC1zaXplOiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCAob3IgbGVmdCkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LWhvcml6b250YWw6IChcbiAgc21hbGw6IDAuNjZyZW0sXG4gIG1lZGl1bTogMXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUb3AgKG9yIGJvdHRvbSkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsOiAoXG4gIHNtYWxsOiAwLjMzZW0sXG4gIG1lZGl1bTogMC41cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIFNpemUocykgb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVXNlZCB0byBnZW5lcmF0ZSBzaXppbmcgbW9kaWZpZXJzLlxuLy8vIEB0eXBlIE51bWJlcnxNYXBcbiRjbG9zZWJ1dHRvbi1zaXplOiAoXG4gIHNtYWxsOiAxLjVlbSxcbiAgbWVkaXVtOiAyZW0sXG4pICFkZWZhdWx0O1xuXG4vLy8gVGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBjbG9zZSBidXR0b24uIEl0IGFmZmVjdHMgdGhlIHNwYWNpbmcgb2YgdGhlIGVsZW1lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gYmVpbmcgaG92ZXJlZCBvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yLWhvdmVyOiAkYmxhY2sgIWRlZmF1bHQ7XG5cblxuLy8vIEdldCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgY2xvc2UgYnV0dG9uLiBJZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQuIElmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIGNvbmZpZyBtYXAgYW5kIHRoZSBtYXAgaGFzIHRoZSBrZXkgYCRzaXplYCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkdmFsdWUgLSBBIG51bWJlciBvciBtYXAgdGhhdCByZXByZXNlbnRzIHRoZSBzaXplIG9yIHBvc2l0aW9uIHZhbHVlKHMpIG9mIHRoZSBjbG9zZSBidXR0b24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBjbG9zZSBidXR0b24gdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSBUaGUgZ2l2ZW4gbnVtYmVyIG9yIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgbWFwLlxuQGZ1bmN0aW9uIC16Zi1nZXQtc2l6ZS12YWwoJHZhbHVlLCAkc2l6ZSkge1xuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgLy8gSWYgaXQgaXMsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzaXplIG5hbWUgZXhpc3RzIGluIHRoZSB2YWx1ZSBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJHZhbHVlLCAkc2l6ZSkge1xuICAgIC8vIElmIGl0IGRvZXMsIHJldHVybiB0aGUgdmFsdWVcbiAgICBAcmV0dXJuIG1hcC1nZXQoJHZhbHVlLCAkc2l6ZSk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGEgY2xvc2UgYnV0dG9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgW21lZGl1bV0gLSBUaGUgc2l6ZSB0byB1c2UuIFNldCB0byBgc21hbGxgIHRvIGNyZWF0ZSBhIHNtYWxsIGNsb3NlIGJ1dHRvbi4gVGhlICdtZWRpdW0nIHZhbHVlcyBkZWZpbmVkIGluIGAkY2xvc2VidXR0b24tKmAgdmFyaWFibGVzIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgY2xvc2UgYnV0dG9uLlxuQG1peGluIGNsb3NlLWJ1dHRvbi1zaXplKCRzaXplKSB7XG4gICR4OiBudGgoJGNsb3NlYnV0dG9uLXBvc2l0aW9uLCAxKTtcbiAgJHk6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDIpO1xuXG4gICN7JHh9OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbCwgJHNpemUpO1xuICAjeyR5fTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsLCAkc2l6ZSk7XG4gIGZvbnQtc2l6ZTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tc2l6ZSwgJHNpemUpO1xuICBsaW5lLWhlaWdodDogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tbGluZWhlaWdodCwgJHNpemUpO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY2xvc2UgYnV0dG9uLCB1c2luZyB0aGUgc3R5bGVzIGluIHRoZSBzZXR0aW5ncyB2YXJpYWJsZXMuXG5AbWl4aW4gY2xvc2UtYnV0dG9uIHtcbiAgJHg6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDEpO1xuICAkeTogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMik7XG5cbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICRjbG9zZWJ1dHRvbi16LWluZGV4O1xuICBjb2xvcjogJGNsb3NlYnV0dG9uLWNvbG9yO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1jbG9zZS1idXR0b24ge1xuICAuY2xvc2UtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBjbG9zZS1idXR0b247XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIGFuZCBhIGNsYXNzIGZvciBlYWNoIHNpemVcbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJGNsb3NlYnV0dG9uLXNpemUge1xuICAgICAgQGF0LXJvb3Qge1xuICAgICAgICAlemYtY2xvc2UtYnV0dG9uLS0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgY2xvc2UtYnV0dG9uLXNpemUoJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAZXh0ZW5kICV6Zi1jbG9zZS1idXR0b24tLSN7JG5hbWV9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBieSBkZWZhdWx0IHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgZGVmYXVsdCBzaXplXG4gICAgQGV4dGVuZCAlemYtY2xvc2UtYnV0dG9uLS0jeyRjbG9zZWJ1dHRvbi1kZWZhdWx0LXNpemV9O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbGFiZWxcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRsYWJlbC1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXBhZGRpbmc6IDAuMzMzMzNyZW0gMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgb2YgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBHZW5lcmF0ZXMgYmFzZSBzdHlsZXMgZm9yIGEgbGFiZWwuXG5AbWl4aW4gbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6ICRsYWJlbC1wYWRkaW5nO1xuXG4gIGJvcmRlci1yYWRpdXM6ICRsYWJlbC1yYWRpdXM7XG5cbiAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1sYWJlbCB7XG4gIC5sYWJlbCB7XG4gICAgQGluY2x1ZGUgbGFiZWw7XG5cbiAgICBiYWNrZ3JvdW5kOiAkbGFiZWwtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkbGFiZWwtcGFsZXR0ZSB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgICAgICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkY29sb3IsICgkbGFiZWwtY29sb3IsICRsYWJlbC1jb2xvci1hbHQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHByb2dyZXNzIGJhciBjb250YWluZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAkcHJvZ3Jlc3MtaGVpZ2h0O1xuICBtYXJnaW4tYm90dG9tOiAkcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhY2tncm91bmQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIG1ldGVyIG9mIGEgcHJvZ3Jlc3MgYmFyLlxuQG1peGluIHByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGV4dCBpbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtbWV0ZXItdGV4dCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJHdoaXRlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRwcm9ncmVzcy1yYWRpdXM7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tcHJvZ3Jlc3MtYmFyIHtcbiAgLy8gUHJvZ3Jlc3MgYmFyXG4gIC5wcm9ncmVzcyB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtY29udGFpbmVyO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElubmVyIG1ldGVyXG4gIC5wcm9ncmVzcy1tZXRlciB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtbWV0ZXI7XG4gIH1cblxuICAvLyBJbm5lciBtZXRlciB0ZXh0XG4gIC5wcm9ncmVzcy1tZXRlci10ZXh0IHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1tZXRlci10ZXh0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vIFtUT0RPXSBDaGVjayBob3cgcGx1Z2luIGNvbmZpcm1zIGRpc2FibGVkIG9yIHZlcnRpY2FsIHN0YXR1c1xuLy8gW1RPRE9dIENoZWNrIGlmIHRyYW5zaXRpb246IGFsbDsgaXMgbmVjZXNzYXJ5XG5cbi8vLy9cbi8vLyBAZ3JvdXAgc2xpZGVyXG4vLy8vXG5cbi8vLyBEZWZhdWx0IHNsaWRlciB3aWR0aCBvZiBhIHZlcnRpY2FsIHNsaWRlci4gKERvZXNuJ3QgYXBwbHkgdG8gdGhlIG5hdGl2ZSBzbGlkZXIuKVxuLy8vIEB0eXBlIE51bWJlclxuJHNsaWRlci13aWR0aC12ZXJ0aWNhbDogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBzbGlkZXIgaGFuZGxlIGFuZCBmaWxsLiAoRG9lc24ndCBhcHBseSB0byB0aGUgbmF0aXZlIHNsaWRlci4pXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHNsaWRlci10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciBzbGlkZXJzLlxuQG1peGluIHNsaWRlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogJHNsaWRlci1oZWlnaHQ7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDIuMjVyZW07XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1iYWNrZ3JvdW5kO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3IgYWN0aXZlIGZpbGwgZm9yIHNsaWRlcnMuXG5AbWl4aW4gc2xpZGVyLWZpbGwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkc2xpZGVyLWhlaWdodDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWZpbGwtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciB0aGUgc2xpZGVyIGhhbmRsZXMuXG5AbWl4aW4gc2xpZGVyLWhhbmRsZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgQGluY2x1ZGUgdmVydGljYWwtY2VudGVyO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcblxuICBib3JkZXItcmFkaXVzOiAkc2xpZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1oYW5kbGUtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzY2FsZS1jb2xvcigkc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKTtcbiAgfVxuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuQG1peGluIHNsaWRlci1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6ICRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuQG1peGluIHNsaWRlci12ZXJ0aWNhbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItd2lkdGgtdmVydGljYWw7XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuXG4gIC5zbGlkZXItZmlsbCB7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkc2xpZGVyLXdpZHRoLXZlcnRpY2FsO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcbiAgICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zbGlkZXIge1xuICAvLyBDb250YWluZXJcbiAgLnNsaWRlciB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIEZpbGwgYXJlYVxuICAuc2xpZGVyLWZpbGwge1xuICAgIEBpbmNsdWRlIHNsaWRlci1maWxsO1xuICB9XG5cbiAgLy8gRHJhZ2dhYmxlIGhhbmRsZVxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWhhbmRsZTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gIC5zbGlkZXIuZGlzYWJsZWQsXG4gIC5zbGlkZXJbZGlzYWJsZWRdIHtcbiAgICBAaW5jbHVkZSBzbGlkZXItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBWZXJ0aWNhbCBzbGlkZXJcbiAgLnNsaWRlci52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gUlRMIHN1cHBvcnRcbiAgQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsIHtcbiAgICAuc2xpZGVyOm5vdCgudmVydGljYWwpIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHN3aXRjaFxuLy8vL1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGFjdGl2ZSBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2gsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0OiAycmVtICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgc3dpdGNoIHdpdGggLnRpbnkgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2ggd2l0aCAuc21hbGwgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbSAhZGVmYXVsdDtcblxuLy8vIEhlaWdodCBvZiBhIHN3aXRjaCB3aXRoIC5sYXJnZSBjbGFzcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIG9mIHRoZSBzd2l0Y2hcbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIGJvcmRlciBhcm91bmQgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzd2l0Y2ggY29udGFpbmVyIGFuZCBwYWRkbGUuXG4vLy8gQHR5cGUgQ29sb3JcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgYmV0d2VlbiBhIHN3aXRjaCBwYWRkbGUgYW5kIHRoZSBlZGdlIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtb2Zmc2V0OiAwLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gYm9yZGVyIHJhZGl1cyBvZiB0aGUgc3dpdGNoIHBhZGRsZVxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHN3aXRjaCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gT3BhY2l0eSBvZiBhIGRpc2FibGVkIHN3aXRjaC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtb3BhY2l0eS1kaXNhYmxlZDogLjUgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgZm9yIGEgZGlzYWJsZWQgc3dpdGNoLlxuLy8vIEB0eXBlIEN1cnNvclxuJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkICFkZWZhdWx0O1xuXG4vLyBtYWtlIHRoZW0gdmFyaWFibGVzXG4vLyBhc2sgYWJvdXQgYWNjZXNzaWJpbGl0eSBvbiBsYWJlbFxuLy8gY2hhbmdlIGNsYXNzIG5hbWUgZm9yIHRleHRcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBjb250YWluZXIgY2xhc3MuXG5AbWl4aW4gc3dpdGNoLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHN3aXRjaC1tYXJnaW47XG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gVGhlc2UgcHJvcGVydGllcyBjYXNjYWRlIGRvd24gdG8gdGhlIHN3aXRjaCB0ZXh0XG4gIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR3aGl0ZTtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBpbnB1dC4gQXBwbHkgdGhpcyB0byBhbiBgPGlucHV0PmAgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYmFja2dyb3VuZCBhbmQgcGFkZGxlIG9mIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIGEgYDxsYWJlbD5gIHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtcGFkZGxlIHtcbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHN3aXRjaC1wYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRzd2l0Y2gtcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWFjdGl2ZS1vZmZlc3Q6ICRzd2l0Y2gtd2lkdGggLSAkcGFkZGxlLXdpZHRoIC0gJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIGJvcmRlci1yYWRpdXM6ICRzd2l0Y2gtcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkc3dpdGNoLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzd2l0Y2gtcGFkZGxlLXRyYW5zaXRpb247XG5cbiAgLy8gUmVzZXR0aW5nIHRoZXNlIDxsYWJlbD4gcHJlc2V0cyBzbyB0eXBlIHN0eWxlcyBjYXNjYWRlIGRvd25cbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBOZWVkZWQgdG8gb3ZlcnJpZGUgc3BlY2lmaWNpdHlcbiAgaW5wdXQgKyAmIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBUaGUgcGFkZGxlIGl0c2VsZlxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1wYWRkbGUtcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ7XG4gICAgdHJhbnNpdGlvbjogJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgdmlzdWFsIHN0eWxlIHdoZW4gdGhlIHN3aXRjaCBpcyBhY3RpdmVcbiAgaW5wdXQ6Y2hlY2tlZCB+ICYge1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbmRpY2F0ZSBhIGRpc2FibGVkIHN3aXRjaFxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGN1cnNvcjogJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogJHN3aXRjaC1vcGFjaXR5LWRpc2FibGVkO1xuICB9XG5cbiAgaW5wdXQ6Zm9jdXMgfiAmIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIH1cbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIGFjdGl2ZS9pbmFjdGl2ZSB0ZXh0IGluc2lkZSBhIHN3aXRjaC4gQXBwbHkgdGhpcyB0byB0ZXh0IGVsZW1lbnRzIGluc2lkZSB0aGUgc3dpdGNoIGA8bGFiZWw+YC5cbkBtaXhpbiBzd2l0Y2gtdGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWN0aXZlIHN0YXRlIHRleHQgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC10ZXh0LWFjdGl2ZSB7XG4gICN7JGdsb2JhbC1sZWZ0fTogOCU7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5hY3RpdmUgc3RhdGUgdGV4dCB3aXRoaW4gYSBzd2l0Y2guXG5AbWl4aW4gc3dpdGNoLXRleHQtaW5hY3RpdmUge1xuICAjeyRnbG9iYWwtcmlnaHR9OiAxNSU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vLy8gQ2hhbmdlcyB0aGUgc2l6ZSBvZiBhIHN3aXRjaCBieSBtb2RpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGJvZHkgYW5kIHBhZGRsZS4gQXBwbHkgdGhpcyB0byBhIHN3aXRjaCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmb250LXNpemUgWzFyZW1dIC0gRm9udCBzaXplIG9mIGxhYmVsIHRleHQgd2l0aGluIHRoZSBzd2l0Y2guXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzd2l0Y2gtaGVpZ2h0IFsycmVtXSAtIEhlaWdodCBvZiB0aGUgc3dpdGNoIGJvZHkuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRwYWRkbGUtb2Zmc2V0IFswLjI1cmVtXSAtIFNwYWNpbmcgYmV0d2VlbiB0aGUgc3dpdGNoIHBhZGRsZSBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHN3aXRjaCBib2R5LlxuQG1peGluIHN3aXRjaC1zaXplKFxuICAkZm9udC1zaXplOiAxcmVtLFxuICAkc3dpdGNoLWhlaWdodDogMnJlbSxcbiAgJHBhZGRsZS1vZmZzZXQ6IDAuMjVyZW1cbikge1xuXG4gICRzd2l0Y2gtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0ICogMjtcbiAgJHBhZGRsZS13aWR0aDogJHN3aXRjaC1oZWlnaHQgLSAoJHBhZGRsZS1vZmZzZXQgKiAyKTtcbiAgJHBhZGRsZS1oZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRwYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtYWN0aXZlLW9mZmVzdDogJHN3aXRjaC13aWR0aCAtICRwYWRkbGUtd2lkdGggLSAkcGFkZGxlLW9mZnNldDtcblxuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICB3aWR0aDogJHN3aXRjaC13aWR0aDtcbiAgICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgdG9wOiAkcGFkZGxlLW9mZnNldDtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtb2Zmc2V0O1xuICAgIHdpZHRoOiAkcGFkZGxlLXdpZHRoO1xuICAgIGhlaWdodDogJHBhZGRsZS1oZWlnaHQ7XG4gIH1cblxuICBpbnB1dDpjaGVja2VkIH4gLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zd2l0Y2gge1xuICAvLyBDb250YWluZXIgY2xhc3NcbiAgLnN3aXRjaCB7XG4gICAgaGVpZ2h0OiAkc3dpdGNoLWhlaWdodDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtY29udGFpbmVyO1xuICB9XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50XG4gIC5zd2l0Y2gtaW5wdXQge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1pbnB1dDtcbiAgfVxuXG4gIC8vIDxsYWJlbD4gZWxlbWVudFxuICAuc3dpdGNoLXBhZGRsZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXBhZGRsZTtcbiAgfVxuXG4gIC8vIEJhc2UgbGFiZWwgdGV4dCBzdHlsZXNcbiAgJXN3aXRjaC10ZXh0IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dDtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAuc3dpdGNoLWFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtYWN0aXZlO1xuICB9XG5cbiAgLy8gSW5hY3RpdmUgbGFiZWwgdGV4dCBzdHlsZXNcbiAgLnN3aXRjaC1pbmFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtaW5hY3RpdmU7XG4gIH1cblxuICAvLyBTd2l0Y2ggc2l6ZXNcbiAgLnN3aXRjaC50aW55IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMCksICRzd2l0Y2gtaGVpZ2h0LXRpbnksICRzd2l0Y2gtcGFkZGxlLW9mZnNldCk7XG4gIH1cblxuICAuc3dpdGNoLnNtYWxsIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMiksICRzd2l0Y2gtaGVpZ2h0LXNtYWxsLCAkc3dpdGNoLXBhZGRsZS1vZmZzZXQpO1xuICB9XG5cbiAgLnN3aXRjaC5sYXJnZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXNpemUocmVtLWNhbGMoMTYpLCAkc3dpdGNoLWhlaWdodC1sYXJnZSwgJHN3aXRjaC1wYWRkbGUtb2Zmc2V0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFibGVcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIHRhYmxlIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGUgICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzY2FsZSBmb3IgZGFya2VuaW5nIHRoZSBzdHJpcGVkIHRhYmxlIHJvd3MgYW5kIHRoZSB0YWJsZSBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtY29sb3Itc2NhbGU6IDUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGFibGUgYm9yZGVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFibGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtcGFkZGluZzogcmVtLWNhbGMoOCAxMCAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNjYWxlIGZvciBkYXJrZW5pbmcgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtaG92ZXItc2NhbGU6IDIlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBzdGFuZGFyZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2Ygc3RyaXBlZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSkgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIHRhYmxlcyBhcmUgc3RyaXBlZCBieSBkZWZhdWx0IGFuZCBhbiAudW5zdHJpcGVkIGNsYXNzIGlzIGNyZWF0ZWQuIElmIGBmYWxzZWAsIGEgLnN0cmlwZWQgY2xhc3MgaXMgY3JlYXRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3Igc3RyaXBlZCByb3dzLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIHN0cmlwZSBvbiByb3dzIG9mIHRoZSB0YWJsZXMsIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGFuZCBmb290ZXIuIElmIGV2ZW4sIHRoZSBldmVuIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgb2RkLCB0aGUgb2RkIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgZW1wdHksIG9yIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRhYmxlIHJvd3Mgd2lsbCBoYXZlIG5vIHN0cmlwaW5nLlxuLy8vIEB0eXBlIEtleXdvcmRcbiR0YWJsZS1zdHJpcGU6IGV2ZW4gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWFkZXIgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWhlYWQtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSAvIDIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBoZWFkZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgZm9vdGVyIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1mb290LWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBmb290ZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBoZWFkZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1oZWFkLWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvb3Rlci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIGhlYWRlciB3aGVuIHVzaW5nIHN0YWNrZWQgdGFibGVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHN0YWNrZWQgdGFibGUgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0YWJsZS1zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGU6ICR0YWJsZS1zdHJpcGUpIHtcbiAgdHIge1xuICAgIC8vIElmIHN0cmlwZSBpcyBzZXQgdG8gZXZlbiwgZGFya2VuIHRoZSBldmVuIHJvd3MuXG4gICAgQGlmICRzdHJpcGUgPT0gZXZlbiB7XG4gICAgICAmOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc3RyaXBlIGlzIHNldCB0byBvZGQsIGRhcmtlbiB0aGUgb2RkIHJvd3MuXG4gICAgQGVsc2UgaWYgJHN0cmlwZSA9PSBvZGQge1xuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiAtemYtdGFibGUtdW5zdHJpcGUoKSB7XG4gIHRyIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICR0YWJsZS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZTogJHRhYmxlLXN0cmlwZSwgJGlzLXN0cmlwZWQ6ICR0YWJsZS1pcy1zdHJpcGVkKSB7XG4gIHRoZWFkLFxuICB0Ym9keSxcbiAgdGZvb3Qge1xuICAgIGJvcmRlcjogJHRhYmxlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC8vIENhcHRpb25cbiAgY2FwdGlvbiB7XG4gICAgcGFkZGluZzogJHRhYmxlLXBhZGRpbmc7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4gIH1cblxuICAvLyBUYWJsZSBoZWFkXG4gIHRoZWFkIHtcbiAgICBiYWNrZ3JvdW5kOiAkdGFibGUtaGVhZC1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkdGFibGUtaGVhZC1mb250LWNvbG9yO1xuICB9XG5cbiAgLy8gVGFibGUgZm9vdFxuICB0Zm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHRhYmxlLWZvb3QtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRhYmxlLWZvb3QtZm9udC1jb2xvcjtcbiAgfVxuXG4gIC8vIFRhYmxlIGhlYWQgYW5kIGZvb3RcbiAgdGhlYWQsXG4gIHRmb290IHtcbiAgICAvLyBSb3dzIHdpdGhpbiBoZWFkIGFuZCBmb290XG4gICAgdHIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gQ2VsbHMgd2l0aGluIGhlYWQgYW5kIGZvb3RcbiAgICB0aCxcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiAkdGFibGUtcGFkZGluZztcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuICAgICAgdGV4dC1hbGlnbjogI3skZ2xvYmFsLWxlZnR9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFRhYmxlIHJvd3NcbiAgdGJvZHkge1xuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6ICR0YWJsZS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRhYmxlcyBhcmUgc3RyaXBlZFxuICBAaWYgJGlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgdGJvZHkge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLXN0cmlwZSgkc3RyaXBlKTtcbiAgICB9XG5cbiAgICAmLnVuc3RyaXBlZCB7XG4gICAgICB0Ym9keSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS11bnN0cmlwZSgpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0YWJsZXMgYXJlIG5vdCBzdHJpcGVkXG4gIEBlbHNlIGlmICRpcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICB0Ym9keSB7XG4gICAgICBAaW5jbHVkZSAtemYtdGFibGUtdW5zdHJpcGUoKTtcbiAgICB9XG5cbiAgICAmLnN0cmlwZWQge1xuICAgICAgdGJvZHkge1xuICAgICAgICBAaW5jbHVkZSAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlcy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHJpcGUgWyR0YWJsZS1zdHJpcGVdIC0gVXNlcyBrZXl3b3JkcyBldmVuLCBvZGQsIG9yIG5vbmUgdG8gZGFya2VuIHJvd3Mgb2YgdGhlIHRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBldmVuLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJG5lc3QgW2ZhbHNlXSAtIE5lZWRlZCBpZiB5b3Ugb25seSB3YW50IHRvIGFwcGx5IHRoaXMgdG8gYSBzcGVjaWZpYyB0YWJsZS5cbkBtaXhpbiB0YWJsZShcbiAgJHN0cmlwZTogJHRhYmxlLXN0cmlwZSxcbiAgJG5lc3Q6IGZhbHNlXG4pIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuICBAaWYgJG5lc3Qge1xuICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBhdC1yb290IHtcbiAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHRoZSBhYmlsaXR5IHRvIGhvcml6b250YWxseSBzY3JvbGwgdGhlIHRhYmxlIHdoZW4gdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIGhvcml6b250YWxseS5cbkBtaXhpbiB0YWJsZS1zY3JvbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi8vLyBTbGlnaHRseSBkYXJrZW5zIHRoZSB0YWJsZSByb3dzIG9uIGhvdmVyLlxuQG1peGluIHRhYmxlLWhvdmVyIHtcbiAgdGhlYWQgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgaGVhZGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtaGVhZC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGZvb3QgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgZm9vdGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtZm9vdC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGJvZHkgdHIge1xuICAgIC8vRGFya2VucyB0aGUgbm9uLXN0cmlwZWQgdGFibGUgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgQGlmICR0YWJsZS1pcy1zdHJpcGVkID09IHRydWUge1xuICAgIC8vIERhcmtlbnMgdGhlIGV2ZW4gc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBpZigkdGFibGUtc3RyaXBlID09IGV2ZW4pIHtcbiAgICAgICY6bm90KC51bnN0cmlwZWQpIHRyOm50aC1vZi10eXBlKGV2ZW4pOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1zdHJpcGUtaG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGFya2VucyB0aGUgb2RkIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAZWxzZSBpZigkdGFibGUtc3RyaXBlID09IG9kZCkge1xuICAgICAgJjpub3QoLnVuc3RyaXBlZCkgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmICR0YWJsZS1pcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICAvLyBEYXJrZW5zIHRoZSBldmVuIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAaWYoJHRhYmxlLXN0cmlwZSA9PSBldmVuKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUoZXZlbik6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXJrZW5zIHRoZSBvZGQgc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBlbHNlIGlmKCR0YWJsZS1zdHJpcGUgPT0gb2RkKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc3RhY2tlZCB0YWJsZS4gVXNlZnVsIGZvciBzbWFsbC1zY3JlZW4gbGF5b3V0cy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRoZWFkZXIgWyRzaG93LWhlYWRlci1mb3Itc3RhY2tlZF0gLSBTaG93IHRoZSBmaXJzdCB0aCBvZiBoZWFkZXIgd2hlbiBzdGFja2VkLlxuQG1peGluIHRhYmxlLXN0YWNrKCRoZWFkZXI6ICRzaG93LWhlYWRlci1mb3Itc3RhY2tlZCkge1xuICBAaWYgJGhlYWRlciB7XG4gICAgdGhlYWQge1xuICAgICAgdGgge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIHRoZWFkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGZvb3Qge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICB0cixcbiAgdGgsXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRhYmxlKCRuZXN0OiBmYWxzZSkge1xuICB0YWJsZSB7XG4gICAgQGluY2x1ZGUgdGFibGUoJG5lc3Q6ICRuZXN0KTtcbiAgfVxuXG4gIHRhYmxlLnN0YWNrIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0YWJsZS1zdGFjay1icmVha3BvaW50IGRvd24pIHtcbiAgICAgIEBpbmNsdWRlIHRhYmxlLXN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlLnNjcm9sbCB7XG4gICAgQGluY2x1ZGUgdGFibGUtc2Nyb2xsO1xuICB9XG5cbiAgdGFibGUuaG92ZXIge1xuICAgIEBpbmNsdWRlIHRhYmxlLWhvdmVyO1xuICB9XG5cbiAgLnRhYmxlLXNjcm9sbCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBpbXBvcnQgJ21hdGgnO1xuXG4kY29udHJhc3Qtd2FybmluZ3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbi8vLyBDaGVja3MgdGhlIGx1bWluYW5jZSBvZiBgJGNvbG9yYC5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIGNoZWNrIHRoZSBsdW1pbmFuY2Ugb2YuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbHVtaW5hbmNlIG9mIGAkY29sb3JgLlxuQGZ1bmN0aW9uIGNvbG9yLWx1bWluYW5jZSgkY29sb3IpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICRyZ2JhOiByZWQoJGNvbG9yKSwgZ3JlZW4oJGNvbG9yKSwgYmx1ZSgkY29sb3IpO1xuICAkcmdiYTI6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggMyB7XG4gICAgJHJnYjogbnRoKCRyZ2JhLCAkaSk7XG4gICAgJHJnYjogJHJnYiAvIDI1NTtcblxuICAgICRyZ2I6IGlmKCRyZ2IgPCAwLjAzOTI4LCAkcmdiIC8gMTIuOTIsIHBvdygoJHJnYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpKTtcblxuICAgICRyZ2JhMjogYXBwZW5kKCRyZ2JhMiwgJHJnYik7XG4gIH1cblxuICBAcmV0dXJuIDAuMjEyNiAqIG50aCgkcmdiYTIsIDEpICsgMC43MTUyICogbnRoKCRyZ2JhMiwgMikgKyAwLjA3MjIgKiBudGgoJHJnYmEyLCAzKTtcbn1cblxuLy8vIENoZWNrcyB0aGUgY29udHJhc3QgcmF0aW8gb2YgdHdvIGNvbG9ycy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjEgLSBGaXJzdCBjb2xvciB0byBjb21wYXJlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjIgLSBTZWNvbmQgY29sb3IgdG8gY29tcGFyZS5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBjb250cmFzdCByYXRpbyBvZiB0aGUgY29tcGFyZWQgY29sb3JzLlxuQGZ1bmN0aW9uIGNvbG9yLWNvbnRyYXN0KCRjb2xvcjEsICRjb2xvcjIpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICRsdW1pbmFuY2UxOiBjb2xvci1sdW1pbmFuY2UoJGNvbG9yMSkgKyAwLjA1O1xuICAkbHVtaW5hbmNlMjogY29sb3ItbHVtaW5hbmNlKCRjb2xvcjIpICsgMC4wNTtcbiAgJHJhdGlvOiAkbHVtaW5hbmNlMSAvICRsdW1pbmFuY2UyO1xuXG4gIEBpZiAkbHVtaW5hbmNlMiA+ICRsdW1pbmFuY2UxIHtcbiAgICAkcmF0aW86IDEgLyAkcmF0aW87XG4gIH1cblxuICAkcmF0aW86IHJvdW5kKCRyYXRpbyAqIDEwKSAvIDEwO1xuXG4gIEByZXR1cm4gJHJhdGlvO1xufVxuXG4vLy8gQ2hlY2tzIHRoZSBsdW1pbmFuY2Ugb2YgYCRiYXNlYCwgYW5kIHJldHVybnMgdGhlIGNvbG9yIGZyb20gYCRjb2xvcnNgIChsaXN0IG9mIGNvbG9ycykgdGhhdCBoYXMgdGhlIG1vc3QgY29udHJhc3QuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFzZSAtIENvbG9yIHRvIGNoZWNrIGx1bWluYW5jZS5cbi8vLyBAcGFyYW0ge0xpc3R9ICRjb2xvcnMgWygkd2hpdGUsICRibGFjayldIC0gQ29sb3JzIHRvIGNvbXBhcmUuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0b2xlcmFuY2UgWyRnbG9iYWwtY29sb3ItcGljay1jb250cmFzdC10b2xlcmFuY2VdIC0gQ29udHJhc3QgdG9sZXJhbmNlLlxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSB0aGUgY29sb3IgZnJvbSBgJGNvbG9yc2AgKGxpc3Qgb2YgY29sb3JzKSB0aGF0IGhhcyB0aGUgbW9zdCBjb250cmFzdC5cbkBmdW5jdGlvbiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYXNlLCAkY29sb3JzOiAoJHdoaXRlLCAkYmxhY2spLCAkdG9sZXJhbmNlOiAkZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlKSB7XG4gICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAxKSk7XG4gICRiZXN0OiBudGgoJGNvbG9ycywgMSk7XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCBsZW5ndGgoJGNvbG9ycykge1xuICAgICRjdXJyZW50LWNvbnRyYXN0OiBjb2xvci1jb250cmFzdCgkYmFzZSwgbnRoKCRjb2xvcnMsICRpKSk7XG4gICAgQGlmICgkY3VycmVudC1jb250cmFzdCAtICRjb250cmFzdCA+ICR0b2xlcmFuY2UpIHtcbiAgICAgICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAkaSkpO1xuICAgICAgJGJlc3Q6IG50aCgkY29sb3JzLCAkaSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkY29udHJhc3Qtd2FybmluZ3MgYW5kICRjb250cmFzdCA8IDMpIHtcbiAgICBAd2FybiBcIkNvbnRyYXN0IHJhdGlvIG9mICN7JGJlc3R9IG9uICN7JGJhc2V9IGlzIHByZXR0eSBiYWQsIGp1c3QgI3skY29udHJhc3R9XCI7XG4gIH1cblxuICBAcmV0dXJuICRiZXN0O1xufVxuXG4vLy8gU2NhbGVzIGEgY29sb3IgdG8gYmUgZGFya2VyIGlmIGl0J3MgbGlnaHQsIG9yIGxpZ2h0ZXIgaWYgaXQncyBkYXJrLiBVc2UgdGhpcyBmdW5jdGlvbiB0byB0aW50IGEgY29sb3IgYXBwcm9wcmlhdGUgdG8gaXRzIGxpZ2h0bmVzcy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIHNjYWxlLlxuLy8vIEBwYXJhbSB7UGVyY2VudGFnZX0gJHNjYWxlIFs1JV0gLSBBbW91bnQgdG8gc2NhbGUgdXAgb3IgZG93bi5cbi8vLyBAcGFyYW0ge1BlcmNlbnRhZ2V9ICR0aHJlc2hvbGQgWzQwJV0gLSBUaHJlc2hvbGQgb2YgbGlnaHRuZXNzIHRvIGNoZWNrIGFnYWluc3QuXG4vLy9cbi8vLyBAcmV0dXJucyB7Q29sb3J9IEEgc2NhbGVkIGNvbG9yLlxuQGZ1bmN0aW9uIHNtYXJ0LXNjYWxlKCRjb2xvciwgJHNjYWxlOiA1JSwgJHRocmVzaG9sZDogNDAlKSB7XG4gIEBpZiBsaWdodG5lc3MoJGNvbG9yKSA+ICR0aHJlc2hvbGQge1xuICAgICRzY2FsZTogLSRzY2FsZTtcbiAgfVxuICBAcmV0dXJuIHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJHNjYWxlKTtcbn1cblxuLy8vIEdldCBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHBhcmFtIHtrZXl9IGNvbG9yIGtleSBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuQGZ1bmN0aW9uIGdldC1jb2xvcigka2V5KSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCAka2V5KSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsICRrZXkpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ2dpdmVuICRrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiAkZm91bmRhdGlvbi1wYWxldHRlJztcbiAgfVxufVxuXG4vLy8gVHJhbnNmZXJzIHRoZSBjb2xvcnMgaW4gdGhlIGAkZm91bmRhdGlvbi1wYWxldHRlYCBtYXAgaW50byB2YXJpYWJsZXMsIHN1Y2ggYXMgYCRwcmltYXJ5LWNvbG9yYCBhbmQgYCRzZWNvbmRhcnktY29sb3JgLiBDYWxsIHRoaXMgbWl4aW4gYmVsb3cgdGhlIEdsb2JhbCBzZWN0aW9uIG9mIHlvdXIgc2V0dGluZ3MgZmlsZSB0byBwcm9wZXJseSBtaWdyYXRlIHlvdXIgY29kZWJhc2UuXG5AbWl4aW4gYWRkLWZvdW5kYXRpb24tY29sb3JzKCkge1xuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICAgICRwcmltYXJ5LWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRwcmltYXJ5LWNvbG9yOiAjMTc3OWJhICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHNlY29uZGFyeSkge1xuICAgICRzZWNvbmRhcnktY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgc2Vjb25kYXJ5KSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc2Vjb25kYXJ5LWNvbG9yOiAjNzY3Njc2ICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHN1Y2Nlc3MpIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBzdWNjZXNzKSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogIzNhZGI3NiAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCB3YXJuaW5nKSB7XG4gICAgJHdhcm5pbmctY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgd2FybmluZykgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJHdhcm5pbmctY29sb3I6ICNmZmFlMDAgIWdsb2JhbDtcbiAgfVxuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpIHtcbiAgICAkYWxlcnQtY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRhbGVydC1jb2xvcjogI2NjNGIzNyAhZ2xvYmFsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYmFkZ2Vcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJhZGdlLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRiYWRnZS1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGluc2lkZSBiYWRnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtcGFkZGluZzogMC4zZW0gIWRlZmF1bHQ7XG5cbi8vLyBNaW5pbXVtIHdpZHRoIG9mIGEgYmFkZ2UuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtbWlud2lkdGg6IDIuMWVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1mb250LXNpemU6IDAuNnJlbSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyB0aGUgYmFzZSBzdHlsZXMgZm9yIGEgYmFkZ2UuXG5AbWl4aW4gYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogJGJhZGdlLW1pbndpZHRoO1xuICBwYWRkaW5nOiAkYmFkZ2UtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgZm9udC1zaXplOiAkYmFkZ2UtZm9udC1zaXplO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJhZGdlIHtcbiAgLmJhZGdlIHtcbiAgICBAaW5jbHVkZSBiYWRnZTtcblxuICAgIGJhY2tncm91bmQ6ICRiYWRnZS1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkYmFkZ2UtY29sb3I7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRiYWRnZS1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gICAgICAgIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRjb2xvciwgKCRiYWRnZS1jb2xvciwgJGJhZGdlLWNvbG9yLWFsdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGJyZWFkY3J1bWJzXG4vLy8vXG5cbi8vLyBNYXJnaW4gYXJvdW5kIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luIDAgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTEpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGFjdGl2ZSBicmVhZGNydW1iIGxpbmsuXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWN1cnJlbnQ6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIE9wYWNpdHkgb2YgZGlzYWJsZWQgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBicmVhZGNydW1iIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBtYWtlcyBicmVhZGNydW1iIGxpbmtzIHVwcGVyY2FzZS5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2U6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFkZHMgYSBzZXBlcmF0b3IgYmV0d2VlbiBicmVhZGNydW1iIGxpbmtzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvcjogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gSWYgaXQgZXhpc3RzICRicmVhZGNydW1icy1pdGVtLXNsYXNoIGlzIHVzZWQgdG8gYnVpbGQgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gpIHtcbiAgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zbGFzaDtcbn1cblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJyAhZGVmYXVsdDtcblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IgaW4gcnRsIG1vZGUuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW0tcnRsOiAnXFxcXCcgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBicmVhZGNydW1iIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLyBJZiBpdCBleGlzdHMgJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3IgaXMgdXNlZCB0byBidWlsZCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbi5cbkBpZiB2YXJpYWJsZS1leGlzdHMoYnJlYWRjcnVtYnMtaXRlbS1zbGFzaC1jb2xvcikge1xuICAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I6ICRicmVhZGNydW1icy1pdGVtLXNsYXNoLWNvbG9yO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLCBhbG9uZyB3aXRoIHRoZSBzdHlsZXMgZm9yIHRoZSBgPGxpPmAgYW5kIGA8YT5gIGVsZW1lbnRzIGluc2lkZSBvZiBpdC5cbkBtaXhpbiBicmVhZGNydW1icy1jb250YWluZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luOiAkYnJlYWRjcnVtYnMtbWFyZ2luO1xuICBsaXN0LXN0eWxlOiBub25lO1xuXG4gIC8vIEl0ZW0gd3JhcHBlclxuICBsaSB7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1sZWZ0fTtcblxuICAgIGZvbnQtc2l6ZTogJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplO1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgIEBpZiAkYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2Uge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICBAaWYgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yIHtcbiAgICAgIC8vIE5lZWQgdG8gZXNjYXBlIHRoZSBiYWNrc2xhc2hcbiAgICAgICRzZXBhcmF0b3I6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gJ2x0cicsICRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItaXRlbS1ydGwpO1xuXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG1hcmdpbjogMCAkYnJlYWRjcnVtYnMtaXRlbS1tYXJnaW47XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICBjb250ZW50OiAkc2VwYXJhdG9yO1xuICAgICAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRicmVhZGNydW1icy1pdGVtLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAvLyBQYWdlIGxpbmtzXG4gIGEge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJyZWFkY3J1bWJzIHtcbiAgLmJyZWFkY3J1bWJzIHtcbiAgICBAaW5jbHVkZSBicmVhZGNydW1icy1jb250YWluZXI7XG5cbiAgICAuZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjYWxsb3V0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZmFkZSB2YWx1ZSBmb3IgY2FsbG91dCBiYWNrZ3JvdW5kcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjYWxsb3V0LWJhY2tncm91bmQtZmFkZTogODUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgc3R5bGUgZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIExpc3RcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FsbG91dC1tYXJnaW46IDAgMCAxcmVtIDAgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgQ2FsbG91dCBwYWRkaW5ncy5cbi8vLyBAdHlwZSBNYXBcbiRjYWxsb3V0LXNpemVzOiAoXG4gIHNtYWxsOiAwLjVyZW0sXG4gIGRlZmF1bHQ6IDFyZW0sXG4gIGxhcmdlOiAzcmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBjb2xvciBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGNhbGxvdXRzLCBpZiB0aGUgY2FsbG91dCBoYXMgYSBkYXJrIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3ItYWx0OiAkYm9keS1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgcmFkaXVzIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhbGxvdXQtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEFtb3VudCB0byB0aW50IGxpbmtzIHVzZWQgd2l0aGluIGNvbG9yZWQgcGFuZWxzLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbi8vLyBAdHlwZSBOdW1iZXIgfCBCb29sZWFuXG4kY2FsbG91dC1saW5rLXRpbnQ6IDMwJSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzaWMgc3R5bGVzIGZvciBhIGNhbGxvdXQsIGluY2x1ZGluZyBwYWRkaW5nIGFuZCBtYXJnaW4uXG5AbWl4aW4gY2FsbG91dC1iYXNlKCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJGNhbGxvdXQtbWFyZ2luO1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRjYWxsb3V0LXNpemVzLCBkZWZhdWx0KTtcblxuICBib3JkZXI6ICRjYWxsb3V0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGNhbGxvdXQtcmFkaXVzO1xuXG4gIC8vIFJlc3BlY3QgdGhlIHBhZGRpbmcsIGZvb2wuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgcXVpY2sgc3R5bGVzIGZvciBhIGNhbGxvdXQgdXNpbmcgYSBzaW5nbGUgY29sb3IgYXMgYSBiYXNlbGluZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRjYWxsb3V0LWJhY2tncm91bmRdIC0gQ29sb3IgdG8gdXNlLlxuQG1peGluIGNhbGxvdXQtc3R5bGUoJGNvbG9yOiAkY2FsbG91dC1iYWNrZ3JvdW5kKSB7XG4gICRiYWNrZ3JvdW5kOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRjYWxsb3V0LWJhY2tncm91bmQtZmFkZSk7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGNhbGxvdXQtZm9udC1jb2xvciwgJGNhbGxvdXQtZm9udC1jb2xvci1hbHQpKTtcbn1cblxuQG1peGluIGNhbGxvdXQtc2l6ZSgkcGFkZGluZykge1xuICBwYWRkaW5nLXRvcDogJHBhZGRpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmc7XG4gIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG59XG5cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhbGxvdXQuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskY2FsbG91dC1iYWNrZ3JvdW5kXSAtIENvbG9yIHRvIHVzZS5cbkBtaXhpbiBjYWxsb3V0KCRjb2xvcjogJGNhbGxvdXQtYmFja2dyb3VuZCkge1xuICBAaW5jbHVkZSBjYWxsb3V0LWJhc2U7XG4gIEBpbmNsdWRlIGNhbGxvdXQtc3R5bGUoJGNvbG9yKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FsbG91dCB7XG4gIC5jYWxsb3V0IHtcbiAgICBAaW5jbHVkZSBjYWxsb3V0O1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXN0eWxlKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluIG1hcC1yZW1vdmUoJGNhbGxvdXQtc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXNpemUoJHBhZGRpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNhcmRcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYXJkcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlLlxuLy8vIEB0eXBlIExpc3RcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjYXJkIHNoYWRvdy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FyZC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTGlzdFxuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4uXG4vLy8gQHR5cGUgbnVtYmVyXG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgY29udGFpbmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgLSBmb250IGNvbG9yIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIC0gQm90dG9tIG1hcmdpbiBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRib3JkZXIgLSBCb3JkZXIgYXJvdW5kIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TGlzdH0gJHJhZGl1cyAtIGJvcmRlciByYWRpdXMgb2YgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtMaXN0fSAkc2hhZG93IC0gYm94IHNoYWRvdyBvZiB0aGUgY2FyZC5cbkBtaXhpbiBjYXJkLWNvbnRhaW5lcihcbiAgJGJhY2tncm91bmQ6ICRjYXJkLWJhY2tncm91bmQsXG4gICRjb2xvcjogJGNhcmQtZm9udC1jb2xvcixcbiAgJG1hcmdpbjogJGNhcmQtbWFyZ2luLWJvdHRvbSxcbiAgJGJvcmRlcjogJGNhcmQtYm9yZGVyLFxuICAkcmFkaXVzOiAkY2FyZC1ib3JkZXItcmFkaXVzLFxuICAkc2hhZG93OiAkY2FyZC1zaGFkb3dcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG5cbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcblxuICBib3JkZXI6ICRib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG5cbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgZGl2aWRlci5cbkBtaXhpbiBjYXJkLWRpdmlkZXIoXG4gICRiYWNrZ3JvdW5kOiAkY2FyZC1kaXZpZGVyLWJhY2tncm91bmQsXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAwIDEgYXV0bztcbiAgfVxuXG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgc2VjdGlvbi5cbkBtaXhpbiBjYXJkLXNlY3Rpb24oXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gIH1cblxuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FyZCB7XG4gIC5jYXJkIHtcbiAgICBAaW5jbHVkZSBjYXJkLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC5jYXJkLWRpdmlkZXIge1xuICAgIEBpbmNsdWRlIGNhcmQtZGl2aWRlcjtcbiAgfVxuXG4gIC5jYXJkLXNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIGNhcmQtc2VjdGlvbjtcbiAgfVxuXG4gIC8vIEZvciBJRSAxMSAtIEZsZXhidWdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncy9pc3N1ZXMvNzVcbiAgLmNhcmQtaW1hZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duXG4vLy8vXG5cbi8vLyBQYWRkaW5nIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWZvbnQtc2l6ZTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFdpZHRoIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bi13aWR0aDogMzAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgZHJvcGRvd24gcGFuZXMuIEVhY2ggc2l6ZSBpcyBhIENTUyBjbGFzcyB5b3UgY2FuIGFwcGx5LlxuLy8vIEB0eXBlIE1hcFxuJGRyb3Bkb3duLXNpemVzOiAoXG4gIHRpbnk6IDEwMHB4LFxuICBzbWFsbDogMjAwcHgsXG4gIGxhcmdlOiA0MDBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgYSBiYXNpYyBkcm9wZG93bi5cbkBtaXhpbiBkcm9wZG93bi1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgd2lkdGg6ICRkcm9wZG93bi13aWR0aDtcbiAgcGFkZGluZzogJGRyb3Bkb3duLXBhZGRpbmc7XG5cbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBib3JkZXI6ICRkcm9wZG93bi1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRkcm9wZG93bi1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1iYWNrZ3JvdW5kO1xuXG4gIGZvbnQtc2l6ZTogJGRyb3Bkb3duLWZvbnQtc2l6ZTtcblxuXG4gIC8vIEFsbG93IGFuIGludGVybWl0dGVudCBzdGF0ZSB0byBkbyBwb3NpdGlvbmluZyBiZWZvcmUgbWFraW5nIHZpc2libGUuXG4gICYuaXMtb3BlbmluZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZHJvcGRvd24ge1xuICAuZHJvcGRvd24tcGFuZSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tY29udGFpbmVyO1xuICB9XG5cbiAgQGVhY2ggJG5hbWUsICRzaXplIGluICRkcm9wZG93bi1zaXplcyB7XG4gICAgLmRyb3Bkb3duLXBhbmUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIHdpZHRoOiAkc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBwYWdpbmF0aW9uXG4vLy8vXG5cbi8vLyBGb250IHNpemUgb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIG9mIHRoZSBwYWdpbmF0aW9uIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGluc2lkZSBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKSAhZGVmYXVsdDtcblxuLy8vIFJpZ2h0IG1hcmdpbiB0byBzZXBhcmF0ZSBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1zcGFjaW5nOiByZW0tY2FsYygxKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtcyBvbiBob3Zlci5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtIGZvciB0aGUgY3VycmVudCBwYWdlLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtY3VycmVudDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBwYWdpbmF0aW9uIGl0ZW0gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhIGRpc2FibGVkIHBhZ2luYXRpb24gaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGVsbGlwc2lzIGluIGEgcGFnaW5hdGlvbiBtZW51LlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1lbGxpcHNpcy1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gSWYgYGZhbHNlYCwgZG9uJ3QgZGlzcGxheSBwYWdlIG51bWJlciBsaW5rcyBvbiBtb2JpbGUsIG9ubHkgbmV4dC9wcmV2aW91cyBsaW5rc1xuLy8vIGFuZCBvcHRpb25hbGx5IGN1cnJlbnQgcGFnZSBudW1iZXIuXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIG51bWJlciBvbiBtb2JpbGUgZXZlbiBpZiBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zYCBpcyBzZXQgdG8gYGZhbHNlYC5cbi8vLyBUaGlzIHBhcmFtZXRlciB3aWxsIG9ubHkgb3ZlcnJpZGUgdGhlIHZpc2liaWxpdHkgc2V0dGluZyBvZiB0aGUgY3VycmVudCBpdGVtIGZvciBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZTtgLFxuLy8vIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgY3VycmVudCBwYWdlIG51bWJlciB2aXNpYmlsaXR5IHdoZW4gYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtc2AgaXMgc2V0IHRvIGB0cnVlYC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYXJyb3dzIGFyZSBhZGRlZCB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbGlua3Mgb2YgcGFnaW5hdGlvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgcHJldmlvdXMgYXJyb3cgd2hlbiBgJHBhZ2luYXRpb24tYXJyb3dzYCBpcyBgdHJ1ZWBcbi8vLyBAdHlwZSBTdHJpbmdcbiRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzOiAnXFwwMEFCJyAhZGVmYXVsdDtcblxuLy8vIENvbnRlbnQgZm9yIHRoZSBuZXh0IGFycm93IHdoZW4gYCRwYWdpbmF0aW9uLWFycm93c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFnaW5hdGlvbi1hcnJvdy1uZXh0OiAnXFwwMEJCJyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHBhZ2luYXRpb24gY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIGEgYDx1bD5gLlxuQG1peGluIHBhZ2luYXRpb24tY29udGFpbmVyIChcbiAgJG1hcmdpbi1ib3R0b206ICRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b20sXG4gICRmb250LXNpemU6ICRwYWdpbmF0aW9uLWZvbnQtc2l6ZSxcbiAgJHNwYWNpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZyxcbiAgJHJhZGl1czogJHBhZ2luYXRpb24tcmFkaXVzLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWl0ZW0tY29sb3IsXG4gICRwYWRkaW5nOiAkcGFnaW5hdGlvbi1pdGVtLXBhZGRpbmcsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXJcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbi1ib3R0b207XG5cbiAgLy8gTGlzdCBpdGVtXG4gIGxpIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG5cbiAgICBAaWYgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cblxuICAgICAgQGlmICRwYWdpbmF0aW9uLW1vYmlsZS1jdXJyZW50LWl0ZW0ge1xuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBsaW5rc1xuICBhLFxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBpdGVtLiBBcHBseSB0aGlzIHRvIGFuIGA8YT5gLlxuQG1peGluIHBhZ2luYXRpb24taXRlbS1jdXJyZW50IChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtY3VycmVudDogJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQsXG4gICRjb2xvci1jdXJyZW50OiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnRcbikge1xuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtY3VycmVudDtcbiAgY29sb3I6ICRjb2xvci1jdXJyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gYW4gYDxhPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1pdGVtLWRpc2FibGVkIChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGNvbG9yOiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWRpc2FibGVkXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBlbGxpcHNpcyBmb3IgdXNlIGluIGEgcGFnaW5hdGlvbiBsaXN0LlxuQG1peGluIHBhZ2luYXRpb24tZWxsaXBzaXMgKFxuICAkcGFkZGluZzogJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbnRlbnQ6ICdcXDIwMjYnO1xuICBjb2xvcjogJGNvbG9yO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wYWdpbmF0aW9uIHtcbiAgLnBhZ2luYXRpb24ge1xuICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tY29udGFpbmVyO1xuXG4gICAgLmN1cnJlbnQge1xuICAgICAgQGluY2x1ZGUgcGFnaW5hdGlvbi1pdGVtLWN1cnJlbnQ7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24taXRlbS1kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tZWxsaXBzaXM7XG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWdpbmF0aW9uLWFycm93cyB7XG4gICAgLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuICAgIC5wYWdpbmF0aW9uLXByZXZpb3VzLmRpc2FibGVkOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDAuNXJlbTtcbiAgICAgIGNvbnRlbnQ6ICRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzO1xuICAgIH1cblxuICAgIC5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4gICAgLnBhZ2luYXRpb24tbmV4dC5kaXNhYmxlZDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMC41cmVtO1xuICAgICAgY29udGVudDogJHBhZ2luYXRpb24tYXJyb3ctbmV4dDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0b29sdGlwXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGN1cnNvciBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoYXMtdGlwLWN1cnNvcjogaGVscCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgb2YgdGhlIGRlZmluZWQgdGVybS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGJvdHRvbSBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIExpc3RcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIHRvb2x0aXAgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgdG9vbHRpcCBmb250LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9vbHRpcC1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIHRoZSB0b29sdGlwIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXggd2lkdGggZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIG9mIHRoZSB0b29sdGlwIHRleHQuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCBhIHNtYWxsZXIgZm9udCBzaXplIHRoYW4gdGhlIGJvZHkgY29weS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIHdpZHRoIGZvciB0b29sdGlwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIGhlaWdodCBmb3IgdG9vbHRpcHMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvb2x0aXAgd29yZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuQG1peGluIGhhcy10aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBib3JkZXItYm90dG9tOiAkaGFzLXRpcC1ib3JkZXItYm90dG9tO1xuICBmb250LXdlaWdodDogJGhhcy10aXAtZm9udC13ZWlnaHQ7XG4gIGN1cnNvcjogJGhhcy10aXAtY3Vyc29yO1xufVxuXG5AbWl4aW4gdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDEwMCUgKyAjeyR0b29sdGlwLXBpcC1oZWlnaHR9KTtcbiAgei1pbmRleDogMTIwMDtcblxuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogJHRvb2x0aXAtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJhY2tncm91bmQtY29sb3I7XG4gIGZvbnQtc2l6ZTogJHRvb2x0aXAtZm9udC1zaXplO1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAmLmJvdHRvbSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHVwKTtcbiAgICAgIGJvdHRvbTogMTAwJTtcbiAgICB9XG5cbiAgICAmLmFsaWduLWNlbnRlcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnRvcCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGRvd24pO1xuICAgICAgdG9wOiAxMDAlO1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgIH1cblxuICAgICYuYWxpZ24tY2VudGVyOjpiZWZvcmUge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHJpZ2h0KTtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnJpZ2h0IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCR0b29sdGlwLXBpcC13aWR0aCwgJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgbGVmdCk7XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXRvcDo6YmVmb3JlIHtcbiAgICBib3R0b206IGF1dG87XG4gICAgdG9wOiAxMCU7XG4gIH1cblxuICAmLmFsaWduLWJvdHRvbTo6YmVmb3JlIHtcbiAgICBib3R0b206IDEwJTtcbiAgICB0b3A6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLWxlZnQ6OmJlZm9yZSB7XG4gICAgbGVmdDogMTAlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodDo6YmVmb3JlIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAxMCU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9vbHRpcCB7XG4gIC5oYXMtdGlwIHtcbiAgICBAaW5jbHVkZSBoYXMtdGlwO1xuICB9XG5cbiAgLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIHRvb2x0aXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb25cbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY2NvcmRpb24gZ3JvdXAuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBhZGRzIHBsdXMgYW5kIG1pbnVzIGljb25zIHRvIHRoZSBzaWRlIG9mIGVhY2ggYWNjb3JkaW9uIHRpdGxlLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQ29udGVudCBmb3IgdGhlIHBsdXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLXBsdXMtY29udGVudDogJ1xcMDAyQicgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgbWludXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ6ICdcXDIwMTMnICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIGFjY29yZGlvbiB0aXRsZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIGZvciBpdGVtcyBpbiBhIE1lbnUuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGl0ZW1zIGluIGEgTWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIGFuIGFjY29yZGlvbiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24taXRlbS1wYWRkaW5nOiAxLjI1cmVtIDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1jb250ZW50LWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGFuIGFjY29yZGlvbiBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gdGhlIHNhbWUgZWxlbWVudCB0aGF0IGdldHMgYGRhdGEtYWNjb3JkaW9uYC5cbkBtaXhpbiBhY2NvcmRpb24tY29udGFpbmVyIChcbiAgJGJhY2tncm91bmQ6ICRhY2NvcmRpb24tYmFja2dyb3VuZFxuKSB7XG4gIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgJltkaXNhYmxlZF0ge1xuICAgIC5hY2NvcmRpb24tdGl0bGUge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWNjb3JkaW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gdGhlIGxpc3QgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHVsLlxuQG1peGluIGFjY29yZGlvbi1pdGVtIHtcbiAgJjpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgJGdsb2JhbC1yYWRpdXMgMCAwO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAkZ2xvYmFsLXJhZGl1cyAkZ2xvYmFsLXJhZGl1cztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiBhbiBhY2NvcmRpb24gaXRlbS4gQXBwbHkgdGhpcyB0byB0aGUgbGluayB3aXRoaW4gYW4gYWNjb3JkaW9uIGl0ZW0uXG5AbWl4aW4gYWNjb3JkaW9uLXRpdGxlIChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24taXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkYWNjb3JkaW9uLWl0ZW0tY29sb3IsXG4gICRib3JkZXI6ICRhY2NvcmRpb24tY29udGVudC1ib3JkZXIsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuXG4gIGJvcmRlcjogJGJvcmRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkOm5vdCguaXMtYWN0aXZlKSA+ICYge1xuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwICRnbG9iYWwtcmFkaXVzICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtaG92ZXI7XG4gIH1cblxuICBAaWYgJGFjY29yZGlvbi1wbHVzbWludXMge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAgICAgY29udGVudDogJGFjY29yZGlvbi1wbHVzLWNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLmlzLWFjdGl2ZSA+ICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAkYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYWNjb3JkaW9uIGNvbnRlbnQuIEFwcGx5IHRoaXMgdG8gdGhlIGNvbnRlbnQgcGFuZSBiZWxvdyBhbiBhY2NvcmRpb24gaXRlbSdzIHRpdGxlLlxuQG1peGluIGFjY29yZGlvbi1jb250ZW50IChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nLFxuICAkYm9yZGVyOiAkYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyLFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJGFjY29yZGlvbi1jb250ZW50LWNvbG9yXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgYm9yZGVyOiAkYm9yZGVyO1xuICBib3JkZXItYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcblxuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkID4gJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbiB7XG4gIC5hY2NvcmRpb24ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1jb250YWluZXI7XG4gIH1cblxuICAuYWNjb3JkaW9uLWl0ZW0ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1pdGVtO1xuICB9XG5cbiAgLmFjY29yZGlvbi10aXRsZSB7XG4gICAgQGluY2x1ZGUgYWNjb3JkaW9uLXRpdGxlO1xuICB9XG5cbiAgLmFjY29yZGlvbi1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tY29udGVudDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG1lZGlhLW9iamVjdFxuLy8vL1xuXG4vLy8gQm90dG9tIG1hcmdpbiBvZiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIExlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgb24gc2VjdGlvbnMgd2l0aGluIGEgbWVkaWEgb2JqZWN0LlxuLy8vIEB0eXBlIE51bWJlclxuJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gV2lkdGggb2YgaW1hZ2VzIHdpdGhpbiBhIG1lZGlhIG9iamVjdCwgd2hlbiB0aGUgb2JqZWN0IGlzIHN0YWNrZWQgdmVydGljYWxseS4gU2V0IHRvICdhdXRvJyB0byB1c2UgdGhlIGltYWdlJ3MgbmF0dXJhbCB3aWR0aC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbWVkaWEgb2JqZWN0IGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaWYoJGdsb2JhbC1mbGV4Ym94LCBmbGV4LCBibG9jayk7XG4gIG1hcmdpbi1ib3R0b206ICRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAmLnN0YWNrLWZvci0jeyQtemYtemVyby1icmVha3BvaW50fSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRpbmcgWyRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmddIC0gUGFkZGluZyBiZXR3ZWVuIHNlY3Rpb25zLlxuQG1peGluIG1lZGlhLW9iamVjdC1zZWN0aW9uKCRwYWRkaW5nOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLSN7JGdsb2JhbC1yaWdodH06ICRwYWRkaW5nO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkOm5vdCg6bnRoLWNoaWxkKDIpKSB7XG4gICAgcGFkZGluZy0jeyRnbG9iYWwtbGVmdH06ICRwYWRkaW5nO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5zdGFjay1mb3ItI3skLXpmLXplcm8tYnJlYWtwb2ludH0gJiB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkLXpmLXplcm8tYnJlYWtwb2ludCBvbmx5KSB7XG4gICAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgJi5tYWluLXNlY3Rpb24ge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICYubWlkZGxlIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJi5ib3R0b20ge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRvIHN0YWNrIHNlY3Rpb25zIG9mIGEgbWVkaWEgb2JqZWN0LiBBcHBseSB0aGlzIHRvIHRoZSBzZWN0aW9uIGVsZW1lbnRzLCBub3QgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3Qtc3RhY2sge1xuICBwYWRkaW5nOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZztcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBpbWcge1xuICAgIHdpZHRoOiAkbWVkaWFvYmplY3QtaW1hZ2Utd2lkdGgtc3RhY2tlZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1tZWRpYS1vYmplY3Qge1xuICAubWVkaWEtb2JqZWN0IHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3QtY29udGFpbmVyO1xuICB9XG5cbiAgLm1lZGlhLW9iamVjdC1zZWN0aW9uIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc2VjdGlvbjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG9yYml0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBhY3RpdmUgY29sb3IgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlhbWV0ZXIgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtZGlhbWV0ZXI6IDEuMnJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbWFyZ2luIGJldHdlZW4gT3JiaXQncyBidWxsZXRzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWJ1bGxldC1tYXJnaW46IDAuMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBzbGlkZSByZWdpb24gZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDogMC44cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIGZyb20gT3JiaXQncyBidWxsZXRzIHRvIHdoYXRldmVyIGNvbnRlbnQgbWF5IGx1cmsgYmVsb3cgaXQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC41KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjb250cm9scyB3aGVuIGhvdmVyZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGZvciBPcmJpdCdzIGNvbnRyb2xzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgei1pbmRleCBmb3IgT3JiaXQncyBjb250cm9scy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTAgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIG91dGVyIE9yYml0IHdyYXBwZXIuIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5uZXIgT3JiaXQgc2xpZGUgY29udGFpbmVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY29udGFpbmVyYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDsgLy8gUHJldmVudCBGT1VDIGJ5IG5vdCBzaG93aW5nIHVudGlsIEpTIHNldHMgaGVpZ2h0XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5kaXZpZHVhbCBzbGlkZXMgb2YgYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtc2xpZGVgIGNsYXNzLlxuQG1peGluIG9yYml0LXNsaWRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLm5vLW1vdGlvbnVpIHtcbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gb3JiaXQtZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc2xpZGUgY29udGFpbmluZyBhbiBpbWFnZS4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWltYWdlYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBvcmJpdCBzbGlkZSBjYXB0aW9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY2FwdGlvbmAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogJG9yYml0LWNhcHRpb24tcGFkZGluZztcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kO1xuICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kKTtcbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMgaW4gYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBgLm9yYml0LW5leHRgIGFuZCBgLm9yYml0LXByZXZpb3VzYCBjbGFzc2VzIGluIHRoZSBkZWZhdWx0IENTUy5cbkBtaXhpbiBvcmJpdC1jb250cm9sIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBAaW5jbHVkZSB2ZXJ0aWNhbC1jZW50ZXI7XG4gIHotaW5kZXg6ICRvcmJpdC1jb250cm9sLXppbmRleDtcbiAgcGFkZGluZzogJG9yYml0LWNvbnRyb2wtcGFkZGluZztcbiAgY29sb3I6ICR3aGl0ZTtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWNvbnRyb2wtYmFja2dyb3VuZC1ob3ZlcjtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1wcmV2aW91c2AgY2xhc3MuXG5AbWl4aW4gb3JiaXQtcHJldmlvdXMge1xuICAjeyRnbG9iYWwtbGVmdH06IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IG5leHQgYnV0dG9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtbmV4dGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtbmV4dCB7XG4gICN7JGdsb2JhbC1sZWZ0fTogYXV0bztcbiAgI3skZ2xvYmFsLXJpZ2h0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNvbnRhaW5lciBvZiBPcmJpdCBidWxsZXRzLiAvLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1idWxsZXRzYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1idWxsZXRzIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDtcbiAgbWFyZ2luLWJvdHRvbTogJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgYnV0dG9uIHtcbiAgICB3aWR0aDogJG9yYml0LWJ1bGxldC1kaWFtZXRlcjtcbiAgICBoZWlnaHQ6ICRvcmJpdC1idWxsZXQtZGlhbWV0ZXI7XG4gICAgbWFyZ2luOiAkb3JiaXQtYnVsbGV0LW1hcmdpbjtcblxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU7XG4gICAgfVxuXG4gICAgJi5pcy1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tb3JiaXQge1xuICAub3JiaXQge1xuICAgIEBpbmNsdWRlIG9yYml0LXdyYXBwZXI7XG4gIH1cblxuICAub3JiaXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jb250YWluZXI7XG4gIH1cblxuICAub3JiaXQtc2xpZGUge1xuICAgIEBpbmNsdWRlIG9yYml0LXNsaWRlO1xuICB9XG5cbiAgLm9yYml0LWZpZ3VyZSB7XG4gICAgQGluY2x1ZGUgb3JiaXQtZmlndXJlO1xuICB9XG5cbiAgLm9yYml0LWltYWdlIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1pbWFnZTtcbiAgfVxuXG4gIC5vcmJpdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jYXB0aW9uO1xuICB9XG5cbiAgJW9yYml0LWNvbnRyb2wge1xuICAgIEBpbmNsdWRlIG9yYml0LWNvbnRyb2w7XG4gIH1cblxuICAub3JiaXQtcHJldmlvdXMge1xuICAgIEBleHRlbmQgJW9yYml0LWNvbnRyb2w7XG4gICAgQGluY2x1ZGUgb3JiaXQtcHJldmlvdXM7XG4gIH1cblxuICAub3JiaXQtbmV4dCB7XG4gICAgQGV4dGVuZCAlb3JiaXQtY29udHJvbDtcbiAgICBAaW5jbHVkZSBvcmJpdC1uZXh0O1xuICB9XG5cbiAgLm9yYml0LWJ1bGxldHMge1xuICAgIEBpbmNsdWRlIG9yYml0LWJ1bGxldHM7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCByZXNwb25zaXZlLWVtYmVkXG4vLy8vXG5cbi8vLyBNYXJnaW4gYmVsb3cgYSByZXNwb25zaXZlIGVtYmVkIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEFzcGVjdCByYXRpb3MgdXNlZCB0byBkZXRlcm1pbmUgcGFkZGluZy1ib3R0b20gb2YgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXJzLlxuLy8vIEB0eXBlIE1hcFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zOiAoXG4gIGRlZmF1bHQ6IDQgYnkgMyxcbiAgd2lkZXNjcmVlbjogMTYgYnkgOSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd8TGlzdH0gJHJhdGlvIFtkZWZhdWx0XSAtIFJhdGlvIG9mIHRoZSBjb250YWluZXIuIENhbiBiZSBhIGtleSBmcm9tIHRoZSBgJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zYCBtYXAgb3IgYSBsaXN0IGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbkBtaXhpbiByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCkge1xuICBAaWYgdHlwZS1vZigkcmF0aW8pID09ICdzdHJpbmcnIHtcbiAgICAkcmF0aW86IG1hcC1nZXQoJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zLCAkcmF0aW8pO1xuICB9XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tO1xuICBwYWRkaW5nLWJvdHRvbTogcmF0aW8tdG8tcGVyY2VudGFnZSgkcmF0aW8pO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkIHtcbiAgLnJlc3BvbnNpdmUtZW1iZWQsXG4gIC5mbGV4LXZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCk7XG5cbiAgICAkcmF0aW9zOiBtYXAtcmVtb3ZlKCRyZXNwb25zaXZlLWVtYmVkLXJhdGlvcyxkZWZhdWx0KTtcblxuICAgIEBlYWNoICRuYW1lLCAkcmF0aW8gaW4gJHJhdGlvcyB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJhdGlvLXRvLXBlcmNlbnRhZ2UoJHJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0YWJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBvZiB0aGUgdGFiIGJhci5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGNvbG9yIG9mIHRhYiBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEFjdGl2ZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kLWFjdGl2ZTogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBBY3RpdmUgZm9udCBjb2xvciBvZiB0YWIgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIHRhYiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgaXRlbXMgaW4gYSBNZW51LlxuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBvZiBhIHRhYiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlclxuJHRhYi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1ib3JkZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byBhIGA8dWw+YC5cbkBtaXhpbiB0YWJzLWNvbnRhaW5lciAoXG4gICRtYXJnaW46ICR0YWItbWFyZ2luLFxuICAkYmFja2dyb3VuZDogJHRhYi1iYWNrZ3JvdW5kLFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbjogJG1hcmdpbjtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRhaW5lciB0byBoYXZlIHZlcnRpY2FsIHRhYnMuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGFpbmVyKClgLlxuQG1peGluIHRhYnMtY29udGFpbmVyLXZlcnRpY2FsIHtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgbGlua3Mgd2l0aGluIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byB0aGUgYDxsaT5gIGVsZW1lbnRzIGluc2lkZSBhIHRhYiBjb250YWluZXIuXG5AbWl4aW4gdGFicy10aXRsZSAoXG4gICRwYWRkaW5nOiAkdGFiLWl0ZW0tcGFkZGluZyxcbiAgJGZvbnQtc2l6ZTogJHRhYi1pdGVtLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkdGFiLWNvbG9yLFxuICAkY29sb3ItYWN0aXZlOiAkdGFiLWFjdGl2ZS1jb2xvcixcbiAgJGJhY2tncm91bmQtaG92ZXI6ICR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkYmFja2dyb3VuZC1hY3RpdmU6ICR0YWItYmFja2dyb3VuZC1hY3RpdmVcbikge1xuICBmbG9hdDogI3skZ2xvYmFsLWxlZnR9O1xuXG4gID4gYSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGNvbG9yO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZC1ob3ZlcjtcbiAgICAgIGNvbG9yOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6IC0xNCUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMsXG4gICAgJlthcmlhLXNlbGVjdGVkPSd0cnVlJ10ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtYWN0aXZlO1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgdGhhdCBzdXJyb3VuZHMgYSB0YWIgZ3JvdXAncyBjb250ZW50IHBhbmVzLlxuQG1peGluIHRhYnMtY29udGVudCAoXG4gICRiYWNrZ3JvdW5kOiAkdGFiLWNvbnRlbnQtYmFja2dyb3VuZCxcbiAgJGNvbG9yOiAkdGFiLWNvbnRlbnQtY29sb3IsXG4gICRib3JkZXItY29sb3I6ICR0YWItY29udGVudC1ib3JkZXJcbikge1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBib3JkZXItdG9wOiAwO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRjb2xvcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRlbnQgY29udGFpbmVyIHRvIGhhdmUgYSB2ZXJ0aWNhbCBzdHlsZSwgYnkgc2hpZnRpbmcgdGhlIGJvcmRlciBhcm91bmQuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGVudCgpYC5cbkBtaXhpbiB0YWJzLWNvbnRlbnQtdmVydGljYWwgKFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBpbmRpdmlkdWFsIHRhYiBjb250ZW50IHBhbmVsIHdpdGhpbiB0aGUgdGFiIGNvbnRlbnQgY29udGFpbmVyLlxuQG1peGluIHRhYnMtcGFuZWwgKFxuICAkcGFkZGluZzogJHRhYi1jb250ZW50LXBhZGRpbmdcbikge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGFicyB7XG4gIC50YWJzIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsXG4gIC50YWJzLnZlcnRpY2FsIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lci12ZXJ0aWNhbDtcbiAgfVxuXG4gIC8vIFNpbXBsZVxuICAudGFicy5zaW1wbGUge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmltYXJ5IGNvbG9yXG4gIC50YWJzLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuXG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJHByaW1hcnktY29sb3IpO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCRwcmltYXJ5LWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudGFicy10aXRsZSB7XG4gICAgQGluY2x1ZGUgdGFicy10aXRsZTtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudDtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQudmVydGljYWwge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudC12ZXJ0aWNhbDtcbiAgfVxuXG4gIC50YWJzLXBhbmVsIHtcbiAgICBAaW5jbHVkZSB0YWJzLXBhbmVsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGh1bWJuYWlsXG4vLy8vXG5cbi8vLyBCb3JkZXIgYXJvdW5kIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kdGh1bWJuYWlsLWJvcmRlcjogNHB4IHNvbGlkICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGh1bWJuYWlsLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyB1bmRlciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIFNoYWRvd1xuJHRodW1ibmFpbC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKCRibGFjaywgMC4yKSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgdW5kZXIgdGh1bWJuYWlsIGltYWdlcy5cbi8vLyBAdHlwZSBTaGFkb3dcbiR0aHVtYm5haWwtc2hhZG93LWhvdmVyOiAwIDAgNnB4IDFweCByZ2JhKCRwcmltYXJ5LWNvbG9yLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wcnRpZXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHRodW1ibmFpbC10cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGh1bWJuYWlsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHRodW1ibmFpbCBzdHlsZXMgdG8gYW4gZWxlbWVudC5cbkBtaXhpbiB0aHVtYm5haWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tO1xuXG4gIGJvcmRlcjogJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtcmFkaXVzO1xuICBib3gtc2hhZG93OiAkdGh1bWJuYWlsLXNoYWRvdztcblxuICBsaW5lLWhlaWdodDogMDtcbn1cblxuQG1peGluIHRodW1ibmFpbC1saW5rIHtcbiAgdHJhbnNpdGlvbjogJHRodW1ibmFpbC10cmFuc2l0aW9uO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6ICR0aHVtYm5haWwtc2hhZG93LWhvdmVyO1xuICB9XG5cbiAgaW1hZ2Uge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGh1bWJuYWlsIHtcbiAgLnRodW1ibmFpbCB7XG4gICAgQGluY2x1ZGUgdGh1bWJuYWlsO1xuICB9XG5cbiAgYS50aHVtYm5haWwge1xuICAgIEBpbmNsdWRlIHRodW1ibmFpbC1saW5rO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbWVudVxuLy8vL1xuXG4vLy8gTWFyZ2luIG9mIGEgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIExlZnQtaGFuZCBtYXJnaW4gb2YgYSBuZXN0ZWQgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3IgaXRlbXMgaW4gYSBwaWxsIG1lbnUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIG1hcmdpbiBmb3IgaXRlbXMgaW4gYSBzaW1wbGUgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRtZW51LWl0ZW0tY29sb3ItYWN0aXZlOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGl2ZSB0ZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmU6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gYWN0aXZlIG1lbnUgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBiZXR3ZWVuIGFuIGljb24gYW5kIHRleHQgaW4gYSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pY29uLXNwYWNpbmc6IDAuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IHN0YXRlLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgYWN0aXZlYCB3aXRoIGBpcy1hY3RpdmVgLiBcbi8vLyBCdXQgcGxlYXNlIG5vdGUgdGhhdCBgYWN0aXZlYCB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgdmVyc2lvbnMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IGNlbnRlcmVkLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgLm1lbnUtY2VudGVyZWQgPiAubWVudWAgd2l0aCBgLm1lbnUuYWxpZ24tY2VudGVyYC4gXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgYG1lbnUtY2VudGVyZWRgIHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHVzaW5nIGBpY29uLSpgIGNsYXNzZXMgd2l0aG91dCBgLmljb25zYCBjbGFzc2VzXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgdGhpcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1pY29ucy1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIENyZWF0ZXMgdGhlIGJhc2Ugc3R5bGVzIGZvciBhIE1lbnUuXG5AbWl4aW4gbWVudS1iYXNlIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICBsaSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICB9XG5cbiAgYSxcbiAgLmJ1dHRvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LWl0ZW1zLXBhZGRpbmc7XG4gIH1cblxuICAvLyBSZXNldCBzdHlsZXMgb2YgaW5uZXIgZWxlbWVudHNcbiAgaW5wdXQsXG4gIHNlbGVjdCxcbiAgYSxcbiAgYnV0dG9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG4vLy8gRXhwYW5kcyB0aGUgaXRlbXMgb2YgYSBNZW51LCBzbyBlYWNoIGl0ZW0gaXMgdGhlIHNhbWUgd2lkdGguXG5AbWl4aW4gbWVudS1leHBhbmQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBsaSB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWxpZ24gbWVudSBpdGVtcy5cbkBtaXhpbiBtZW51LWFsaWduKCRhbGlnbm1lbnQpIHtcbiAgQGlmICRhbGlnbm1lbnQgPT0gbGVmdCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGFsaWdubWVudCA9PSByaWdodCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLnZlcnRpY2FsIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcblxuICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICB0ZXh0LWFsaWduOiAkZ2xvYmFsLWxlZnQ7XG4gICAgICB9XG5cbiAgICAgICYudmVydGljYWwge1xuICAgICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkYWxpZ25tZW50ID09IGNlbnRlciB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgIC5zdWJtZW51IGxpIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGRpcmVjdGlvbiBvZiBhIE1lbnUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFtob3Jpem9udGFsXSAtIERpcmVjdGlvbiBvZiB0aGUgTWVudS4gQ2FuIGJlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLlxuQG1peGluIG1lbnUtZGlyZWN0aW9uKCRkaXI6IGhvcml6b250YWwpIHtcbiAgQGlmICRkaXIgPT0gaG9yaXpvbnRhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBtZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2ltcGxlIE1lbnUsIHdoaWNoIGhhcyBubyBwYWRkaW5nIG9yIGhvdmVyIHN0YXRlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpciBbJGdsb2JhbC1sZWZ0XSAtIERpcmVjdGlvbiBvZiB0aGUgbWVudS4gVGhpcyBlZmZlY3RzIHRoZSBzaWRlIG9mIHRoZSBgPGxpPmAgdGhhdCByZWNlaXZlcyB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIFskbWVudS1zaW1wbGUtbWFyZ2luXSAtIFRoZSBtYXJnaW4gdG8gYXBwbHkgdG8gZWFjaCBgPGxpPmAuXG5AbWl4aW4gbWVudS1zaW1wbGUoJGRpcjogJGdsb2JhbC1sZWZ0LCAkbWFyZ2luOiAkbWVudS1zaW1wbGUtbWFyZ2luKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICBsaSArIGxpIHtcbiAgICBtYXJnaW4tI3skZGlyfTogJG1hcmdpbjtcbiAgfVxuXG4gIGEge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG5lc3RlZCBNZW51LCBieSBhZGRpbmcgYG1hcmdpbi1sZWZ0YCB0byB0aGUgbWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkbWFyZ2luIFskbWVudS1uZXN0ZWQtbWFyZ2luXSAtIExlbmd0aCBvZiB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG5lc3RlZC1hbGlnbm1lbnQgW2xlZnRdIC0gQWxpZ25tZW50IG9mIHRoZSBuZXN0ZWQgY2xhc3NcbkBtaXhpbiBtZW51LW5lc3RlZChcbiAgJG1hcmdpbjogJG1lbnUtbmVzdGVkLW1hcmdpbixcbiAgJG5lc3RlZC1hbGlnbm1lbnQ6IGxlZnRcbikge1xuICBAaWYgJG5lc3RlZC1hbGlnbm1lbnQgPT0gcmlnaHQge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkbWFyZ2luO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIH1cbiAgQGVsc2Uge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRtYXJnaW47XG4gIH1cblxufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGljb25zIGluIG1lbnVzLlxuQG1peGluIG1lbnUtaWNvbnMoKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGEge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIGltZyxcbiAgICBpLFxuICAgIHN2ZyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICArIHNwYW4ge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBwb3NpdGlvbiBjbGFzc2VzIGZvciBpY29ucyB3aXRoaW4gYSBtZW51LlxuQG1peGluIG1lbnUtaWNvbi1wb3NpdGlvbigkcG9zaXRpb246IGxlZnQsICRzcGFjaW5nOiAkbWVudS1pY29uLXNwYWNpbmcpIHtcbiAgQGlmICRwb3NpdGlvbiA9PSBsZWZ0IHtcbiAgICBsaSBhIHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgaW1nLFxuICAgICAgaSxcbiAgICAgIHN2ZyB7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRzcGFjaW5nO1xuXG4gICAgICAgIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgbGkgYSB7XG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG8gJHNwYWNpbmc7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBpbWcsXG4gICAgICBpLFxuICAgICAgc3ZnIHtcbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogJHNwYWNpbmcgYXV0byAwO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWVudS10ZXh0IHtcbiAgcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG5cbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuQG1peGluIG1lbnUtc3RhdGUtYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZSwgKCRtZW51LWl0ZW0tY29sb3ItYWN0aXZlLCAkbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmUpKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tbWVudSB7XG4gIC5tZW51IHtcbiAgICBAaW5jbHVkZSBtZW51LWJhc2U7XG5cbiAgICAvLyBEZWZhdWx0IG9yaWVudGF0aW9uOiBob3Jpem9udGFsXG4gICAgJiwgJi5ob3Jpem9udGFsIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIG9yaWVudGF0aW9uIG1vZGlmaWVyXG4gICAgJi52ZXJ0aWNhbCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWRpcmVjdGlvbih2ZXJ0aWNhbCk7XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBtb2RpZmllciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlXG4gICAgJi5zaW1wbGUge1xuICAgICAgQGluY2x1ZGUgbWVudS1zaW1wbGU7XG4gICAgfVxuXG4gICAgLy8gQnJlYWtwb2ludCBzcGVjaWZpYyB2ZXJzaW9uc1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoJHNtYWxsOiBmYWxzZSkge1xuICAgICAgJi4jeyQtemYtc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS12ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWV4cGFuZDtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tc2ltcGxlIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmVzdGluZ1xuICAgICYubmVzdGVkIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkO1xuICAgIH1cblxuICAgIC8vIEljb24gQmFzZSBTdHlsZXNcbiAgICAmLmljb25zIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbnM7XG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LWljb25zLWJhY2stY29tcGF0IHtcbiAgICAgICYuaWNvbi10b3AsXG4gICAgICAmLmljb24tcmlnaHQsXG4gICAgICAmLmljb24tYm90dG9tLFxuICAgICAgJi5pY29uLWxlZnQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWljb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEljb24gTGVmdFxuICAgICYuaWNvbi1sZWZ0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihsZWZ0KTtcbiAgICB9XG5cbiAgICAvLyBJY29uIFJpZ2h0XG4gICAgJi5pY29uLXJpZ2h0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihyaWdodCk7XG4gICAgfVxuXG4gICAgLy8gSWNvbiBUb3BcbiAgICAmLmljb24tdG9wIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbih0b3ApO1xuICAgIH1cblxuICAgIC8vIEljb24gQm90dG9tXG4gICAgJi5pY29uLWJvdHRvbSB7XG4gICAgICBAaW5jbHVkZSBtZW51LWljb24tcG9zaXRpb24oYm90dG9tKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAuaXMtYWN0aXZlID4gYSB7XG4gICAgICBAaW5jbHVkZSBtZW51LXN0YXRlLWFjdGl2ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LXN0YXRlLWJhY2stY29tcGF0IHtcbiAgICAgIC5hY3RpdmUgPiBhIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1zdGF0ZS1hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gbGVmdFxuICAgICYuYWxpZ24tI3skZ2xvYmFsLWxlZnR9IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24obGVmdCk7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gcmlnaHRcbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihyaWdodCk7XG5cbiAgICAgIC5uZXN0ZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkbmVzdGVkLWFsaWdubWVudDogcmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsaWduIGNlbnRlclxuICAgICYuYWxpZ24tY2VudGVyIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24oY2VudGVyKTtcbiAgICB9XG5cbiAgICAubWVudS10ZXh0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtdGV4dDtcbiAgICB9XG4gIH1cblxuICBAaWYgJG1lbnUtY2VudGVyZWQtYmFjay1jb21wYXQge1xuICAgIC5tZW51LWNlbnRlcmVkIHtcbiAgICAgID4gLm1lbnUge1xuICAgICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihjZW50ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByZXZlbnQgRk9VQyB3aGVuIHVzaW5nIHRoZSBSZXNwb25zaXZlIE1lbnUgcGx1Z2luXG4gIC5uby1qcyBbZGF0YS1yZXNwb25zaXZlLW1lbnVdIHVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCJAbWl4aW4gZm91bmRhdGlvbi1tZW51LWljb24ge1xuICAubWVudS1pY29uIHtcbiAgICBAaW5jbHVkZSBoYW1idXJnZXIoJGNvbG9yOiAkdGl0bGViYXItaWNvbi1jb2xvciwgJGNvbG9yLWhvdmVyOiAkdGl0bGViYXItaWNvbi1jb2xvci1ob3Zlcik7XG4gIH1cblxuICAubWVudS1pY29uLmRhcmsge1xuICAgIEBpbmNsdWRlIGhhbWJ1cmdlcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb24tbWVudVxuLy8vL1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IG5lc3RlZCBtYXJnaW5cbi8vLyBAdHlwZSBOdW1iZXJcbiRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBzdWJtZW51IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc6ICRhY2NvcmRpb25tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGlmIGFjY29yZGlvbiBtZW51cyBoYXZlIHRoZSBkZWZhdWx0IGFycm93IHN0eWxlcy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWNjb3JkaW9ubWVudS1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1pdGVtLWJhY2tncm91bmQ6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gYm9yZGVyLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1ib3JkZXI6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gcGFkZGluZy5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIExpc3RcbiRhY2NvcmRpb24tc3VibWVudS10b2dnbGUtYm9yZGVyOiAkYWNjb3JkaW9ubWVudS1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IHN1Ym1lbnUgdG9nZ2xlIGJhY2tncm91bmQgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDogNDBweCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgc3VibWVudSB0b2dnbGUgYmFja2dyb3VuZCBoZWlnaHQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBhcnJvdyBzaXplIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kYWNjb3JkaW9ubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbkBtaXhpbiB6Zi1hY2NvcmRpb24tbWVudS1sZWZ0LXJpZ2h0LWFycm93cyB7XG4gIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRhY2NvcmRpb25tZW51LWFycm93LXNpemUsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbWFyZ2luLXRvcDogLTEgKiAoJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgI3skZ2xvYmFsLXJpZ2h0fTogMXJlbTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLWxlZnQgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCA+IGE6OmFmdGVyIHtcbiAgICByaWdodDogMXJlbTtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodCAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbi1tZW51IHtcblxuICAuYWNjb3JkaW9uLW1lbnUge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAkYWNjb3JkaW9ubWVudS1ib3JkZXI7XG4gICAgICAgIGJvcmRlci1yaWdodDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgICBib3JkZXItbGVmdDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgfVxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBAaWYgJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kO1xuICAgICAgfVxuICAgICAgcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgYSB7XG4gICAgICBwYWRkaW5nOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkKCRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW4sIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtYXJyb3dzIHtcbiAgICAgIEBpbmNsdWRlIHpmLWFjY29yZGlvbi1tZW51LWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50W2FyaWEtZXhwYW5kZWQ9J3RydWUnXSA+IGE6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgbGkge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmhhcy1zdWJtZW51LXRvZ2dsZSA+IGEge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDtcbiAgfVxuXG4gIC8vIFN1Ym1lbnUgdG9nZ2xlXG4gIC5zdWJtZW51LXRvZ2dsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICAjeyRnbG9iYWwtcmlnaHR9OiAwO1xuXG4gICAgd2lkdGg6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuICAgIGhlaWdodDogJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtaGVpZ2h0O1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogJGFjY29yZGlvbi1zdWJtZW51LXRvZ2dsZS1ib3JkZXI7XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgYXJyb3cgdG8gdGhlIHRvZ2dsZVxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSg2cHgsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcblxuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJvdGF0ZSB0aGUgYXJyb3cgd2hlbiBtZW51IGlzIG9wZW5cbiAgLnN1Ym1lbnUtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9J3RydWUnXTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGVZKC0xKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xuICB9XG5cbiAgLnN1Ym1lbnUtdG9nZ2xlLXRleHQge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZHJpbGxkb3duXG4vLy8vXG5cbi8vLyBUcmFuc2l0aW9uIHByb3BlcnR5IHRvIHVzZSBmb3IgYW5pbWF0aW5nIG1lbnVzLlxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhciAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYXJyb3dzIHRvIGRyaWxsZG93biBpdGVtcyB3aXRoIHN1Ym1lbnVzLCBhcyB3ZWxsIGFzIHRoZSBiYWNrIGJ1dHRvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZHJpbGxkb3duLWFycm93czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgZHJpbGxkb3duIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyaWxsZG93bi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBtZW51IGl0ZW0gcGFkZGluZyBpbiB0aGUgc3VibWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nOiAkZHJpbGxkb3duLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBkcmlsbGRvd24gc3VibWVudXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJpbGxkb3duLWFycm93LXNpemUsICRkcmlsbGRvd24tYXJyb3ctY29sb3IsICRnbG9iYWwtcmlnaHQpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcmlsbGRvd24tYXJyb3ctc2l6ZTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgfVxuICB9XG5cbiAgJi5hbGlnbi1sZWZ0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgcmlnaHQpO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgbGVmdCk7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMXJlbTtcbiAgfVxuXG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyaWxsZG93bi1tZW51IHtcbiAgLy8gQXBwbGllZCB0byB0aGUgTWVudSBjb250YWluZXJcbiAgLmlzLWRyaWxsZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBsaSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmLmFuaW1hdGUtaGVpZ2h0IHtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSB0b3AgbGV2ZWwgPHVsPlxuICAuZHJpbGxkb3duIHtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRkcmlsbGRvd24tYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAvLyBBcHBsaWVkIHRvIHN1Ym1lbnUgPHVsPnNcbiAgICAuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgI3skZ2xvYmFsLWxlZnR9OiAxMDAlO1xuICAgICAgei1pbmRleDogLTE7XG5cbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogJGRyaWxsZG93bi1zdWJtZW51LWJhY2tncm91bmQ7XG4gICAgICB0cmFuc2l0aW9uOiAkZHJpbGxkb3duLXRyYW5zaXRpb247XG5cbiAgICAgICYuaXMtYWN0aXZlIHtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IGx0ciwgLTEwMCUsIDEwMCUpKTtcbiAgICAgIH1cblxuICAgICAgJi5pcy1jbG9zaW5nIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gbHRyLCAxMDAlLCAtMTAwJSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtZW51IGl0ZW0gcGFkZGluZ1xuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgQGluY2x1ZGUgbWVudS1uZXN0ZWQoJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAuZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgJGRyaWxsZG93bi1hcnJvd3Mge1xuICAgICAgQGluY2x1ZGUgemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuanMtZHJpbGxkb3duLWJhY2sgPiBhOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyaWxsZG93bi1hcnJvdy1zaXplLCAkZHJpbGxkb3duLWFycm93LWNvbG9yLCAkZ2xvYmFsLWxlZnQpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwLjc1cmVtOyAvLyBDcmVhdGVzIHNwYWNlIGJldHdlZW4gdGhlIGFycm93IGFuZCB0aGUgdGV4dFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duLW1lbnVcbi8vLy9cblxuLy8vIEVuYWJsZXMgYXJyb3dzIGZvciBpdGVtcyB3aXRoIGRyb3Bkb3duIG1lbnVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBkcm9wZG93biBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3I6ICRhbmNob3ItY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgc2l6ZSBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgcGFkZGluZyBmb3IgYWxpZ25pbmcgdGhlIGFycm93IGNvcnJlY3RseS5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYXJyb3ctcGFkZGluZzogMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gTWluaW11bSB3aWR0aCBvZiBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0b3AgbGV2ZWwgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGRyb3Bkb3ducy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyb3Bkb3dubWVudS1zdWJtZW51LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3dubWVudS1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3Igc3ViLW1lbnUgaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGRyb3Bkb3dubWVudS1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGZvciBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3dubWVudS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vIEJvcmRlciB3aWR0aCBmb3IgZHJvcGRvd24gc3ViLW1lbnVzLlxuLy8gVXNlZCB0byBhZGp1c3QgdG9wIG1hcmdpbiBvZiBhIHN1Yi1tZW51IGlmIGEgYm9yZGVyIGlzIHVzZWQuXG4vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYm9yZGVyLXdpZHRoOiBudGgoJGRyb3Bkb3dubWVudS1ib3JkZXIsIDEpO1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuQG1peGluIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgPiBhOjphZnRlciB7XG4gICAgI3skZ2xvYmFsLXJpZ2h0fTogMTRweDtcbiAgfVxuXG4gICYub3BlbnMtbGVmdCA+IGE6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplLCAkZHJvcGRvd25tZW51LWFycm93LWNvbG9yLCBsZWZ0KTtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiA1cHg7XG4gIH1cblxuICAmLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJvcGRvd25tZW51LWFycm93LXNpemUsICRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3IsIHJpZ2h0KTtcbiAgfVxufVxuXG5AbWl4aW4gZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICA+IGxpLm9wZW5zLWxlZnQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gbGkub3BlbnMtcmlnaHQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tcXVhbGlmeWluZy1lbGVtZW50c1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgZG93bik7XG4gICAgICAgICN7JGdsb2JhbC1yaWdodH06IDVweDtcbiAgICAgICAgI3skZ2xvYmFsLWxlZnR9OiBhdXRvO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqICgkZHJvcGRvd25tZW51LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgPiBsaSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1sZWZ0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1yaWdodCB7XG4gICAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmICRkcm9wZG93bm1lbnUtYXJyb3dzIHtcbiAgICAgICAgQGluY2x1ZGUgemYtZHJvcGRvd24tbGVmdC1yaWdodC1hcnJvd3M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBkcm9wZG93bi1tZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyb3Bkb3duLW1lbnUge1xuICAuZHJvcGRvd24ubWVudSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oaG9yaXpvbnRhbCk7XG5cbiAgICBhIHtcbiAgICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbVxuICAgID4gbGkgPiBhIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDtcbiAgICAgIHBhZGRpbmc6ICRkcm9wZG93bm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbSBhY3RpdmUgc3RhdGVcbiAgICA+IGxpLmlzLWFjdGl2ZSA+IGEge1xuICAgICAgYmFja2dyb3VuZDogJGRyb3Bkb3duLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAubm8tanMgJiB1bCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkZHJvcGRvd25tZW51LW5lc3RlZC1tYXJnaW4pO1xuICAgIH1cblxuICAgICYudmVydGljYWwge1xuICAgICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgICAgICAgICYuI3skc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLiN7JHNpemV9LXZlcnRpY2FsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsaWduLXJpZ2h0IHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51LmZpcnN0LXN1YiB7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwge1xuICAgIHdpZHRoOiAxMDBweDtcblxuICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgYTo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICAjeyRnbG9iYWwtcmlnaHR9OiA1cHg7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTtcbiAgICB9XG5cbiAgICAmLm9wZW5zLWlubmVyID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuXG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBAaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAmLm9wZW5zLXJpZ2h0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtaW4td2lkdGg6ICRkcm9wZG93bm1lbnUtbWluLXdpZHRoO1xuXG4gICAgYm9yZGVyOiAkZHJvcGRvd25tZW51LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kOiAkZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDtcblxuICAgIC5kcm9wZG93biAmIGEge1xuICAgICAgcGFkZGluZzogJGRyb3Bkb3dubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IHtcbiAgICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICAgIEBpbmNsdWRlIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAodHlwZS1vZigkZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgbWFyZ2luLXRvcDogKC0kZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBsaSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvLyBbVE9ET10gQ3V0IGJhY2sgc3BlY2lmaWNpdHlcbiAgICAvLyY6bm90KC5qcy1kcm9wZG93bi1ub2hvdmVyKSA+IC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudDpob3ZlciA+ICYsIC8vIHdoeSBpcyB0aGlzIGxpbmUgbmVlZGVkPyBPcGVuaW5nIGlzIGhhbmRsZWQgYnkgSlMgYW5kIHRoaXMgY2F1c2VzIHNvbWUgdWdseSBmbGlja2VyaW5nIHdoZW4gdGhlIHN1YiBpcyByZS1wb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkuLi5cbiAgICAmLmpzLWRyb3Bkb3duLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBvZmYtY2FudmFzXG4vLy8vXG5cbi8vLyBXaWR0aCBtYXAgb2YgYSBsZWZ0L3JpZ2h0IG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgTWFwXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gIHNtYWxsOiAyNTBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgbWFwIG9mIGEgdG9wL2JvdHRvbSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE1hcFxuJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKFxuICBzbWFsbDogMjUwcHgsXG4pICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyBmb3IgdGhlIG9mZi1jYW52YXMgb3ZlcmxhcCBwYW5lbC5cbi8vLyBAdHlwZSBTaGFkb3dcbiRvZmZjYW52YXMtc2hhZG93OiAwIDAgMTBweCByZ2JhKCRibGFjaywgMC43KSAhZGVmYXVsdDtcblxuLy8vIElubmVyIGJveCBzaGFkb3cgc2l6ZSBmb3IgdGhlIG9mZi1jYW52YXMgcHVzaCBwYW5lbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vLyBJbm5lciBib3ggc2hhZG93IGNvbG9yIGZvciB0aGUgb2ZmLWNhbnZhcyBwdXNoIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1jb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIGNvbnRlbnQgb3ZlcmxheS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXg6IDExICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHdpdGggdGhlIGBwdXNoYCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1wdXNoLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBaLWluZGV4IG9mIGFuIG9mZi1jYW52YXMgcGFuZWwgd2l0aCB0aGUgYG92ZXJsYXBgIHRyYW5zaXRpb24uXG4vLy8gQHR5cGUgTnVtYmVyXG4kb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4OiAxMyAhZGVmYXVsdDtcblxuLy8vIFotaW5kZXggb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbCB1c2luZyB0aGUgYHJldmVhbC1mb3ItKmAgY2xhc3NlcyBvciBtaXhpbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtcmV2ZWFsLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBMZW5ndGggb2YgdGhlIGFuaW1hdGlvbiBvbiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cyAhZGVmYXVsdDtcblxuLy8vIFRpbWluZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uIG9uIGFuIG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgS2V5d29yZFxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLXRpbWluZzogZWFzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYSByZXZlYWxlZCBvZmYtY2FudmFzIHdpbGwgYmUgZml4ZWQtcG9zaXRpb24sIGFuZCBzY3JvbGwgd2l0aCB0aGUgc2NyZWVuLlxuLy8vIEB0eXBlIEJvb2xcbiRvZmZjYW52YXMtZml4ZWQtcmV2ZWFsOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIG92ZXJsYXkgdGhhdCBhcHBlYXJzIHdoZW4gYW4gb2ZmLWNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWV4aXQtYmFja2dyb3VuZDogcmdiYSgkd2hpdGUsIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gQ1NTIGNsYXNzIHVzZWQgZm9yIHRoZSBtYWluIGNvbnRlbnQgYXJlYS4gVGhlIG9mZi1jYW52YXMgbWl4aW5zIHVzZSB0aGlzIHRvIHRhcmdldCB0aGUgcGFnZSBjb250ZW50LlxuJG1haW5jb250ZW50LWNsYXNzOiAnb2ZmLWNhbnZhcy1jb250ZW50JyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzZWxpbmUgc3R5bGVzIGZvciBvZmYtY2FudmFzLiBUaGlzIENTUyBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBvdGhlciBwaWVjZXMgd29yay5cbkBtaXhpbiBvZmYtY2FudmFzLWJhc2ljcyB7XG5cbiAgLy8vIFRyYW5zZm9ybSBkZXByZWNhdGVkIHNpemUgc2V0dGluZ3MgaW50byBtYXAgJiBzaG93IHdhcm5pbmdcbiAgQGlmIHZhcmlhYmxlLWV4aXN0cyhvZmZjYW52YXMtc2l6ZSkge1xuICAgICRvZmZjYW52YXMtc2l6ZXM6IChzbWFsbDogJG9mZmNhbnZhcy1zaXplLCBtZWRpdW06ICRvZmZjYW52YXMtc2l6ZSkgIWdsb2JhbDtcbiAgICBAd2FybiAnJG9mZmNhbnZhcy1zaXplIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCB1c2VkIGFueW1vcmUhIFBsZWFzZSB1cGRhdGUgeW91ciBzZXR0aW5ncyBhbmQgdXNlIHRoZSBtYXAgJG9mZmNhbnZhcy1zaXplcyBpbnN0ZWFkJztcbiAgfVxuICBAaWYgdmFyaWFibGUtZXhpc3RzKG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSB7XG4gICAgJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKHNtYWxsOiAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUsIG1lZGl1bTogJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSAhZ2xvYmFsO1xuICAgIEB3YXJuICckb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHVzZWQgYW55bW9yZSEgUGxlYXNlIHVwZGF0ZSB5b3VyIHNldHRpbmdzIGFuZCB1c2UgdGhlIG1hcCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzIGluc3RlYWQnO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHRoZSB6LWluZGV4ZXMgYW5kIGluY3JlYXNlIHRoZW0gZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBvdmVybGF5J3Mgei1pbmRleCBpcyBuZXcgc2luY2UgdjYuNCBhbmQgbWF5IGJlIGlkZW50aWNhbCB0byB0aGUgdXNlciBjdXN0b20gc2V0dGluZ3Mgb2YgdGhlIHB1c2ggei1pbmRleC5cbiAgQGlmICRvZmZjYW52YXMtcHVzaC16aW5kZXggPD0gJG9mZmNhbnZhcy1vdmVybGF5LXppbmRleCB7ICRvZmZjYW52YXMtcHVzaC16aW5kZXg6ICRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXggPD0gJG9mZmNhbnZhcy1wdXNoLXppbmRleCB7ICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXg6ICRvZmZjYW52YXMtcHVzaC16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCA8PSAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4IHsgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4ICsgMSAhZ2xvYmFsOyB9XG5cbiAgLy8gSGlkZXMgb3ZlcmZsb3cgb24gYm9keSB3aGVuIGFuIG9mZi1jYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgLmlzLW9mZi1jYW52YXMtb3BlbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgb3ZlcmxheSAoZ2VuZXJhdGVkIGJ5IEphdmFTY3JpcHQpXG4gIC5qcy1vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkb2ZmY2FudmFzLXRyYW5zaXRpb24tbGVuZ3RoICRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmcsIHZpc2liaWxpdHkgJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuXG4gICAgYmFja2dyb3VuZDogJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ7XG5cbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmlzLXZpc2libGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG5cbiAgICAmLmlzLW92ZXJsYXktZml4ZWQge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRzIGJhc2ljIHN0eWxlcyBmb3IgYW4gb2ZmLWNhbnZhcyB3cmFwcGVyLlxuQG1peGluIG9mZi1jYW52YXMtd3JhcHBlcigpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1iYXNlKFxuICAkYmFja2dyb3VuZDogJG9mZmNhbnZhcy1iYWNrZ3JvdW5kLFxuICAkdHJhbnNpdGlvbjogJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nLFxuICAkZml4ZWQ6IHRydWVcbikge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG5cbiAgQGlmICRmaXhlZCA9PSB0cnVlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgb2ZmLWNhbnZhcyB6LWluZGV4LlxuICB6LWluZGV4OiAkb2ZmY2FudmFzLXB1c2gtemluZGV4O1xuXG4gIC8vIEluY3JlYXNlIENTUyBzcGVjaWZpY2l0eVxuICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1wdXNoLXppbmRleDtcbiAgfVxuXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuXG4gIC8vIEhpZGUgaW5hY3RpdmUgb2ZmLWNhbnZhcyB3aXRoaW4gdGhlIGNvbnRlbnQgdGhhdCBoYXZlIHRoZSBzYW1lIHBvc2l0aW9uXG4gICYuaXMtY2xvc2VkIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBPdmVybGFwIG9ubHkgc3R5bGVzLlxuICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDtcblxuICAgICYuaXMtb3BlbiB7XG4gICAgICBib3gtc2hhZG93OiAkb2ZmY2FudmFzLXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHRyYW5zZm9ybSB0byAwIHRvIHNob3cgYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbiAgJi5pcy1vcGVuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgdG8gcG9zaXRpb24gYW4gb2ZmLWNhbnZhcyBwYW5lbCB0byB0aGUgbGVmdC9yaWdodC90b3AvYm90dG9tLlxuQG1peGluIG9mZi1jYW52YXMtcG9zaXRpb24oXG4gICRwb3NpdGlvbjogbGVmdCxcbiAgJG9yaWVudGF0aW9uOiBob3Jpem9udGFsLFxuICAkc2l6ZXM6IGlmKCRvcmllbnRhdGlvbiA9PSBob3Jpem9udGFsLCAkb2ZmY2FudmFzLXNpemVzLCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzKVxuKSB7XG4gIEBpZiAkcG9zaXRpb24gPT0gbGVmdCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgd2lkdGg6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcblxuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICB3aWR0aDogJHNpemU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgcG9zaXRpb24gZm9yIG5lc3RlZCBvZmYtY2FudmFzIGVsZW1lbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IC5vZmYtY2FudmFzLnBvc2l0aW9uLSN7JHBvc2l0aW9ufSB7XG5cbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYuaXMtdHJhbnNpdGlvbi1vdmVybGFwLmlzLW9wZW4ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBvcGVuIHBvc2l0aW9uIGZvciB0aGUgY29udGVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30uaXMtb3Blbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIHBvc2l0aW9uIGZvciBuZXN0ZWQgb2ZmLWNhbnZhcyBlbGVtZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfSAub2ZmLWNhbnZhcy5wb3NpdGlvbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcC5pcy1vcGVuIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9LmlzLW9wZW4tI3skcG9zaXRpb259IHtcbiAgICAgICYuaGFzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmICRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemUgaXMgc2V0LCBhZGQgaW5uZXIgYm94LXNoYWRvdy5cbiAgLy8gVGhpcyBtaW1pY3MgdGhlIG9mZi1jYW52YXMgcGFuZWwgaGF2aW5nIGEgbG93ZXIgei1pbmRleCwgd2l0aG91dCBoYXZpbmcgdG8gaGF2ZSBvbmUuXG4gIEBpZiAkb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1zaXplIHtcbiAgICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICBAaWYgJHBvc2l0aW9uID09IGxlZnQge1xuICAgICAgICBAaW5jbHVkZSBpbm5lci1zaWRlLXNoYWRvdyhyaWdodCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHJpZ2h0IHtcbiAgICAgICAgQGluY2x1ZGUgaW5uZXItc2lkZS1zaGFkb3cobGVmdCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KGJvdHRvbSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KHRvcCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbi8vLyBTZXRzIHRoZSBzdHlsZXMgZm9yIHRoZSBjb250ZW50IGNvbnRhaW5lci5cbkBtaXhpbiBvZmYtY2FudmFzLWNvbnRlbnQoKSB7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEJpbmQgdG8gaGFzLXRyYW5zaXRpb24tWCBjbGFzcyB0byBwcmV2ZW50IHRyYW5zaXRpb24gZm9yIHRyYW5zZm9ybTpub25lXG4gICYuaGFzLXRyYW5zaXRpb24tb3ZlcmxhcCxcbiAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNjb3BlIHVudGlsIHRoZSBlbGVtZW50IGlzIGNsb3NlZCAobWFrZXMgc3VyZSB0cmFuc2l0aW9uZW5kIGdldHMgdHJpZ2dlcmVkKVxuICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG5cbiAgLy8gQ29uc2lkZXIgZWxlbWVudCAmIGNvbnRlbnQsIG5lc3RlZCBpbiBhbm90aGVyIGNvbnRlbnRcbiAgLm9mZi1jYW52YXMuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRoYXQgcmV2ZWFsIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1yZXZlYWwoXG4kcG9zaXRpb246IGxlZnQsXG4kemluZGV4OiAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsXG4kY29udGVudDogJG1haW5jb250ZW50LWNsYXNzLFxuJGJyZWFrcG9pbnQ6IHNtYWxsXG4pIHtcbiAgdHJhbnNmb3JtOiBub25lO1xuICB6LWluZGV4OiAkemluZGV4O1xuICB0cmFuc2l0aW9uOiBub25lO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXG4gIEBpZiBub3QgJG9mZmNhbnZhcy1maXhlZC1yZXZlYWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5jbG9zZS1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBDb25zaWRlciByZXZlYWxlZCBlbGVtZW50IGlzIG5lc3RlZCBpbiBjb250ZW50XG4gIC4jeyRtYWluY29udGVudC1jbGFzc30gJiB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgQGF0LXJvb3QgLiN7JGNvbnRlbnR9Lmhhcy1yZXZlYWwtI3skcG9zaXRpb259IHtcbiAgICBtYXJnaW4tI3skcG9zaXRpb259OiAtemYtZ2V0LWJwLXZhbCgkb2ZmY2FudmFzLXNpemVzLCAkYnJlYWtwb2ludCk7XG4gIH1cblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAocHJpb3IgdG8gdjYuNClcbiAgJiB+IC4jeyRjb250ZW50fSB7XG4gICAgbWFyZ2luLSN7JHBvc2l0aW9ufTogLXpmLWdldC1icC12YWwoJG9mZmNhbnZhcy1zaXplcywgJGJyZWFrcG9pbnQpO1xuICB9XG59XG5cbi8vLyBPdmVycmlkZXMgdGhlIG9mZi1jYW52YXMgc3R5bGVzXG5AbWl4aW4gaW4tY2FudmFzKCkge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcblxuICAvLyBJbmNyZWFzZSBDU1Mgc3BlY2lmaWNpdHlcbiAgJi5wb3NpdGlvbi1sZWZ0LFxuICAmLnBvc2l0aW9uLXJpZ2h0LFxuICAmLnBvc2l0aW9uLXRvcCxcbiAgJi5wb3NpdGlvbi1ib3R0b20ge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1vZmYtY2FudmFzIHtcbiAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNpY3M7XG5cbiAgLy8gT2ZmLWNhbnZhcyB3cmFwcGVyXG4gIC5vZmYtY2FudmFzLXdyYXBwZXIge1xuICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtd3JhcHBlcjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgY29udGFpbmVyXG4gIC5vZmYtY2FudmFzIHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWJhc2U7XG5cbiAgICAvLyBGb3JjZSBwb3NpdGlvbiBhYnNvbHV0ZSBmb3IgbmVzdGVkIG9mZi1jYW52YXMgYmVjYXVzZSBmaXhlZCBkb2Vzbid0IHdvcmsgZm9yIHB1c2ggdHJhbnNpdGlvbiB3aXRoaW4gdGhlIHRyYW5zZm9ybSBzY29wZS5cbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9ICYge1xuICAgICAgLy8gTk9URTogc2luY2Ugb3ZlcmxhcCB0cmFuc2l0aW9uIGlzIGN1cnJlbnRseSBmb3JjZWQgaWYgbmVzdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgcG9zaXRpb24gYWJzb2x1dGUgdW50aWwgbmVzdGVkIHB1c2ggdHJhbnNpdGlvbiBpcyBzdXBwb3J0ZWQuXG4gICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBjb250YWluZXIgd2l0aCBhYnNvbHV0ZSBwb3NpdGlvblxuICAub2ZmLWNhbnZhcy1hYnNvbHV0ZSB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlKCRmaXhlZDogZmFsc2UpO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBwb3NpdGlvbiBjbGFzc2VzXG4gIC5wb3NpdGlvbi1sZWZ0ICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihsZWZ0LCAgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi1yaWdodCAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihyaWdodCwgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi10b3AgICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbih0b3AsICAgIHZlcnRpY2FsKTsgfVxuICAucG9zaXRpb24tYm90dG9tICB7IEBpbmNsdWRlIG9mZi1jYW52YXMtcG9zaXRpb24oYm90dG9tLCB2ZXJ0aWNhbCk7IH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWNvbnRlbnQ7XG4gIH1cblxuICAvLyBSZXZlYWwgb2ZmLWNhbnZhcyBwYW5lbCBvbiBsYXJnZXIgc2NyZWVuc1xuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkbmFtZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKGxlZnQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwocmlnaHQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKHRvcCwgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4LCAkbWFpbmNvbnRlbnQtY2xhc3MsICRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwoYm90dG9tLCAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsICRtYWluY29udGVudC1jbGFzcywgJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW92ZSBpbi1jYW52YXMgZm9yIGxhcmdlciBzY3JlZW5zXG4gIEBlYWNoICRuYW1lLCAkdmFsdWUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgQGlmICRuYW1lICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgLm9mZi1jYW52YXMuaW4tY2FudmFzLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgaW4tY2FudmFzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tc3RpY2t5IHtcbiAgLnN0aWNreS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5zdGlja3kge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAuc3RpY2t5LmlzLXN0dWNrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuaXMtYXQtdG9wIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgLnN0aWNreS5pcy1hbmNob3JlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGl0bGUtYmFyXG4vLy8vXG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgV2VpZ2h0XG4kdGl0bGViYXItdGV4dC1mb250LXdlaWdodDogYm9sZCAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIG1lbnUgaWNvbnMgaW5zaWRlIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgbWVudSBpY29ucyBpbnNpZGUgYSB0aXRsZSBiYXIgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gdGhlIG1lbnUgaWNvbiBhbmQgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi10aXRsZS1iYXIge1xuICAudGl0bGUtYmFyIHtcbiAgICBwYWRkaW5nOiAkdGl0bGViYXItcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkdGl0bGViYXItYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRpdGxlYmFyLWNvbG9yO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgfVxuXG4gICAgLm1lbnUtaWNvbiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkdGl0bGViYXItaWNvbi1zcGFjaW5nO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICR0aXRsZWJhci1pY29uLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRpdGxlLWJhci1sZWZ0LFxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG5cbiAgICAudGl0bGUtYmFyLXJpZ2h0IHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRpdGxlLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnRpdGxlLWJhci10aXRsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC13ZWlnaHQ6ICR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdG9wLWJhclxuLy8vL1xuXG4vLy8gUGFkZGluZyBmb3IgdGhlIHRvcCBiYXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXBhZGRpbmc6IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0b3AgYmFyLiBUaGlzIGNvbG9yIGFsc28gY2FzY2FkZXMgdG8gbWVudXMgd2l0aGluIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBzdWJtZW51cyB3aXRoaW4gdGhlIHRvcCBiYXIuIFVzZWZ1bGwgaWYgJHRvcGJhci1iYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZDogJHRvcGJhci1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBmb3IgdGhlIHRvcCBiYXIgdGl0bGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwICFkZWZhdWx0O1xuXG4vLy8gTWF4aW11bSB3aWR0aCBvZiBgPGlucHV0PmAgZWxlbWVudHMgaW5zaWRlIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHRvcCBiYXIgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0b3BiYXItdW5zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSB0b3AgYmFyIGNvbnRhaW5lci5cbkBtaXhpbiB0b3AtYmFyLWNvbnRhaW5lciB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9XG5cbiAgcGFkZGluZzogJHRvcGJhci1wYWRkaW5nO1xuXG4gICYsXG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiAkdG9wYmFyLWJhY2tncm91bmQgaXMgZGlmZmVybnQgZnJvbSAkdG9wYmFyLWJhY2tncm91bmQtc3VibWVudVxuICBAaWYgKCR0b3BiYXItYmFja2dyb3VuZCAhPSAkdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZCkge1xuICAgIHVsIHVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RyYWluIHdpZHRoIG9mIGlucHV0cyBieSBkZWZhdWx0IHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gYXJyYW5nZVxuICBpbnB1dCB7XG4gICAgbWF4LXdpZHRoOiAkdG9wYmFyLWlucHV0LXdpZHRoO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAxcmVtO1xuICB9XG5cbiAgLy8gVGhlIGFib3ZlIHN0eWxlcyBzaG91bGRuJ3QgYXBwbHkgdG8gaW5wdXQgZ3JvdXAgZmllbGRzXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gIH1cblxuICBpbnB1dC5idXR0b24geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4vLy8gTWFrZXMgc2VjdGlvbnMgb2YgYSB0b3AgYmFyIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuQG1peGluIHRvcC1iYXItc3RhY2tlZCB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgIC8vIFN1Yi1zZWN0aW9uc1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBTdWItc2VjdGlvbnNcbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gVW5kb2VzIHRoZSBDU1MgYXBwbGllZCBieSB0aGUgYHRvcC1iYXItc3RhY2tlZCgpYCBtaXhpbi5cbkBtaXhpbiB0b3AtYmFyLXVuc3RhY2sge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcblxuICAgIC50b3AtYmFyLWxlZnQge1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRvcC1iYXIge1xuICAvLyBUb3AgYmFyIGNvbnRhaW5lclxuICAudG9wLWJhciB7XG4gICAgQGluY2x1ZGUgdG9wLWJhci1jb250YWluZXI7XG5cbiAgICAvLyBTdGFjayBvbiBzbWFsbCBzY3JlZW5zIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0b3BiYXItdW5zdGFjay1icmVha3BvaW50KSB7XG4gICAgICBAaW5jbHVkZSB0b3AtYmFyLXVuc3RhY2s7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2xhc3NlcyBmb3Igc3RhY2tpbmcgb24gZWFjaCBzY3JlZW4gc2l6ZSAoZGVmaW5lZCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzKVxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgJi5zdGFja2VkLWZvci0jeyRzaXplfSB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBkb3duKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXNlY3Rpb25zXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgbWFyZ2luOiAkdG9wYmFyLXRpdGxlLXNwYWNpbmc7XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgcGFkZGluZzogJHRvcGJhci10aXRsZS1zcGFjaW5nO1xuXG4gICAgICAubWVudS1pY29uIHtcbiAgICAgICAgYm90dG9tOiAycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG5cbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZmxvYXRcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcyB7XG4gIC5mbG9hdC1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmZsb2F0LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5mbG9hdC1jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5jbGVhcmZpeCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH1cbn1cbiIsIkBmdW5jdGlvbiAtemYtZmxleC1qdXN0aWZ5KCR0ZXh0LWRpcmVjdGlvbil7XG4gICQtemYtZmxleC1qdXN0aWZ5OiAoXG4gICAgJ2xlZnQnOiBpZigkdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBmbGV4LWVuZCwgZmxleC1zdGFydCksXG4gICAgJ3JpZ2h0JzogaWYoJHRleHQtZGlyZWN0aW9uID09IHJ0bCwgZmxleC1zdGFydCwgZmxleC1lbmQpLFxuICAgICdjZW50ZXInOiBjZW50ZXIsXG4gICAgJ2p1c3RpZnknOiBzcGFjZS1iZXR3ZWVuLFxuICAgICdzcGFjZWQnOiBzcGFjZS1hcm91bmQsXG4gICk7XG5cbiAgQHJldHVybiAkLXpmLWZsZXgtanVzdGlmeTtcbn1cblxuXG4kLXpmLWZsZXgtYWxpZ246IChcbiAgJ3RvcCc6IGZsZXgtc3RhcnQsXG4gICdib3R0b20nOiBmbGV4LWVuZCxcbiAgJ21pZGRsZSc6IGNlbnRlcixcbiAgJ3N0cmV0Y2gnOiBzdHJldGNoLFxuKTtcblxuJC16Zi1mbGV4LWRpcmVjdGlvbjogKFxuICAncm93Jzogcm93LFxuICAncm93LXJldmVyc2UnOiByb3ctcmV2ZXJzZSxcbiAgJ2NvbHVtbic6IGNvbHVtbixcbiAgJ2NvbHVtbi1yZXZlcnNlJzogY29sdW1uLXJldmVyc2UsXG4pO1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGJ5IGFkZGluZyBgZGlzcGxheTogZmxleGAgdG8gdGhlIGVsZW1lbnQuXG5AbWl4aW4gZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbnMgdGhlIGl0ZW1zIHdpdGhpbiBhIGZsZXggY29udGFpbmVyLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeCBbbnVsbF0gLSBIb3Jpem9udGFsIGFsaWdubWVudCB0byB1c2UuIENhbiBiZSBgbGVmdGAsIGByaWdodGAsIGBjZW50ZXJgLCBganVzdGlmeWAsIG9yIGBzcGFjZWRgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgaG9yaXpvbnRhbCBhbGlnbm1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeSBbbnVsbF0gLSBWZXJ0aWNhbCBhbGlnbm1lbnQgdG8gdXNlLiBDYW4gYmUgYHRvcGAsIGBib3R0b21gLCBgbWlkZGxlYCwgb3IgYHN0cmV0Y2hgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgdmVydGljYWwgYWxpZ25tZW50LlxuQG1peGluIGZsZXgtYWxpZ24oJHg6IG51bGwsICR5OiBudWxsKSB7XG4gIEBpZiAkeCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCQtemYtZmxleC1qdXN0aWZ5LCAkeCkge1xuICAgICAgJHg6IG1hcC1nZXQoJC16Zi1mbGV4LWp1c3RpZnksICR4KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHdhcm4gJ2ZsZXgtZ3JpZC1yb3ctYWxpZ24oKTogI3skeH0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGhvcml6b250YWwgYWxpZ25tZW50LiBVc2UgbGVmdCwgcmlnaHQsIGNlbnRlciwganVzdGlmeSwgb3Igc3BhY2VkLic7XG4gICAgfVxuICB9XG5cbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtcm93LWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAganVzdGlmeS1jb250ZW50OiAkeDtcbiAgYWxpZ24taXRlbXM6ICR5O1xufVxuXG4vLy8gVmVydGljYWxseSBhbGlnbiBhIHNpbmdsZSBjb2x1bW4gd2l0aGluIGEgZmxleCByb3cuIEFwcGx5IHRoaXMgbWl4aW4gdG8gYSBmbGV4IGNvbHVtbi5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHkgW251bGxdIC0gVmVydGljYWwgYWxpZ25tZW50IHRvIHVzZS4gQ2FuIGJlIGB0b3BgLCBgYm90dG9tYCwgYG1pZGRsZWAsIG9yIGBzdHJldGNoYC4gT3IsIHNldCBpdCB0byBgbnVsbGAgKHRoZSBkZWZhdWx0KSB0byBub3Qgc2V0IHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiBmbGV4LWFsaWduLXNlbGYoJHk6IG51bGwpIHtcbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtY29sdW1uLWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAgYWxpZ24tc2VsZjogJHk7XG59XG5cbi8vLyBDaGFuZ2VzIHRoZSBzb3VyY2Ugb3JkZXIgb2YgYSBmbGV4IGNoaWxkLiBDaGlsZHJlbiB3aXRoIGxvd2VyIG51bWJlcnMgYXBwZWFyIGZpcnN0IGluIHRoZSBsYXlvdXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcmRlciBbMF0gLSBPcmRlciBudW1iZXIgdG8gYXBwbHkuXG5AbWl4aW4gZmxleC1vcmRlcigkb3JkZXI6IDApIHtcbiAgb3JkZXI6ICRvcmRlcjtcbn1cblxuLy8vIENoYW5nZSBmbGV4LWRpcmVjdGlvblxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpcmVjdGlvbiBbcm93XSAtIEZsZXggZGlyZWN0aW9uIHRvIHVzZS4gQ2FuIGJlXG4vLy8gICAtIHJvdyAoZGVmYXVsdCk6IHNhbWUgYXMgdGV4dCBkaXJlY3Rpb25cbi8vLyAgIC0gcm93LXJldmVyc2U6IG9wcG9zaXRlIHRvIHRleHQgZGlyZWN0aW9uXG4vLy8gICAtIGNvbHVtbjogc2FtZSBhcyByb3cgYnV0IHRvcCB0byBib3R0b21cbi8vLyAgIC0gY29sdW1uLXJldmVyc2U6IHNhbWUgYXMgcm93LXJldmVyc2UgdG9wIHRvIGJvdHRvbVxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCRkaXJlY3Rpb246IHJvdykge1xuICBmbGV4LWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBGbGV4Ym94IFV0aWxpdGllc1xuLy8vL1xuLy9cbi8vLyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY291bnQgb2Ygc291cmNlIG9yZGVyaW5nYFxuLy8vIEB0eXBlIE51bWJlclxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2ICFkZWZhdWx0O1xuXG4vLy8gUXVpY2tseSBkaXNhYmxlL2VuYWJsZSBSZXNwb25zaXZlIGJyZWFrcG9pbnRzIGZvciBWYW5pbGxhIEZsZXggSGVscGVycy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzOiB0cnVlICFkZWZhdWx0O1xuXG5AbWl4aW4gZmxleC1oZWxwZXJzIHtcbiAgLmZsZXgtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBmbGV4O1xuICB9XG5cbiAgLmZsZXgtY2hpbGQtYXV0byB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gIH1cblxuICAuZmxleC1jaGlsZC1ncm93IHtcbiAgICBmbGV4OiAxIDAgYXV0bztcbiAgfVxuXG4gIC5mbGV4LWNoaWxkLXNocmluayB7XG4gICAgZmxleDogMCAxIGF1dG87XG4gIH1cblxuICBAZWFjaCAkZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtZGlyZWN0aW9uIHtcbiAgICAuZmxleC1kaXItI3skZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzKSB7XG4gICAgLy8gTG9vcCB0aHJvdWdoIFJlc3BvbnNpdmUgQnJlYWtwb2ludHNcbiAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jb250YWluZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jaGlsZC1hdXRvIHtcbiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC4jeyRzaXplfS1mbGV4LWNoaWxkLWdyb3cge1xuICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLiN7JHNpemV9LWZsZXgtY2hpbGQtc2hyaW5rIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEBlYWNoICRkaXIsICRwcm9wIGluICQtemYtZmxleC1kaXJlY3Rpb24ge1xuICAgICAgICAgICAgLiN7JHNpemV9LWZsZXgtZGlyLSN7JGRpcn0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZsZXgtY2xhc3NlcyB7XG4gIC8vIEhvcml6b250YWwgYWxpZ25tZW50IHVzaW5nIGp1c3RpZnktY29udGVudFxuICBAZWFjaCAkaGRpciwgJHByb3AgaW4gJC16Zi1mbGV4LWp1c3RpZnkge1xuICAgIC5hbGlnbi0jeyRoZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR4OiAkaGRpcik7XG4gICAgfVxuICB9XG4gIFxuICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBTcGVjaWZpY2FsbHkgZm9yIFZlcnRpY2FsIE1lbnVcbiAgQGVhY2ggJGhkaXIsICRwcm9wIGluIG1hcC1yZW1vdmUoJC16Zi1mbGV4LWp1c3RpZnksICdqdXN0aWZ5JywgJ3NwYWNlZCcpIHtcbiAgICAuYWxpZ24tI3skaGRpcn0ge1xuICAgICAgJi52ZXJ0aWNhbCB7XG4gICAgICAgICYubWVudSA+IGxpID4gYSB7XG4gICAgICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogJGhkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWwgYWxpZ25tZW50IHVzaW5nIGFsaWduLWl0ZW1zIGFuZCBhbGlnbi1zZWxmXG4gIEBlYWNoICR2ZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtYWxpZ24ge1xuICAgIC5hbGlnbi0jeyR2ZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR5OiAkdmRpcik7XG4gICAgfVxuXG4gICAgLmFsaWduLXNlbGYtI3skdmRpcn0ge1xuICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbi1zZWxmKCR5OiAkdmRpcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VudHJhbCBhbGlnbm1lbnQgb2YgY29udGVudFxuICAuYWxpZ24tY2VudGVyLW1pZGRsZSB7XG4gICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogY2VudGVyLCAkeTogbWlkZGxlKTtcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAvLyBTb3VyY2Ugb3JkZXJpbmdcbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZmxleC1zb3VyY2Utb3JkZXJpbmctY291bnQge1xuICAgICAgLiN7JC16Zi1zaXplfS1vcmRlci0jeyRpfSB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtb3JkZXIoJGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbmlsbGEgRmxleGJveCBIZWxwZXJzXG4gIEBpbmNsdWRlIGZsZXgtaGVscGVycztcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3IoJHNpemUpIHtcbiAgJHNpemU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkc2l6ZSk7XG4gIC8vIE1heCB2YWx1ZSBpcyAwLjJweCB1bmRlciB0aGUgbmV4dCBicmVha3BvaW50ICgwLjAyIC8gMTYgPSAwLjAwMTI1KS5cbiAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMTMxM1xuICAkc2l6ZTogLXpmLWJwLXRvLWVtKCRzaXplKSAtIC4wMDEyNTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgd2l0aGluIGEgY2VydGFpbiBicmVha3BvaW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3Itb25seSgkc2l6ZSkge1xuICAkbG93ZXItYm91bmQtc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHVwcGVyLWJvdW5kLXNpemU6IC16Zi1tYXAtbmV4dCgkYnJlYWtwb2ludHMsICRzaXplKTtcblxuICAvLyBtb3JlIG9mdGVuIHRoYW4gbm90IHRoaXMgd2lsbCBiZSBjb3JyZWN0LCBqdXN0IG9uZSB0aW1lIHJvdW5kIHRoZSBsb29wIGl0IHdvbid0IHNvIHNldCBpbiBzY29wZSBoZXJlXG4gICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKSAtIC4wMDEyNTtcbiAgLy8gdGVzdCBhY3R1YWwgbG93ZXItYm91bmQtc2l6ZSwgaWYgMCBzZXQgaXQgdG8gMGVtXG4gIEBpZiBzdHJpcC11bml0KCRsb3dlci1ib3VuZC1zaXplKSA9PSAwIHtcbiAgICAkbG93ZXItYm91bmQ6IC16Zi1icC10by1lbSgkbG93ZXItYm91bmQtc2l6ZSk7XG4gIH1cblxuICBAaWYgJHVwcGVyLWJvdW5kLXNpemUgPT0gbnVsbCB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGxvd2VyLWJvdW5kKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdXBwZXItYm91bmQ6IC16Zi1icC10by1lbSgkdXBwZXItYm91bmQtc2l6ZSk7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbG93ZXItYm91bmQpLCBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR1cHBlci1ib3VuZCkge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vLyBTaG93IGFuIGVsZW1lbnQgYnkgZGVmYXVsdCwgYW5kIGhpZGUgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gaGlkZS1mb3IoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLy8gU2hvdyBhbiBlbGVtZW50IGJ5IGRlZmF1bHQsIGFuZCBoaWRlIGl0IGFib3ZlIGEgY2VydGFpbiBzY3JlZW4gc2l6ZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzaXplIC0gQnJlYWtwb2ludCB0byB1c2UuICoqTXVzdCBiZSBhIGJyZWFrcG9pbnQgZGVmaW5lZCBpbiBgJGJyZWFrcG9pbnRzYC4qKlxuQG1peGluIGhpZGUtZm9yLW9ubHkoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBvbmx5KSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXZpc2liaWxpdHktY2xhc3NlcyB7XG4gIC8vIEJhc2ljIGhpZGluZyBjbGFzc2VzXG4gIC5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaW52aXNpYmxlIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBSZXNwb25zaXZlIHZpc2liaWxpdHkgY2xhc3Nlc1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgLmhpZGUtZm9yLSN7JHNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgaGlkZS1mb3IoJHNpemUpO1xuICAgICAgfVxuXG4gICAgICAuc2hvdy1mb3ItI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBzaG93LWZvcigkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhpZGUtZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgaGlkZS1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuXG4gICAgLnNob3ctZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgc2hvdy1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2NyZWVuIHJlYWRlciB2aXNpYmlsaXR5IGNsYXNzZXNcbiAgLy8gTmVlZCBhIFwiaGlkZS1mb3Itc3JcIiBjbGFzcz8gQWRkIGFyaWEtaGlkZGVuPSd0cnVlJyB0byB0aGUgZWxlbWVudFxuICAuc2hvdy1mb3Itc3IsXG4gIC5zaG93LW9uLWZvY3VzIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZTtcbiAgfVxuXG4gIC8vIE9ubHkgZGlzcGxheSB0aGUgZWxlbWVudCB3aGVuIGl0J3MgZm9jdXNlZFxuICAuc2hvdy1vbi1mb2N1cyB7XG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZS1vZmY7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFuZHNjYXBlIGFuZCBwb3J0cmFpdCB2aXNpYmlsaXR5XG4gIC5zaG93LWZvci1sYW5kc2NhcGUsXG4gIC5oaWRlLWZvci1wb3J0cmFpdCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQocG9ydHJhaXQpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuaGlkZS1mb3ItbGFuZHNjYXBlLFxuICAuc2hvdy1mb3ItcG9ydHJhaXQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChwb3J0cmFpdCkge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbiIsIiN0b2FzdC1jb250YWluZXIge1xuXG4gIHotaW5kZXg6IDEwMDAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuXG4gIHBhZGRpbmc6IDguNXZoIDAgMCAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICBkaXYudG9hc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXG4gICAgJi50b2FzdC10ZW1wbGF0ZSB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgc3Bhbi5tZXNzYWdlIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG5cbiAgICAgIHotaW5kZXg6IDEwMDAxO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XG5cbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MjYyNjI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmI2YjZiO1xuICAgICAgcGFkZGluZzogLjNlbSAuNmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAvL29wYWNpdHk6IC45O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogLjQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSIsIi5iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwMDAwO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU1LCA1NSwgNTUsIDAuNik7XG5cbiAgLm1vZGFsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG5cbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogODAlO1xuICAgIG1heC13aWR0aDogbnRoKG50aCgkYnJlYWtwb2ludHMsIDQpLCAyKTtcblxuICAgICYuc21hbGwtbWFyZ2luIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICB3aWR0aDogOTUlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50cyB7XG4gICAgICAmLm1heC0je250aCgkc2l6ZSwgMSl9IHtcbiAgICAgICAgbWF4LXdpZHRoOiBudGgoJHNpemUsIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gICAgfVxuXG4gICAgLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAubG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jbG9zZSB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIC8vY29sb3I6ICNhYWE7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIC8vY29sb3I6IGJsYWNrO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuXG4gICAgICAuYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwLjZlbSAwLjhlbTtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jaG9vc2UtZGlhbG9nLXZhbHVlLXJvd3tcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgICAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogMC4zcmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgfVxuXG4gICAgLy9BZGRpdGlvbmFsIGNsYXNzZXNcbiAgICAmLm5vLXRpdGxlIHtcbiAgICAgIC50aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iLCJAaW1wb3J0IFwibGliL2NvcmVTZXR0aW5nc1wiO1xuQGltcG9ydCBcImZvdW5kYXRpb25TZXR0aW5nc1wiO1xuXG4kZGVmYXVsdFRoZW1lVmFsdWVzOiAoXG4gICAgICAgIGNsYXNzOiBcIlwiLFxuICAvL3RoZW1lQ29sb3I6ICMzODM4MzgsXG4gICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgIG5hdkJhclRleHRDb2xvcjogaW5oZXJpdCxcbiAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNjYWNhY2EsXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYsXG4gICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgaGlnaGxpZ2h0OiAjRDU2QjUyLFxuICAgICAgICB0ZXh0Q29sb3JPbmU6ICNiY2JiYmIsXG4gICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICBjb2xvclR3bzogIzNCM0IzQixcbiAgICAgICAgY29sb3JUaHJlZTogI0ZGRixcbiAgICAgICAgYnV0dG9uQm9yZGVyOiBub25lLFxuICAgICAgICBidXR0b25Db2xvcjogd2hpdGUsXG4pO1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgLy90aGVtZUNvbG9yOiAjMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiBpbmhlcml0LFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6ICNENTZCNTIsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yT25lOiAjYmNiYmJiLFxuICAgICAgICAgICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICAgICAgICAgIGNvbG9yVHdvOiAjM0IzQjNCLFxuICAgICAgICAgICAgICAgIGNvbG9yVGhyZWU6ICNGRkYsXG4gICAgICAgICAgICAgICAgYnV0dG9uQm9yZGVyOiAxcHggc29saWQgYmxhY2ssXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29sb3I6IGJsYWNrLFxuICAgICAgICApLFxuICAgICAgICByZWQ6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiByZWQsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmMDAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM4NzAwMTUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2I3MWMxYSxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmx1ZTooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGJsdWUsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzJjNThhZSxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMxYTMwNjIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzY3M0FCNyxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZ3JlZW46KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBncmVlbixcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzAwMzYxMyxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBwaW5rOihcbiAgICAgICAgICAgICAgICBjbGFzczogcGluayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzcwMzc0YSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBkYXJrOiAoXG4gICAgICAgICAgICAgICAgY2xhc3M6IGRhcmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzM3MzczNyxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM5YjliOWIsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwXG4gICAgICAgIClcbik7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIG5hdmJhckNvbG9yOiByZ2JhKDAsIDIwNSwgMCwgMC41KSwgLy9UT0RPIGJlbnV0emVuXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNmZWZlZmUsXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTtcblxuJHRoZW1lczogbWFwLW1lcmdlKCR0aGVtZXMsIChkYXJrOiAoXG4gICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuKSkpO1xuXG5AZnVuY3Rpb24gcmVjdXJzaXZlLW1hcC1tZXJnZSgkcGFyZW50LW1hcCwgJGNoaWxkLW1hcCkge1xuICAkcmVzdWx0OiAkcGFyZW50LW1hcDtcbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRjaGlsZC1tYXAge1xuICAgIEBpZiAobm90IG1hcC1oYXMta2V5KCRyZXN1bHQsICRrZXkpKSBvciAodHlwZS1vZihtYXAtZ2V0KCRyZXN1bHQsICRrZXkpKSAhPSB0eXBlLW9mKCR2YWx1ZSkpIG9yIChub3QgKHR5cGUtb2YobWFwLWdldCgkcmVzdWx0LCAka2V5KSkgPT0gbWFwIGFuZCB0eXBlLW9mKCR2YWx1ZSkgPT0gbWFwKSkge1xuICAgICAgJHJlc3VsdDogbWFwLW1lcmdlKCRyZXN1bHQsICgka2V5OiAkdmFsdWUpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXN1bHQ6IG1hcC1tZXJnZSgkcmVzdWx0LCAoJGtleTogbm9uLWRlc3RydWN0aXZlLW1hcC1tZXJnZShtYXAtZ2V0KCRyZXN1bHQsICRrZXkpLCAkdmFsdWUpKSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAkdGhlbWVNYXAgOiByZWN1cnNpdmUtbWFwLW1lcmdlKCRkZWZhdWx0VGhlbWVWYWx1ZXMsICR2YWx1ZXMpO1xuICAkdGhlbWVzOiBtYXAtbWVyZ2UoJHRoZW1lcywgKCR0aGVtZTogJHRoZW1lTWFwKSlcbn1cblxuJGJyZWFrcG9pbnRzOiAoXG4gICAgICAgIHNtYWxsOiAwLFxuICAgICAgICBzbWVkaXVtOiA0MDBweCxcbiAgICAgICAgbWVkaXVtOiA2NDBweCxcbiAgICAgICAgbGFyZ2U6IDEwMjRweCxcbiAgICAgICAgeGxhcmdlOiAxMjAwcHgsXG4gICAgICAgIHh4bGFyZ2U6IDE0NDBweCxcbik7XG5cbiRtYXJnaW5zOiAoXG4gICAgICAgIHNtYWxsOiAwLjYyNXJlbSxcbiAgLy9zbWVkaXVtOiAwLjYyNXJlbSxcbiAgICAgICAgbWVkaXVtOiAwLjkzNzVyZW0sXG4gIC8vbGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94bGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94eGxhcmdlOiAwLjkzNzVyZW0sXG4pO1xuXG4kcm90YXRpb25EZWdyZWVzOiAoOTAgMTgwIDI3MCAzNjApO1xuJGFuaW1hdGlvbkR1cmF0aW9uOiAuMjVzO1xuXG4vLyRkZWdyZWVNYXRyaXg6IChcbi8vICAgICAgICAvLzA6bWF0cml4KDEsIDAsIDAsIDEsIDAsIDApLFxuLy8gICAgICAgIDA6cm90YXRlKDBkZWcpLFxuLy8gICAgICAgIDkwOm1hdHJpeCgwLCAxLCAtMSwgMCwgMCwgMCksXG4vLyAgICAgICAgMTgwOm1hdHJpeCgtMSwgMCwgMCwgLTEsIDAsIDApLFxuLy8gICAgICAgIDI3MDptYXRyaXgoMCwgLTEsIDEsIDAsIDAsIDApLFxuLy8gICAgICAgIC8vMzYwOm1hdHJpeCgwLjk5OTk5LCAwLCAwLCAwLjk5OTk5LCAwLCAwKSxcbi8vICAgICAgICAvLzQ1MDptYXRyaXgoMCwgMSwgLTEsIDAsIDAsIDApLFxuLy8gICAgICAgICAgMzYwOnJvdGF0ZSgzNjBkZWcpLFxuLy8gICAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuLy8pO1xuJGRlZ3JlZU1hdHJpeDogKFxuICAgICAgICAwOnJvdGF0ZSgwZGVnKSxcbiAgICAgICAgOTA6cm90YXRlKDkwZGVnKSxcbiAgICAgICAgMTgwOnJvdGF0ZSgxODBkZWcpLFxuICAgICAgICAyNzA6cm90YXRlKDI3MGRlZyksXG4gICAgICAgIDM2MDpyb3RhdGUoMzYwZGVnKSxcbiAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuKTsiLCIkaW52YWxpZEJveFNoYWRvdzogMCAwIDJweCAycHggI2ZmNjc3NjtcbiRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjogcmdiKDIzMCwgMjMwLCAyMzApO1xuJGlucHV0Qm9yZGVyQm90dG9tOiBzb2xpZCAxcHggIzYyNjI2MjtcblxubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sXG4gIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sXG4gIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT0ndGV4dCddLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogJGlucHV0Qm9yZGVyQm90dG9tO1xuICAgIG91dGxpbmU6IDA7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcblxuICAgICY6aW52YWxpZCB7XG4gICAgICBib3gtc2hhZG93OiAkaW52YWxpZEJveFNoYWRvdztcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b206ICRpbnB1dEJvcmRlckJvdHRvbTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG5cbiAgICAgICY6aW52YWxpZCB7XG4gICAgICAgIGJveC1zaGFkb3c6ICRpbnZhbGlkQm94U2hhZG93O1xuICAgICAgfVxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpLCAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIHRvcDogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgfiBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGJvdHRvbTogMTBweDtcbiAgICAgIHRvcDogN3B4O1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcbiAgICAgIGNvbG9yOiAjNjI2MjYyO1xuICAgIH1cbiAgfVxuXG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IDEwcmVtO1xuICAgIC8vYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMzYsIDEzNiwgMTM2LCAwLjMxKTtcbiAgICAvL2JveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICB9XG5cbiAgW3R5cGU9XCJjaGVja2JveFwiXS5iZWZvcmUtdGV4dCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ+Zm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuJG5hdkNvbG9yQmxhY2s6ICMwMDAgIWRlZmF1bHQ7XG4kbmF2Qm9yZGVyQ29sb3JCbGFjazogIzdGN0Y3RiAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kQmxhY2s6ICNmZmYgIWRlZmF1bHQ7XG5cbiRuYXZDb2xvcldoaXRlOiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yV2hpdGU6ICMxZTFjMWMgIWRlZmF1bHQ7XG4kbmF2QmFja2dyb3VuZFdoaXRlOiAjMDAwICFkZWZhdWx0O1xuXG4kbmF2Q29sb3JEZWZhdWx0OiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yRGVmYXVsdDogIzFlMWMxYyAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kRGVmYXVsdDogIzAwMCAhZGVmYXVsdDtcblxuJG5hdkJhY2tncm91bmRXaXRoSW1hZ2U6IHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG5uYXYudG9wLWJhciB7XG4gIHotaW5kZXg6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmREZWZhdWx0O1xuICBjb2xvcjogJG5hdkNvbG9yRGVmYXVsdDtcbiAgc3Ryb2tlOiAkbmF2Q29sb3JEZWZhdWx0O1xuICBwYWRkaW5nOiAwO1xuXG4gICY6bm90KC53aXRoLWltYWdlKSB7XG5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCwgJHZhbHVlIGluICRtYXJnaW5zIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLSR2YWx1ZTtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgKyAjezIqJHZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiBzcGFuIHtcbiAgICA+IHNwYW4ge1xuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmFjay1idXR0b24ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDAuNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgfVxuXG4gICAgICAmLmhpZGRlbiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudG9wLWJhci10aXRsZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgIH1cblxuICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHotaW5kZXg6IDg5OTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgLm1lbnUtaWNvbiB7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvckRlZmF1bHQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JEZWZhdWx0LCAwIDE0cHggMCAkbmF2Q29sb3JEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5tZW51LWljb24ge1xuICAgICAgICAvL25vaW5zcGVjdGlvbiBDc3NJbnZhbGlkUHJvcGVydHlWYWx1ZVxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLXdlYmtpdC1iYXNlbGluZS1taWRkbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIC8vcmlnaHQ6IC0xMDAlO1xuICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dDtcblxuICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3JEZWZhdWx0O1xuICAgICAgICAvL3BhZGRpbmc6IDAuMnJlbTtcbiAgICAgICAgcGFkZGluZzogNC41cmVtIDEuNjVyZW0gMHJlbSAyLjc1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICByaWdodDogLTEwMDAlOyAvL2bDvHIga2xlaW5lIEJpbGRzY2hpcm1lLCB0YXVjaHQgZXMgcmVjaHRzIHdpZWRlciBhdWYsIGZhbGxzIG51ciAxMDAlXG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4xNXJlbTtcblxuICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJi5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuXG4gICAgICAgICAgICB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICAgICAgdG9wOiBhdXRvO1xuXG4gICAgICAgICAgICAgID4gbGksID4gLmNsb3NlLWxpc3RlbmVyIHtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gYTphZnRlciB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICBib3JkZXI6IDZweCBpbnNldDtcbiAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZmZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgICAgKyBzcGFuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICAgICAgICAmLnNtZWRpdW0ge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAmLm1lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAgICYubGFyZ2Uge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYubmV2ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmFsd2F5cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5uYXZiYXItbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiBpbml0aWFsO1xuXG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHotaW5kZXg6IDkwMDA7XG5cbiAgICAgIGEge1xuICAgICAgICBpbWcgKyBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuXG4gICAgICAgICYuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQge1xuICAgICAgICAgIHotaW5kZXg6IDkwMDE7XG4gICAgICAgIH1cblxuICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5uZXZlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubWVudSwgJi5tZW51IHtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIC8vdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC42OHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm5vdCguaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNjhyZW07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuaW1nIGEge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkgPiB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XG5cbiAgICAgICAgICBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkub3BlbnMtcmlnaHQgPiBhIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgcmlnaHQ6IDAuMXJlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc3VibWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgJi53aXRoLWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdpdGhJbWFnZTtcblxuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cywgYmFja2dyb3VuZCAwLjBzO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJhY2tncm91bmQgMC4wcztcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgIH1cblxuICAgIC5iYWNrZ3JvdW5kLWltZyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLSR2YWx1ZTtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtaW4td2lkdGg6IDIuNSokdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHNwYW4ge1xuICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcblxuICAgICAgPiBzcGFuID4gc3BhbiB7XG4gICAgICAgIC8vQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIC8vICBAaW5jbHVkZSBicmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgICAgIC8vICAgIHBhZGRpbmctbGVmdDogJHZhbHVlO1xuICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IDIqJHZhbHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIC8vfVxuICAgICAgICAvL31cbiAgICAgIH1cblxuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICB9XG5cbiAgICAgIC50b3AtYmFyLXRpdGxlIHtcblxuICAgICAgfVxuXG4gICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyLWNvbnRhaW5lciB7XG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgei1pbmRleDogOTEwMDtcbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG5cbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5jb2xvci1ibGFjayB7XG4gICAgICBjb2xvcjogJG5hdkNvbG9yQmxhY2s7XG4gICAgICBzdHJva2U6ICRuYXZDb2xvckJsYWNrO1xuXG4gICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG5hdkJvcmRlckNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgICAubWVudS1pY29uOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JCbGFjaywgMCAxNHB4IDAgJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgY29sb3I6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgc3Ryb2tlOiAkbmF2Q29sb3JXaGl0ZTtcblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICAgIC5oaWRkZW4tbWVudSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRuYXZCb3JkZXJDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgLm1lbnUtaWNvbjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgN3B4IDAgJG5hdkNvbG9yV2hpdGUsIDAgMTRweCAwICRuYXZDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5zdWJtZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnNvbGlkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kRGVmYXVsdDtcblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLy9iYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICAgIH1cblxuICAgICAgICAudG9wLWJhci10aXRsZSB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItbWVudS12aXNpYmxlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuXG4gICAgICAgIH1cblxuICAgICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2Qm9yZGVyQ29sb3JCbGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLW1lbnUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5jb2xvci1ibGFjayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kQmxhY2s7XG4gICAgICB9XG5cbiAgICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyNsb2dvIHtcbi8vICBtYXgtd2lkdGg6IDJyZW07XG4vLyAgdHJhbnNpdGlvbjogbm9uZTtcbi8vfVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5kcm9wZG93bi5tZW51IC5hY2NvcmRpb24tbWVudSAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50Om5vdCguaGFzLXN1Ym1lbnUtdG9nZ2xlKSxcbiNuYXZiYXItbWVudS1oaWRkZW4gLmFjY29yZGlvbi1tZW51IC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4ge1xuICBhIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAwLjFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwgYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUuaXMtYWNjb3JkaW9uLXN1Ym1lbnUge1xuICBtYXJnaW4tbGVmdDogMC43cmVtO1xufVxuXG4ubWVudSB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgdHJhbnNpdGlvbjogMC4yNXM7XG4gIC8vb3ZlcmZsb3cteTpoaWRkZW47XG59XG5cblxuI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUgYnV0dG9uIHtcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG59XG5cbi5kcm9wZG93bi5tZW51ID4gbGkuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50IHtcbiAgLy8+IGE6YWZ0ZXIge1xuICAvLyAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAvL31cblxuICA+IHVsLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cblxuI25hdmJhci1mcmFnbWVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubG9nbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAubG9nby1pbWcge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICAgIG1heC13aWR0aDogMi4zNXJlbTtcbiAgfVxufVxuIiwiJGJvcmRlci1jb2xvcjogI0U2RTZFNjtcblxuLnRhYi1mcmFnbWVudCB7XG4gIC50YWItbmFtZXMge1xuICAgIC50YWItYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIHBhZGRpbmc6IDAuM3JlbTtcblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWItY29udGVudCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIC50YWItc2l0ZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnRhYi1idXR0b24tdGVtcGxhdGUsIC50YWItc2l0ZS10ZW1wbGF0ZXtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJvcmRlci1ib3R0b20ge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICB9XG59IiwiLmFscGhhYmV0aWMtbGlzdHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1jb250YWluZXJ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1zaWRlYWxwaGFiZXR7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC5hbHBoYWJldC1zY3JvbGwtdG8ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgaGVpZ2h0OiAzLjglO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pe1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi53aW5kb3ctY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2IxYjFiMTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjdXJzb3I6IGdyYWI7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMTByZW07XG4gIG1pbi1oZWlnaHQ6IDNyZW07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB6LWluZGV4OiAxMDAwO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgJi5hY3RpdmUtd2luZG93e1xuICAgIHotaW5kZXg6IDExMDA7XG4gIH1cblxuICAud2luZG93LXJlc2l6ZSB7XG4gICAgJHJlc2l6ZVdpZHRoOiA0cHg7XG5cbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICYuZWRnZSB7XG4gICAgICB3aWR0aDogJHJlc2l6ZVdpZHRoO1xuICAgICAgaGVpZ2h0OiAkcmVzaXplV2lkdGg7XG5cbiAgICAgICYubnd7XG4gICAgICAgIGN1cnNvcjogbnctcmVzaXplO1xuICAgICAgfVxuICAgICAgJi5uZXtcbiAgICAgICAgY3Vyc29yOiBuZS1yZXNpemU7XG4gICAgICB9XG4gICAgICAmLnN3e1xuICAgICAgICBjdXJzb3I6IHN3LXJlc2l6ZTtcbiAgICAgIH1cbiAgICAgICYuc2V7XG4gICAgICAgIGN1cnNvcjogc2UtcmVzaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAmLmJvdHRvbSwgJi50b3B7XG4gICAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcbiAgICAgIGhlaWdodDogJHJlc2l6ZVdpZHRoO1xuICAgIH1cbiAgICAmLmxlZnQsICYucmlnaHR7XG4gICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgIHdpZHRoOiAkcmVzaXplV2lkdGg7XG4gICAgfVxuICB9XG5cbiAgI3RpdGxlIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAvL21hcmdpbjogMCAwIDAuNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAvL2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYjZiNmI2O1xuICB9XG5cbiAgI3RpdGxlLWJ1dHRvbnMge1xuICAgIC50aXRsZS1idXR0b24ge1xuICAgICAgbWF4LWhlaWdodDogMXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJi5tb3Zpbmcge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gIH1cblxuICAmLm1pbmltaXplZCB7XG4gICAgcGFkZGluZzogMC4ycmVtO1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgICAud2luZG93IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxle1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAjdGl0bGUtYnV0dG9ucyAudGl0bGUtYnV0dG9uLmhpZGUtbWluaW1pemVke1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmLm1heGltaXplZCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLW1heGltaXplZHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5wb3B1cCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLXBvcHVwe1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAud2luZG93IHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBjdXJzb3I6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8vbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgLy9tYXgtd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG59IiwiLmltYWdlLXNlbGVjdGlvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGhlaWdodDogMTAwJTtcblxuICAmLmhpZ2hsaWdodHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE3MywgMjE2LCAyMzAsIDAuNCk7XG4gIH1cblxuICA+IC5mbGV4LWNvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmltYWdlLXNlbGVjdGlvbi1jYXRlZ29yeS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWNhdGVnb3J5IHtcbiAgICAgIC5pbWFnZS1zZWxlY3Rpb24tY2F0ZWdvcnktbmFtZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbWFnZS1zZWxlY3Rpb24tcHJldmlldyB7XG4gICAgd2lkdGg6IDIwJTtcbiAgICBtaW4td2lkdGg6IDRyZW07XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA0cmVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwLjE1cmVtO1xuXG4gICAgLmltYWdlLXNlbGVjdGlvbi1pbWFnZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMS41cmVtKTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICB9XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLW5hbWUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgfVxufVxuIiwiQGltcG9ydCBcInRvYXN0XCI7XG5AaW1wb3J0IFwiZGlhbG9nXCI7XG5AaW1wb3J0IFwiZm9ybVwiO1xuQGltcG9ydCBcIm5hdmJhclwiO1xuQGltcG9ydCBcInN3aXBlRnJhZ21lbnRcIjtcbkBpbXBvcnQgXCJ0YWJiZWRGcmFnbWVudFwiO1xuQGltcG9ydCBcImFscGhhYmV0aWNMaXN0XCI7XG5AaW1wb3J0IFwiYWJzdHJhY3RXaW5kb3dcIjtcbkBpbXBvcnQgXCJpbWFnZVNlbGVjdGlvbkVsZW1lbnRcIjtcblxuLm1heC1oZWlnaHQtMTAwe1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiIsIiRyaWdodHM6IFthZG1pbiwgbG9nZ2VkSW4sIGxvZ2dlZE91dCwgb25saW5lLCBvZmZsaW5lLCBkZWZhdWx0IF07XG5cbmJvZHkge1xuICBAZWFjaCAkcmlnaHQgaW4gJHJpZ2h0cyB7XG4gICAgJjpub3QoLmFjY2Vzcy0jeyRyaWdodH0pIC5hY2Nlc3MtI3skcmlnaHR9IHtcbiAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICB9XG4gIH1cbn1cbiIsIi5zaGFyZS1pY29uIHtcbiAgd2lkdGg6IDEuNXJlbTtcbiAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIG1hcmdpbjogMC4xcmVtO1xuXG4gIHN2Z3tcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIG1heC13aWR0aDogMS41cmVtO1xuICB9XG59XG4iLCIvL0BpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuKiwgOmFmdGVyLCA6YmVmb3JlIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC8vZm9udC1zaXplOiAxOHB4O1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xufVxuXG4ubWF4LWhlaWdodCB7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gIGNvbG9yOiAjMGEwYTBhO1xufVxuXG5mb290ZXIge1xuICBib3JkZXItdG9wOiAjZDhkOGQ4IHNvbGlkIDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udG9wLWJhciAudG9wLWJhci10aXRsZSBzdHJvbmcge1xuICAvL21hcmdpbi10b3A6IDdweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAvKm1hcmdpbi1sZWZ0OiA4cHg7Ki9cbn1cblxubmF2LnRvcC1iYXIge1xuXG4gIGNvbG9yOiAjRkZGO1xuICAvL2JhY2tncm91bmQ6ICMzRjUxQjU7XG4gIC8vYmFja2dyb3VuZDogcmVkO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDlweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA0cHggMnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBwYWRkaW5nOiAwLjZyZW07XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5idXR0b24uYnV0dG9uLCBhLmJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgLy9iYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XG4gICYuZGlzYWJsZWQsICYuZGlzYWJsZWQ6aG92ZXIsICYuZGlzYWJsZWQ6Zm9jdXMge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICB9XG4gICY6Zm9jdXMsICY6aG92ZXIge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogI2UwMDAwMDtcbiAgfVxufVxuXG4uZmlsbC1tZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICYudmVydGljYWwge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbiAgLmdyb3cge1xuICAgIGZsZXg6IDE7XG4gIH1cbn1cblxuLmZsZXgtY2VudGVyIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC8vbWFyZ2luOiBhdXRvO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICA+ICoge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUgYSwgLmRyb3Bkb3duLm1lbnUgYSB7XG4gIHBhZGRpbmc6IC40cmVtIC41cmVtXG59XG5cbnN2ZyBwYXRoIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG5kaXYubWFpbkNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgZmxleDogMTtcbiAgbWFyZ2luOiAwLjVyZW07XG4gID4gLnJvdywgI21haW4tY29udGVudCwgI3NpdGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIC8vbGVmdDogLjYyNXJlbTtcbiAgICByaWdodDogMDtcbiAgICAvL3JpZ2h0OiAuNjI1cmVtO1xuICB9XG59XG5cbi5pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuI2xvZ28taW1nIHtcbiAgbWF4LWhlaWdodDogMi4ycmVtO1xufVxuXG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5hLmhpZGRlbi1saW5rIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxubGFiZWwge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5hbGlnbi1yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4udmlldy1wYW5lbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sb2FkZXIge1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJi5pbmxpbmUge1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgdG9wOiBpbml0aWFsO1xuICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBpbml0aWFsO1xuICAgIHRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICB9XG5cbiAgJi5zbWFsbCAjc3Bpbm5lciB7XG5cbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XG4gIH1cblxuICAjc3Bpbm5lciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBzdHJva2U6ICNiNzFjMWE7XG4gICAgc3Ryb2tlLXdpZHRoOiAzcHg7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xuICAgIGFuaW1hdGlvbjogbGluZSAxLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUsIHJvdGF0ZSAxLjZzIGxpbmVhciBpbmZpbml0ZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NTBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgbGluZSB7XG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCA4NS45NjQ7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7XG4gIH1cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiA2NS45NzMsIDIxLjk5MTE7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtNjUuOTczO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgfVxufVxuXG4jcHJpbnQtY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5hY3Rpb24tYnV0dG9uIHtcbiAgbWF4LWhlaWdodDogMS43cmVtO1xuICBtYXJnaW4tbGVmdDogMC40cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNHJlbTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJGhvdmVyQ29sb3JEYXJrO1xuICB9XG59XG5cbi52Y2VudGVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvL2Rpc3BsYXk6IGZsZXg7XG4gIC8vanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vZmxleC13cmFwOiB3cmFwO1xuXG4gIC52Y2VudGVyIHtcbiAgICAvL2Rpc3BsYXk6IGZsZXg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cblxuLm1heC13aWR0aCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5pbnB1dCwgYnV0dG9uIHtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweCAhaW1wb3J0YW50O1xufVxuXG4ubm8tcGFkZGluZyB7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLmNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgbmF2LCAubWFpbkNvbnRhaW5lciwgZm9vdGVyLCAjc3R5bGVzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgI3ByaW50LWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLm92ZXJmbG93LXktYXV0byB7XG4gIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDtcbn1cblxuLnJvdy5uby1hZnRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IGluaXRpYWw7XG59XG5cbi5tYXJnaW4tYm90dG9tIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgfVxuICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgIG1hcmdpbi1ib3R0b206IDNyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZSkge1xuICAgIG1hcmdpbi1ib3R0b206IDRyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCh4bGFyZ2UpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cmVtO1xuICB9XG59XG5cbi5mb250LXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjdlbTtcbn1cblxuLmJvcmRlci1ib3R0b20ge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbi5ib3JkZXItcmlnaHQge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbn1cblxuLmJvcmRlci1sZWZ0IHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbn1cblxuaW1nLmxvZ28ge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC13aWR0aDogMS4xcmVtO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbn1cblxuLmFsaWduLWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuaHIuc2VwYXJhdG9yIHtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG5cbi5idXR0b24tbGluZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC5idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgbWFyZ2luLWxlZnQ6IDFweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFweDtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC43N3JlbTtcbiAgfVxufVxuXG4uc21hbGwtc21hbGwge1xuICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICBmb250LXNpemU6IHNtYWxsO1xuICB9XG59XG5cbnNlbGVjdCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMC4zcmVtIDAuM3JlbTtcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uby10cmFuc2l0aW9uIHtcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5pbWcuYWN0aW9uLWltYWdlIHtcbiAgbWF4LWhlaWdodDogMS40cmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmltZy5iYWNrLWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG59XG5cbi5uby1tYXJnaW4tYm90dG9tIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbiIsIlxuJGhvdmVyQ29sb3I6ICNmMmYyZjI7XG4kaG92ZXJDb2xvckRhcms6ICNlOGU4ZTg7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGFyazogKFxuICAgICAgICAgICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMzNzM3MzcsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjNGI0YjRiLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjOWI5YjliLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuICAgICAgICApXG4pOyIsIi8vQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm91bmRhdGlvblwiO1xuXG4uc2V0dGluZ3MtY29udGFpbmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcGFkZGluZzogMC4zcmVtO1xuXG4gICNzZXR0aW5ncy1mcmFnbWVudHMtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAjc2V0dGluZ3MtZnJhZ21lbnRzIHtcbiAgICAgID4gKiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5zd2l0Y2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiBpbml0aWFsO1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIGZvbnQtc2l6ZTogMC42ZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICB9XG5cbiAgaW5wdXQge1xuXG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICY6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS41ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6Zm9jdXMgKyAuc2xpZGVyIHtcbiAgICAgIC8vYm94LXNoYWRvdzogMCAwIDFweCAjMjE5NkYzO1xuICAgIH1cbiAgfVxuXG4gIC5zbGlkZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAzZW07XG4gICAgaGVpZ2h0OiAxLjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxLjVlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICAgIHRyYW5zaXRpb246IC40cztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi10b3A6IDA7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAxLjFlbTtcbiAgICAgIHdpZHRoOiAxLjFlbTtcbiAgICAgIGxlZnQ6IDAuMTVlbTtcbiAgICAgIGJvdHRvbTogMC4xNWVtO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICB0cmFuc2l0aW9uOiAuNHM7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgfVxuICB9XG5cbiAgaW1nLCBzdmcge1xuICAgIHdpZHRoOiAxLjRlbTtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG5cbiAgICBwYXRoIHtcbiAgICAgIHN0cm9rZS1jb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxubGFiZWwge1xuICBmb250LXNpemU6IDFlbSAhaW1wb3J0YW50O1xuXG59XG5cbi5zZXR0aW5nLXJvdzpub3QoLmhpZGRlbikge1xuICBsaW5lLWhlaWdodDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMC41cmVtIDAuNHJlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICB3aWR0aDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDE5NSwgMTk1LCAxOTUsIDAuMTMpO1xuXG4gID4gKiB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuIiwiLnpmLWdyZWVuIHtcbiAgY29sb3I6ICM2OGI2MDRcbn1cblxuLmNvbHVtbjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLCAuY29sdW1uczpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgZmxvYXQ6IGxlZnRcbn1cblxuaW5wdXRbdHlwZT1jaGVja0JveF0uZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgd2lkdGg6IDEwMCVcbn1cblxuW3R5cGU9c3VibWl0XSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzOXB4O1xuICBoZWlnaHQ6IDIuNDM3NXJlbTtcbiAgcGFkZGluZzogOHB4O1xuICBwYWRkaW5nOiAuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NhY2FjYTtcbiAgbWFyZ2luOiAwIDAgMTZweDtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogIzBhMGEwYTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IGhzbGEoMCwgMCUsIDQlLCAuMSk7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzLCBib3JkZXItY29sb3IgLjI1cyBlYXNlLWluLW91dDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmVcbn1cblxuZm9ybSB1bCBsaSB7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTIuOHB4O1xuICBmb250LXNpemU6IC44cmVtXG59XG5cbi5idXR0b24tZHJvcGRvd246YWZ0ZXIge1xuICBib3JkZXItY29sb3I6ICMwMDAgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci13aWR0aDogLjRlbTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC40ZW07XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHdpZHRoOiAwO1xuICByaWdodDogMWVtXG59XG5cbi5idXR0b24tZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXJpZ2h0OiAyZW1cbn1cblxuLmJ1dHRvbi1kcm9wZG93bi5vcGVuOmFmdGVyIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMDAwO1xuICB0b3A6IDBcbn1cblxuYS51aS1kYXRlcGlja2VyLW5leHQsIGEudWktZGF0ZXBpY2tlci1wcmV2IHtcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnRcbn1cblxuZGl2LmNvbnRhaW5lciBhLm5hdmJhci1icmFuZCA+IGltZyB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWFyZ2luLXJpZ2h0OiA0cHhcbn1cblxudWwubWVudS5wbGFpbiBsaS5hY3RpdmUgYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7XG4gIGNvbG9yOiAjMDAwXG59XG5cbnVsLm1lbnUucGxhaW4gbGkgYSB7XG4gIGNvbG9yOiAjMDAwXG59XG5cbnVsLm1lbnUucGxhaW4gbGkgYTpob3ZlciB7XG4gIGNvbG9yOiAjNTI1MjUyXG59XG5cbnVsLnN1Ym1lbnUge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2JjYmNiYztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNiY2JjYmM7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4XG59XG5cbiNjb29raWUtY29tcGxpYW5jZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDA7XG4gIHBhZGRpbmc6IDAuM3JlbSAwO1xuICAjY2xvc2UtY29va2llLW1zZyB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgcGFkZGluZzogMC40cmVtIDAuOHJlbTtcbiAgfVxufVxuXG4ubWVudS1jb250YWluZXIgLmJ1dHRvblxue1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5AZm9yICRpIGZyb20gMSB0aHJvdWdoIDIwIHtcbiAgJGZhY3RvcjogJGkvMjA7XG4gICR2YWx1ZTogcGVyY2VudGFnZSgkZmFjdG9yKTtcbiAgLmhlaWdodC0jeyRmYWN0b3IqMTAwfSB7XG4gICAgaGVpZ2h0OiAkdmFsdWU7XG4gIH1cbiAgLm1heC1oZWlnaHQtI3skZmFjdG9yKjEwMH0ge1xuICAgIG1heC1oZWlnaHQ6ICR2YWx1ZTtcbiAgfVxuICAud2lkdGgtI3skZmFjdG9yKjEwMH0ge1xuICAgIHdpZHRoOiAkdmFsdWU7XG4gIH1cbiAgLm1heC13aWR0aC0jeyRmYWN0b3IqMTAwfSB7XG4gICAgbWF4LXdpZHRoOiAkdmFsdWU7XG4gIH1cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn0iLCIqIHtcbiAgLy90cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZS1vdXQsIGNvbG9yIC4yNXMgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IC4yNXMgZWFzZS1vdXQsIGNvbG9yIC4yNXMgZWFzZS1vdXQ7XG59XG5cbkBtaXhpbiBkZWZpbmVUaGVtZSgkdGhlbWUpIHtcbiAgYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcik7XG5cbiAgI2Nvb2tpZS1jb21wbGlhbmNlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRUaGVtZUNvbG9yKTtcbiAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIG5hdkJhclRleHRDb2xvcik7XG4gICAgYS5saW5rIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRMaW5rQ29sb3IpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0NvbG9yKTtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0hvdmVyQ29sb3IpO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRMaW5rSG92ZXJDb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGEubGluayB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0NvbG9yKTtcbiAgICBib3JkZXItYm90dG9tOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0JvcmRlckJvdHRvbSk7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpbmtIb3ZlckNvbG9yKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaW5rSG92ZXJDb2xvcik7XG4gICAgfVxuICB9XG4gIC5sb2FkZXIgI3NwaW5uZXIge1xuICAgIHN0cm9rZTogbWFwLWdldCgkdGhlbWUsIHNwaW5uZXJDb2xvcik7XG4gIH1cblxuICBuYXYudG9wLWJhciB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgfVxuICAudG9wLWJhciB7XG4gICAgdWwge1xuICAgICAgYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpICFpbXBvcnRhbnQ7XG4gICAgICBhIHtcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBidXR0b24uYnV0dG9uLCBhLmJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgICYuZGlzYWJsZWQsICYuZGlzYWJsZWQ6aG92ZXIsICYuZGlzYWJsZWQ6Zm9jdXMsICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgIH1cbiAgfVxuICAuc3dpdGNoIHtcbiAgICBpbnB1dCB7XG4gICAgICAmOmNoZWNrZWQgKyAuc2xpZGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgICAgfVxuICAgICAgJjpmb2N1cyArIC5zbGlkZXIge1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMXB4IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGFiZWwge1xuICAgIGNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgfVxuICAuYmFja2dyb3VuZCAubW9kYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIH1cblxuICBzdmcge1xuICAgIC5maWxsLWNvbG9yLCAmLmZpbGwtY29sb3J7XG4gICAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICAgIC5maWxsLWJhY2tncm91bmQsICYuZmlsbC1iYWNrZ3JvdW5ke1xuICAgICAgZmlsbDogI2ZlZmVmZTtcbiAgICB9XG4gIH1cblxuICAvL0Zvcm1zXG4gIGxhYmVsIHtcbiAgICBbdHlwZT0ndGV4dCddLCBbdHlwZT0ncGFzc3dvcmQnXSwgW3R5cGU9J2RhdGUnXSwgW3R5cGU9J2RhdGV0aW1lJ10sIFt0eXBlPSdkYXRldGltZS1sb2NhbCddLCBbdHlwZT0nbW9udGgnXSwgW3R5cGU9J3dlZWsnXSwgW3R5cGU9J2VtYWlsJ10sIFt0eXBlPSdudW1iZXInXSwgW3R5cGU9J3NlYXJjaCddLCBbdHlwZT0ndGVsJ10sIFt0eXBlPSd0aW1lJ10sIFt0eXBlPSd1cmwnXSwgW3R5cGU9J2NvbG9yJ10sIHRleHRhcmVhLCBpbnB1dFt0eXBlPXRleHRdLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICAgIGJhY2tncm91bmQ6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTtcbiAgICAgIGNvbG9yOiN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICB9XG4gICAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpIHtcbiAgICAgICAgfiBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIGNvbG9yOiAje2FkanVzdF9jb2xvciggbWFwLWdldCgkdGhlbWUsIHRleHRDb2xvciksICRhbHBoYTogLTAuMzUpfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGV4dGFyZWEge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDNweCAycHggaHNsYSgwLCAwJSwgNTMlLCAuMzEpICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIGlucHV0Lm5vdEVtcHR5OmludmFsaWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICN7YWRqdXN0X2NvbG9yKCBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvciksICRhbHBoYTogLTAuMzUpfTtcbiAgfVxufVxuXG5ib2R5IHtcbiAgQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAgIEBpZiAobWFwLWdldCgkdmFsdWVzLCBjbGFzcykgPT0gXCJcIikge1xuICAgICAgQGluY2x1ZGUgZGVmaW5lVGhlbWUoJHZhbHVlcylcbiAgICB9IEBlbHNlIHtcbiAgICAgICYuI3ttYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKX0ge1xuICAgICAgICBAaW5jbHVkZSBkZWZpbmVUaGVtZSgkdmFsdWVzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQGtleWZyYW1lcyB0dXRvcmlhbFBvaW50ZXIge1xuICAwJSB7XG4gICAgdG9wOiAyNSU7XG4gIH1cbiAgMTAwJSB7XG4gICAgdG9wOiA3NSU7XG4gIH1cbn1cblxuLnR1dG9yaWFsLWJsYW5rZXQge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcblxuICB6LWluZGV4OiA5MDAxO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDU1LCA1NSwgNTUsIDAuNTEpO1xufVxuXG4udHV0b3JpYWwge1xuICAudHV0b3JpYWwtYmxhbmtldCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAudHV0b3JpYWwtdGV4dCB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTEge1xuICAgICNsZXZlbCB7XG4gICAgICAuc2VnbWVudC1yb3cge1xuICAgICAgICBwb3NpdGlvbjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLnNlZ21lbnQtcGFyZW50Om50aC1jaGlsZCgzKSwgLnNlZ21lbnQtcGFyZW50Om50aC1jaGlsZCgzKS5yb3RhdGluZyB7XG4gICAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudHV0b3JpYWwtdGV4dCAuc3RlcC0xIHtcbiAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTIge1xuICAgICNsZXZlbCB7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMiB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0zIHtcbiAgICAudHV0b3JpYWwtdGV4dCAuc3RlcC0zIHtcbiAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLnRvcC1iYXIge1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5oZWxwLWFjdGlvbiB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDEwcHg7XG5cbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIC8vei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMTBweCA1cHggI2ZmZjtcbiAgICB9XG4gIH1cblxuICAmLnN0ZXAtNCB7XG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtNCB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgICNsZXZlbCB7XG4gICAgICAuc2VnbWVudC1yb3cge1xuICAgICAgICBwb3NpdGlvbjogaW5oZXJpdDtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgIC5zZWdtZW50LXBhcmVudC5sYXllci0yLCA+IC5zZWdtZW50LXBhcmVudC5sYXllci0yLnJvdGF0aW5nIHtcbiAgICAgICAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcblxuICAgICAgICAgICAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgICAgICAgICAgICB3aWR0aDogMC42ZW07XG4gICAgICAgICAgICAgIGhlaWdodDogMC42ZW07XG4gICAgICAgICAgICAgIC8vYmFja2dyb3VuZDogcmVkO1xuXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICAgICAgICAgICAgICBsZWZ0OiA3NSU7XG4gICAgICAgICAgICAgIC8vcmlnaHQ6IDUwJTtcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICB0b3A6IDc1JTtcbiAgICAgICAgICAgICAgLy9ib3R0b206IDUwJTtcbiAgICAgICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG5cbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0dXRvcmlhbFBvaW50ZXIgMnMgaW5maW5pdGU7XG4gICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4jdHV0b3JpYWwtc2l0ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICN0dXRvcmlhbC0xLCAjdHV0b3JpYWwtMiwgI3R1dG9yaWFsLTN7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDAuN3JlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIH1cblxuICAjdHV0b3JpYWwtMiAuaGVscC1hY3Rpb257XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICB9XG4gICN0dXRvcmlhbC0zIC50dXRvcmlhbC13cmFwcGVye1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAjdHV0b3JpYWwtcG9pbnRlciB7XG4gICAgICB3aWR0aDogMC42ZW07XG4gICAgICBoZWlnaHQ6IDAuNmVtO1xuXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgICAgIGxlZnQ6IDc1JTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNzUlO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgICBhbmltYXRpb246IHR1dG9yaWFsUG9pbnRlciAycyBpbmZpbml0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGFkZFRoZW1lRGVmaW5pdGlvbigkdGhlbWUpIHtcbiAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgIGJhY2tncm91bmQ6ICN7bWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpfTtcbiAgfVxuXG4gICNsZXZlbC1udW1iZXItY29udGFpbmVyIHtcbiAgICAmLmluLW1haW4tbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKX07XG4gICAgICBib3JkZXItY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgIH1cbiAgfVxuICAuc2VnbWVudC5zZWdtZW50LXBhcmVudCB7XG4gICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IyKX07XG5cbiAgICAmLmxheWVyLTIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICB9XG4gIH1cblxuICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCBsaWdodFRoZW1lQ29sb3IpfTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX0gIWltcG9ydGFudDtcblxuICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50LWxlYWYge1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICAgICAvL2JvcmRlci1jb2xvcjogICN7bWFwLWdldCgkdGhlbWUsIGxpZ2h0VGhlbWVDb2xvcil9O1xuICAgICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiN7bWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpfSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICAuc2VnbWVudDpub3QoLnNlZ21lbnQtcm93KTpub3QoLnNlZ21lbnQtdHJpYW5nbGUpIHtcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9OztcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9OztcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKTtcbiAgICAgICAgICAgICAgQGlmICRhbmltYXRpb25OYW1lPT0wIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogMzYwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vLnNldHRpbmctcm93e1xuICAvLyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgLy8gICY6bm90KC5oaWRkZW4pOmZpcnN0LWNoaWxke1xuICAvLyAgICBib3JkZXItdG9wOiAxcHggc29saWQgICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAvLyAgfVxuICAvL31cbn1cblxuYm9keSB7XG4gIEBlYWNoICR0aGVtZSwgJHZhbHVlcyBpbiAkdGhlbWVzIHtcbiAgICBAaWYgKG1hcC1nZXQoJHZhbHVlcywgY2xhc3MpID09ICcnKSB7XG4gICAgICBAaW5jbHVkZSBhZGRUaGVtZURlZmluaXRpb24oJHZhbHVlcylcbiAgICB9IEBlbHNlIHtcbiAgICAgICYuI3ttYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKX0ge1xuICAgICAgICBAaW5jbHVkZSBhZGRUaGVtZURlZmluaXRpb24oJHZhbHVlcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRlZmF1bHQge1xuICAgIC8vYmFja2dyb3VuZDogIzA3MDc2ZDtcbiAgICBiYWNrZ3JvdW5kOiAjMGYwZjQ5O1xuICAgIC8vYmFja2dyb3VuZDogIzFjMWM0NDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgKiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICAgIC8vYmFja2dyb3VuZDogdXJsKCcuLi9pbWcvYmFja2dyb3VuZC5wbmcnKTtcbiAgICAvL2JhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgLy9iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG5cbiAgICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgICAmLmluLW1haW4tbWVudSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VnbWVudC5zZWdtZW50LXBhcmVudCB7XG4gICAgICAmOm5vdCgubGF5ZXItMikge1xuICAgICAgICBib3JkZXItY29sb3I6ICMwMDVkMDc7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTA5LCAyNTUsIDEyNywgMC4yKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAvL2JhY2tncm91bmQ6IHJnYmEoOTAsIDE2NCwgNjEsIDEpICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNDJmZjRhICFpbXBvcnRhbnQ7XG5cbiAgICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50LWxlYWYge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGFyayB7XG4gICAgLnN3aXRjaCB7XG4gICAgICBpbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG4gICAgICB9XG5cbiAgICAgIC5zbGlkZXIge1xuICAgICAgICBib3JkZXI6IHNvbGlkIDFweCB3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQubGF5ZXItMiB7XG4gICAgICBib3JkZXItY29sb3I6ICM1NjU2NTY7XG4gICAgfVxuXG4gICAgLm1vZGFsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICB9XG4gIH1cblxuICAmLmJsYWNrIHtcbiAgICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5ZDlkOWQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogIzZlNmU2ZSAhaW1wb3J0YW50O1xuXG4gICAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjbG9nbyB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCBncmV5O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIH1cbiAgfVxuXG4gIC8vLnNldHRpbmctcm93Om5vdCguaGlkZGVuKSB7XG4gIC8vICBsaW5lLWhlaWdodDogMTtcbiAgLy8gIHBhZGRpbmctdG9wOiAwLjVlbTtcbiAgLy8gIHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbiAgLy8gIHdpZHRoOiAxMDAlO1xuICAvLyAgY3Vyc29yOiBwb2ludGVyO1xuICAvLyAgYmFja2dyb3VuZDogcmdiYSgxOTUsIDE5NSwgMTk1LCAwLjEzKTtcbiAgLy8gIC8vZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAvL31cbn1cbiIsIi8vQGltcG9ydCBcImxpYi9fcm90YXRlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3NoYXJlLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fdGFicy5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19jb3JlLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fZmxhc2hNZXNzZW5nZXIuc2Nzc1wiO1xuLy9AaW1wb3J0IFwibGliL19mcmFtZXdvcmsuc2Nzc1wiO1xuQGltcG9ydCBcImxpYi9fc2V0dGluZ3NTaXRlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3N0eWxlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3RoZW1lLnNjc3NcIjtcbkBpbXBvcnQgXCJ0dXRvcmlhbFwiO1xuQGltcG9ydCBcIndvcmRyb3RhdG9yVGhlbWVcIjtcblxuXG4kdGV4dC1zaGFkb3c6IDAgMC4ycmVtIDAuMnJlbSAjNDY0NjQ2LCAwLjZyZW0gMC44cmVtIDAuNHJlbSAjMDAwMDAwOTA7XG5cbi5uby10cmFuc2l0aW9ue1xuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gICoge1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vL0FjdGlvbkJhclxubmF2LnRvcC1iYXIudGl0bGUtYmFyIHtcbiAgcGFkZGluZzogMC4zcmVtIDAuNnJlbSAwO1xufVxuXG4jbG9nbyB7XG4gIG1heC13aWR0aDogMnJlbTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbn1cblxuI2FjdGlvbi1iYXIgLnRvcC1iYXItcmlnaHQgLm1lbnUgLmFjdGlvbi5pbWcgYSB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuXG4gIGltZyB7XG4gICAgbWF4LWhlaWdodDogMS44cmVtO1xuICB9XG59XG5cbi5tZW51LCAuZHJvcGRvd24ubWVudSB7XG4gIGEge1xuICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07XG4gIH1cbn1cblxuLnJlbGF0aXZlLWxldmVsLW51bWJlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIH1cbn1cblxuLy9ib2R5LmRlZmF1bHQgLndvbiAubGV2ZWwtY291bnRlciB7XG4vLyAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMXM7XG4vLyAgYmFja2dyb3VuZDogIzA2YmQwNjtcbi8vICBib3JkZXItY29sb3I6ICNjMTAwMDA7XG4vLyAgLy8+IGEge1xuLy8gIC8vICBjb2xvcjogYmxhY2s7XG4vLyAgLy99XG4vL31cblxuI2xldmVsLW51bWJlci1jb250YWluZXIsIC5sZXZlbC1jb3VudGVyIHtcbiAgei1pbmRleDogMTtcbiAgLy90cmFuc2l0aW9uOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSk7XG4gIGJvcmRlcjogM3B4IHNvbGlkIHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIC8vdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXG5cbiAgaGVpZ2h0OiA0MHB4O1xuICB3aWR0aDogNDBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICYubGV2ZWwtY291bnRlciB7XG4gICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiAxLjhyZW07XG5cbiAgICAmLm51bS0xMCB7XG4gICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICB9XG5cbiAgICAmLm51bS0xMDAge1xuICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgfVxuXG4gICAgJi5udW0tMTAwMCB7XG4gICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgfVxuICB9XG5cbiAgJi5pbi1tYWluLW1lbnUge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG5cbiAgICBoZWlnaHQ6IDFlbTtcbiAgICB3aWR0aDogMWVtO1xuICAgIG1pbi1oZWlnaHQ6IDFlbTtcbiAgICBtaW4td2lkdGg6IDFlbTtcbiAgICBtYXgtaGVpZ2h0OiAxZW07XG4gICAgbWF4LXdpZHRoOiAxZW07XG4gIH1cblxuICBhIHtcbiAgICB3aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50O1xuICB9XG5cbiAgI2xldmVsLW51bWJlciwgYSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG59XG5cbiRjb2luVG93ZXJEaW1lbnNpb246IDI4cHg7XG4vL2NvaW4gZWxlbWVudFxuLmNvaW4tY291bnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDEuNnJlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG5cbiAgOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltZy9jb2luVG93ZXIucG5nJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAkY29pblRvd2VyRGltZW5zaW9uICRjb2luVG93ZXJEaW1lbnNpb247XG4gICAgd2lkdGg6ICRjb2luVG93ZXJEaW1lbnNpb247XG4gICAgaGVpZ2h0OiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG59XG5cbiNjb2luLWNvbnRhaW5lciB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuXG4gIC5jb2luIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgIG1heC13aWR0aDogMjBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICBtYXgtd2lkdGg6IDI1cHg7XG4gICAgfVxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICAgICBtYXgtd2lkdGg6IDMwcHg7XG4gICAgfVxuICB9XG59XG5cbi8vU2VnbWVudHNcblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAkc3RhcnREZWdyZWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSsyNzApJTM2MCk7XG5cbiAgQGtleWZyYW1lcyByb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRzdGFydERlZ3JlZX1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJHN0YXJ0RGVncmVlKX07XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgje250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9ZGVnKTtcbiAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICB9XG4gIH1cbiAgQGtleWZyYW1lcyByb3RhdGUtcmV2ZXJzZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAwJSB7XG4gICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7KG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpKzkwfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzkwKX1cbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7JHN0YXJ0RGVncmVlKzkwfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAkc3RhcnREZWdyZWUrOTApfTtcbiAgICB9XG4gIH1cbn1cblxuLnNlZ21lbnQ6bm90KC5zZWdtZW50LXJvdyk6bm90KC5zZWdtZW50LXRyaWFuZ2xlKSB7XG4gICYucm90YXRpbmcge1xuICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX07XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7NDUwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfTtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaiktIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMzYwKSUzNjApKzkwO1xuICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7JGFuaW1hdGlvbk5hbWV9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5yZXZlcnNlIHtcbiAgICAgICAgICAvL2FuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyhudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSUzNjArOTB9O1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9O1xuXG4gICAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgICAvL2FuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jezM2MC0gKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSklMzYwKX07XG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyg1NDAtIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpJTM2MCs5MH07XG4gICAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKSs5MDtcbiAgICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeygkYW5pbWF0aW9uTmFtZSs5MCklMzYwKzkwfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmOm5vdCgucm90YXRpbmcpIHtcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgje250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9ZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSl9O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7MzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAzNjAtIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaiktIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMzYwKSUzNjApO1xuICAgICAgICAgICAgICBAaWYgJGFuaW1hdGlvbk5hbWU9PTAge1xuICAgICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAzNjA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7JGFuaW1hdGlvbk5hbWV9ZGVnKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAkYW5pbWF0aW9uTmFtZSl9O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICAgICAgICAgICYucm90YXRpbmcge1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG5cbiAgICAgICAgICAgICAgICAgICYucmV2ZXJzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI2xldmVsIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAvL3dpZHRoOiAxMDAlO1xuXG4gICoge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuXG4uc2VnbWVudCB7XG5cbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuXG4gICYuc2VnbWVudC1yb3cge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmLnNlZ21lbnQtY29sdW1uIHtcbiAgICBwYWRkaW5nLXRvcDogNHB4O1xuXG4gICAgPiAuY2hpbGQtY29udGFpbmVyID4gLnNlZ21lbnQge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLnNlZ21lbnQtbGVhZiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IDFlbTtcbiAgICBwYWRkaW5nOiAwLjhlbTtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nLXRvcDogMTAwJTtcbiAgICB9XG5cbiAgICAubGVhZi1lbGVtZW50IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcblxuICAgICAgLy90ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xuXG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LXBhcmVudCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggI2E5YTlhOTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgcGFkZGluZzogMXB4O1xuXG4gICAgJi5sYXllci0yIHtcbiAgICAgIGJvcmRlcjogc29saWQgM3B4ICMwMDAwMDA7XG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LXRyaWFuZ2xlIHtcbiAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgPiAuc2VnbWVudC1wYXJlbnQge1xuICAgICAgICAvL2JvcmRlcjogc29saWQgM3B4ICMwMDAwMDA7XG4gICAgICAgIC8vcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vL1dvbi1zY3JlZW5cbiNzaXRlID4gOm5vdCgud29uKSB7XG4gIC5zaG93LXdoZW4td29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5sZXZlbC1jb250YWluZXIge1xuICAvL2ZsZXg6IDE7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi53b24ge1xuICAubGV2ZWwtY29udGFpbmVyIHtcbiAgICAvL2hlaWdodDogNjAlO1xuICB9XG5cbiAgLnNob3ctd2hlbi13b24ge1xuICAgIC8vdmlzaWJpbGl0eTogaW5pdGlhbDtcbiAgfVxuXG4gIC5zaG93LXdoaWxlLXBsYXlpbmcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAjd29uLXRleHQge1xuICAgIHRleHQtc2hhZG93OiAkdGV4dC1zaGFkb3c7XG4gIH1cblxuXG4gIC5zZWdtZW50Om5vdCguc2VnbWVudC1yb3cpOm5vdCguc2VnbWVudC10cmlhbmdsZSk6bm90KC5yb3RhdGluZykge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX1kZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7MzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG5cbiAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuI2NvbnRpbnVlLWJ1dHRvbiB7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAuNmVtO1xuICB9XG59XG5cbiNwbGF5LWJ1dHRvbiB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuXG4jaGVscC1idXR0b24ge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNGVtO1xuICBtYXgtd2lkdGg6IDNlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjJlbTtcbiAgICBtYXgtd2lkdGg6IDJlbTtcbiAgfVxufVxuXG4ubGluZS1oZWlnaHQtMSB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG5ib2R5IHtcbiAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNzaXRlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbmRpdi5tYWluQ29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuXG59XG5cbi8vI2ltZy1zb3VuZDpiZWZvcmUge1xuLy8gIGNvbnRlbnQ6IFwiXCI7XG4vLyAgbWF4LXdpZHRoOiAxLjRlbTtcbi8vICBiYWNrZ3JvdW5kOiB1cmwoJy4uL2ltZy9zcGVha2VyLnN2ZycpXG4vL31cblxuLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuI3NoYXJlLWJ1dHRvbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgc3ZnIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIH1cbn1cblxuc3ZnIHtcbiAgY29sb3I6IGJsYWNrO1xuXG4gIC5maWxsLWJhY2tncm91bmQge1xuICAgIGZpbGw6IHdoaXRlO1xuICB9XG59XG4iLCJAa2V5ZnJhbWVzIGp1bXAtYW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5qdW1wLWFuaW1hdGlvbiB7XG4gIC8vPiAubGVhZi1lbGVtZW50IHtcbiAgICBhbmltYXRpb24tbmFtZToganVtcC1hbmltYXRpb247XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IG5vbmU7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICAgIGFuaW1hdGlvbi1kZWxheTogaW5oZXJpdDtcbiAgLy99XG59XG5cbiRkZWc6IDEwZGVnO1xuXG5Aa2V5ZnJhbWVzIHNoYWtlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDMzJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLSRkZWcpO1xuICB9XG4gIDY2JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbn1cblxuLnNoYWtlIC5sZWFmLWVsZW1lbnQge1xuXG4gIC8qIFN0YXJ0IHRoZSBzaGFrZSBhbmltYXRpb24gYW5kIG1ha2UgdGhlIGFuaW1hdGlvbiBsYXN0IGZvciAwLjUgc2Vjb25kcyAqL1xuICBhbmltYXRpb246IHNoYWtlIDAuMTVzO1xuXG4gIC8qIFdoZW4gdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZCwgc3RhcnQgYWdhaW4gKi9cbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG59XG4iLCJuYXYudG9wLWJhciB7XG4gIHBhZGRpbmc6IDA7XG5cbiAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnJlYWtwb2ludCkge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAvL3dpZHRoOiBjYWxjKDEwMCUgKyAjezQqJHZhbHVlfSk7XG4gICAgICAvL21heC13aWR0aDogY2FsYygxMDAlICsgI3s0KiR2YWx1ZX0pO1xuICAgIH1cbiAgfVxuXG4gICYud2l0aC1pbWFnZSAuYmFja2dyb3VuZC1pbWcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuYmFja2dyb3VuZC1pbWcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICA+IC5ncmlkLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgLy9wYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgPiAuZ3JpZC1wYWRkaW5nLXgge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICA+IC5zbWFsbC0xMntcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHVsID4gbGkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICYubGV2ZWwtY291bnRlciB7XG4gICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG4gICAgfVxuICB9XG5cbn1cbiIsIlxuLy8gQmx1ZVxuLy8kcHJpbWFyeUNvbG9yOiAjNDI3MDgxO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICM0ZDU3NWE7XG4vLyRhY2NlbnRDb2xvcjogI2UzYWI2ZTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbiAvL0JsdWUgZGlmZmVyZW50IEFjY2VudFxuJHByaW1hcnlDb2xvcjogIzQyNzA4MTtcbiRzZWNvbmRhcnlDb2xvcjogIzRkNTc1YTtcbiRhY2NlbnRDb2xvcjogI2QzZTdlYjtcbiR0ZXh0Q29sb3I6IHdoaXRlO1xuJHN2Z0NvbG9yOiBibGFjaztcblxuJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjogcmdiYSg2NiwgMTEyLCAxMjksIDEpO1xuJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjogcmdiYSg2NiwgMTEyLCAxMjksIDAuOTUpO1xuXG4vLyBCbGF1IEludmVyc1xuLy8kcHJpbWFyeUNvbG9yOiAjNGQ1NzVhO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICM0MjcwODE7XG4vLyRhY2NlbnRDb2xvcjogI2UzYWI2ZTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEdyw7xuXG4vLyRwcmltYXJ5Q29sb3I6ICM2Yjg3Nzg7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzAxMmYyNTtcbi8vJGFjY2VudENvbG9yOiAjYzJjZWNhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG4gMlxuLy8kcHJpbWFyeUNvbG9yOiAjMjM0YzQyO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRhY2NlbnRDb2xvcjogI2I4YWNhYTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEdyw7xuIGludmVyc1xuLy8kcHJpbWFyeUNvbG9yOiAjMDEyZjI1O1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICMyMzRjNDI7XG4vLyRhY2NlbnRDb2xvcjogI2I4YWNhYTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogd2hpdGU7XG5cbi8vIEdyw7xuIGludmVycyBhbmRlcmUgQWNjZW50XG4vLyRwcmltYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzIzNGM0Mjtcbi8vJGFjY2VudENvbG9yOiAjNmI4Nzc4O1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiB3aGl0ZTtcblxuYm9keS50aGVtZS1ibHVle1xuICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgMzAwZGVnLFxuICAgICAgICAgICAgICAgICAgJHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgICAgICAgICRwcmltYXJ5Q29sb3IgOSUsXG4gICAgICAgICAgICAgICAgICAkc2Vjb25kYXJ5QmFja2dyb3VuZENvbG9yIDEzLjUlLFxuICAgICAgICAgICAgICAgICAgJHNlY29uZGFyeUJhY2tncm91bmRDb2xvciAyMS41JSxcbiAgICAgICAgICAgICAgICAgICRwcmltYXJ5Q29sb3IgMjYlLFxuICApO1xuXG4gIC8vYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcbiAgY29sb3I6ICR0ZXh0Q29sb3I7XG5cbiAgbGFiZWx7XG4gICAgY29sb3I6ICR0ZXh0Q29sb3I7XG4gIH1cblxuICAudG9hc3QgLm1lc3NhZ2V7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgbmF2LnRvcC1iYXIsIG5hdi50b3AtYmFyLndpdGgtaW1hZ2UsIG5hdi50b3AtYmFyLndpdGgtaW1hZ2Uuc29saWR7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgLmJ1dHRvbntcbiAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5Q29sb3I7XG4gIH1cblxuICAuc3dpdGNoIGlucHV0OmNoZWNrZWQgKyAuc2xpZGVye1xuICAgIGJhY2tncm91bmQ6ICRhY2NlbnRDb2xvcjtcbiAgfVxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lcntcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yO1xuICB9XG4gIHN2ZyB7XG4gICAgY29sb3I6ICRzdmdDb2xvcjtcbiAgfVxuXG4gIHVsLm1lbnUgbGkgYSB7XG4gICAgY29sb3I6ICR0ZXh0Q29sb3I7XG4gIH1cblxuICBhe1xuICAgIGNvbG9yOiAkYWNjZW50Q29sb3I7XG4gICAgJi5oaWRkZW4tbGlua3tcbiAgICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICAgIH1cbiAgfVxuXG4gICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogJGFjY2VudENvbG9yO1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeUNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAzMDtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICM4MWFjYjU7XG4gIH1cblxuICAjdHV0b3JpYWwtcG9pbnRlcntcbiAgICBiYWNrZ3JvdW5kOiAkYWNjZW50Q29sb3I7XG4gIH1cblxufVxuIiwiQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm91bmRhdGlvblwiO1xuXG4vL1NldHRpbmdzIG5hY2ggZm91bmRhdGlvbiBmw7xyIG1peGlucyBpbiBzZXR0aW5nc1xuQGltcG9ydCBcInNldHRpbmdzXCI7XG5cbi8vSW5jbHVkZSBmb3VuZGF0aW9uIGJlZm9yZSBvdGhlciBzdHlsZXMsIHNvIHRoYXQgb3RoZXIgb25lIGNhbiBvdmVycmlkZSBmb3VuZGF0aW9uXG5AaW5jbHVkZSBmb3VuZGF0aW9uLWV2ZXJ5dGhpbmc7XG5cbi8vRnJvbSBmcmFtZXdvcmtcbkBpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9jb3Jkb3ZhLXNpdGVzXCI7XG5AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50L2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50XCI7XG5cbi8vQW5kZXJlcyBuYWNoIFNldHRpbmdzLCBkYW1pdCBTZXR0aW5ncyBiZXJlaXRzIGFuZ2V3ZW5kZXQgd2VyZGVuXG5AaW1wb3J0IFwid29yZFJvdGF0b3JcIjtcbkBpbXBvcnQgXCJhbmltYXRpb25zXCI7XG5AaW1wb3J0IFwibmF2YmFyT3ZlcnJpZGVcIjtcbkBpbXBvcnQgXCJ0aGVtZUJsdWVcIjtcblxuLnRyYW5zbGF0aW9ue31cblxuQGtleWZyYW1lcyByb3RhdGUge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDUwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxpbmUge1xuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogNjUuOTczLCAyMS45OTExO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTY1Ljk3MztcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIH1cbn1cblxuaHRtbCwgYm9keSB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XG59XG5cblxuYSwgYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZjYTAwO1xufVxuXG4jc2l0ZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvL292ZXJmbG93OiBhdXRvO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICAvL2Rpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0XG59XG5cbi5ncm93IHtcbiAgZmxleDogMTtcbn1cblxuLmxvYWRlciB7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAmLm92ZXJsYXkge1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE5MiwgMTkyLCAxOTIsIDAuNSk7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDAwO1xuXG4gICAgc3ZnIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gICYuaW5saW5lIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHRvcDogaW5pdGlhbDtcbiAgICBwb3NpdGlvbjogaW5pdGlhbDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gICYuc21hbGwgLnNwaW5uZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTtcbiAgfVxuXG4gIC5zcGlubmVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC8vc3Ryb2tlOiAjYjcxYzFhO1xuICAgIHN0cm9rZTogIzAwMDtcbiAgICBzdHJva2Utd2lkdGg6IDNweDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBsaW5lIDEuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSwgcm90YXRlIDEuNnMgbGluZWFyIGluZmluaXRlO1xuICB9XG59XG5cbi5vdmVyZmxvdy1hdXRvIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3ZlcmZsb3ctaGlkZGVue1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaGVpZ2h0LTEwMCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vVmlld0luZmxhdGVyXG4uaW5qZWN0ZWQtc3BhbiB7XG59XG5cbi52ZXJ0aWNhbC1taWRkbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udmVydGljYWwtYm90dG9tIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGVuZDtcbn1cblxuLmhvcml6b250YWwtY2VudGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi53aWR0aC0xMDAge1xuICB3aWR0aDogMTAwJTtcbn1cblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCA2IHtcbiAgaCN7JGl9LmlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG59XG5cbmltZy5iYWNrLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWF4LWhlaWdodDogMS4xcmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42NXJlbTtcbn1cblxuYS5oaWRkZW4tbGluayB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4jbWFpbi1jb250ZW50LWNvbnRhaW5lciB7XG4gIG92ZXJmbG93OiBhdXRvO1xuICB3aWR0aDogMTAwJTtcblxuICA+IC5ncmlkLXh7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogMC41cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxuXG4gICNtYWluLWNvbnRlbnQge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5cbmJvZHl7XG4gIC8vYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2JhY2tncm91bmQucG5nXCIpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== */ \ No newline at end of file diff --git a/src/server/public/index.html b/src/server/public/index.html index 7d94dc7..3720bba 100644 --- a/src/server/public/index.html +++ b/src/server/public/index.html @@ -1 +1 @@ -WordRotator
\ No newline at end of file +WordRotator
\ No newline at end of file diff --git a/src/server/public/manifest.json b/src/server/public/manifest.json index 5093117..ccc885a 100644 --- a/src/server/public/manifest.json +++ b/src/server/public/manifest.json @@ -1,8 +1,8 @@ { "background_color": "#FFF", "display": "standalone", - "name": "WordRotator", - "short_name": "WordRotator", + "name": "WordRotator - Test", + "short_name": "WordRotator - Test", "version": "link.silas.wordrotator", "description": "A word-game", "author": "Silas Günther", diff --git a/src/server/public/wordRotator.apk b/src/server/public/wordRotator.apk index 876ec25f59537bd1ab916d868478ea6aa4e13e31..3f4702633bf283ce34742f11668ed930de63a8f6 100644 GIT binary patch delta 1374257 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%0DVAFm#U2&b2X!V%34K1ky46_1T)23WMo83 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�fEVwJg;K$;o>Pm1$FTG$u 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%0AmnCqiGpf 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�>RHc&(3(D7Ij-UX@wA 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 &oxd+LkPtx2{?{%Ds1t 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


Pt6`9?2+p2Q$xYYzV9B4tN6yfHNr1|1KYS|F4 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 z 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

=c8$a`zI@1W&!b6vq&< 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 z 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 Dk(aX4 delta 1357462 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�COlMOyB0pgW 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�`eYrcj8tS5U2n7 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%0A=G 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

L#Tp03{IuNb2Gz7d-I>o#<5OwNxr?_& zHsjP+#7ULBT~zZ0z6_lG`1b|f3=x1b3E?{-*>tXDfO-f!?NvGh`NePaten+=jV+^& zXiD~nIF3)9?!QoTkSKq3B^JQ;gB?E0E4fMJoGVEXnPVlBR!NqBD8@N@K3{L{e!%P9 zd42})ox5?swlwgHFSduTU4V*L`{a)o^aF{Ef{CF!U&&wVht7QOn z_!;dE;h)&ei<-ypZ^5REx~GO8Tf1ApvSAlV)awaeEUp!p?%Ej&5=mf$f%c@DsyIf> z@B|QYi0uyOtJi-aTPR}%bl52ZJOZ4Ie|oRR`O7GnrVm9Fxts9u*fsjs*R9F_D~ z7$m(A0vZ%z?q;)kz?k!)6%Qy;*eofrns+dljUq?Le(t*2%*fkcP78DAk+clsDr!16 zoq4-ca?!=Nnw`ny*+ntQ79br2%!;30?`5hB??o@d1_FQh9SAfwLda_%-Q8K1XNu`h zC1QRXB8;imcbJAfcGUF^k+x9IuZZ-n!Pcg(RXlZXEPL8J`E1xb`SJf&EQX+JmigD5E1>x|jPM)?1rwu?*&>;_24Jmh z>)PQ>mf3%`ekH&CTl(B~F|hBDDq%1a+mjMLR5E)m3hAH(dOgC;4)2P+M zgdclX4?biayMl_@2D!3S0aDr?bA;jtR=~;e>@VaE(+gtG&mdk!VUQ-*GhmlyFQ*4! zJ8b`JbigY*O^caL0C4k)(SVI0s@cfw^qep-EySGTmo_`6>GPI0AcZIqL^O#h1D(VB zv#osOtF}l#P*3Ns1p>);bv{)x68AQ&<`X)?|J{!7qTiw6Fht|p2ixM$|70-w@fp7c zo|}Jp3{>}+>bzHdJ+}K&WIvswzYvUT+H1|Q!}C4nHh7WAa?FJH_RZe2ayl<(^za9T z51XPa`nK*2Hg-SIB-fjfr??-@Pe@OiWR7QnzyMl6rN2hDHjs4+@Lwpkj~=mz7MsO2 zmPdnm@0H*5<#)i!4|hvDmtNG;(52bj;E^7!Ua_5j`I$S0e+SxQp0>Wbi{zC!sDs4H zO8Hn!g*W}liS%*(%u(sz-LI=jaY`CVp@i9D-Q*va`QrM`5+4M2CUlm)0WmtQ@@yBa z@St<3pZt!sAYW}IhI;RWT#nRws!n??Fb9cfx$UShTiW%afgl;)5ZNIgr_!I*AZCtf zH{(!$5%2D|^kqG<3f>4LeINr+?4NO#-9g)+bi`+jnm zFW_@S>+eBk!YW%%WgF5yoQ;z_4yL5?Ewh>pfJx;U8+A~Wn7s^^L#&elkj!kinyR}a z;|xj`kR^QCk|lQi>H_}FXMS})Omz#X7DgQ`Fy4xSu!?YtQyJ*P;90v??3*SQr8vfa ztw+8yZmW0EgPMXp*Ip>atiIFnJxS^ZTohJAG=a?$(nwzb6X8d$d0OMWtQwj?wwyD1 zj45Mq2BS`{qOdUzTJO&l)TyhZtpoP=d{dgSWBFSj4ABf}IEgxT2A|&hr$?uw?Vxvq+t0}@YPu44c;l`Z1WCgf2+$dv%5N47;SamQ+St|Zyv%w5AF-&33 zn{~N~|LQ>C7scFyj_>4APIMDIw!&HGLVL~F;F zxrET2F;yEyG7h-df&9_N*AW50{Z&+gbs{%w*x0ug%3A>vi=ff2M(n;Q-o^okLHz01;mc%d7f8exK5_C`u2v9DVQAx zfijHjJ^wh)=QV9=856P#LBd%e0x@>%b8p7HAmuoe!OdYZMVj}9S7%@WB`9=0N+yIt zwvN!KW(kx8Bn+o{2U4Pn|17gAW*^Y~pv$~O)s8d!z0Alb_y!7pG6vH+o22KBy`B54 zs#|}nFlte^V;71Q%ER2aM6?iuDW^2{p({oipb{l+nFTJojuGEADd#9XYMR60v?=PO zYV3|$zxlF#VosLMT@pnRUoB@j3UX+!wg|6J^ZL*7qjGq&-%^NwUU%-;e%*P81^AUaUvuWX^fw*@fq8ZFffzK1H<94FbYm|VQs56d zC;RGL7o^{Aj90eU%f3V}&oG@)_l`hf%8Tp%0D@BA~9k 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

=TG0u4XvA^ zd0jd^cfJTkcV4FH&KIES?u�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

na>gPqe;{YsP2q%~n%iB}YmxY)NA^gJjY*b* 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

6I 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 z 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 diff --git a/tests/wdio.config.browser.js b/tests/wdio.config.browser.js index 4fd5ead..79e25f5 100644 --- a/tests/wdio.config.browser.js +++ b/tests/wdio.config.browser.js @@ -32,7 +32,7 @@ exports.config = { bail: 0, - baseUrl: "http://127.0.0.1:8000", + baseUrl: "http://127.0.0.1:8001", waitforTimeout: 10000,

l ztvUL5-_hRcYBy?DJ(aQLs!-}1XIoD-+ISvpIOUs7XJYP-VX; zM?S=J98Y^PbK#^j{ZTj$ukl}W1vEcS| zEl&>Jp63kMs+{d`jQTpk84IcLGU|tz09^`^11;g7DPVT1BevJ~WA_}+`AEHg?o27O zq_pSkN@Pb-`&gd+*-p1^Q5A}pWT%ob!d#ccSF4h#D2vLf4TKOCb@41I@Hv`bQen}aWHumDIt`*RCcC9e3@i453eCAb0CEpwnm4`()*D^~ zemSXT*5e|&=8>Dbp5}~~$Jc~DmL|s&SUniAFW$F;3QF8|b zs)L+$*En~0jAjZnR{t(hgC_LJx(1CueLxLbCtsG*!5Bv*SIJ}=`_40eym0Yi z(|GVbS=5LLHvo?+>?R7l>TEC<%hb&1n5r~07x$%_u}8ziDb}a^QpJ31)k{-VOD)w( z#T5V?*fpjb2gZrHsvI?uKMGYy%-|})C^6N!DGQV_E*5>`Y^<$}vCC^@#?%j%imbb^ z_Qg1XIkgtJ-DZRI%}Pjr!_idW93+tt4p}!F%w|B&#q`OJBmzueGbr34D&{S!v7_1+ zV$vq$iBSjz33P-Vq9m$AYAF;2w)*w!y`68>5;Uzd1vH|k?pmi&6aU2|B{gxwOIuZH zpLSf8)wY|1|9FbuukS?ACWL;CmlK(ERd_vWq3R;|?vAScx2Ob8K&@D`N;;)W~~z%Dc+8mNv+AS`NiJU1|U~ zY0$s|&`uOhTKcJf>o~(QDWYvcGDIM6e@I@xy!c{X2~S@&h!cQB(`1lv)Ik|`2$2cS z391}A!6oLFOOwkX&?{oqffGz_gCU?=t$3aKfb%93)&g42`PPy=>)4Sj&In+g!dG1hF3UWRTA}gXZ>Ts7$qZnCQW+rD9MXAuBzuM9J#3X=3B-++L%-} z*__Wr$!dBV_oHtfEqICDn}%9y7B#V7=R=$nCG6sV1hs{3+4Q4ms-P}YWERKi#T3%O z*~ux%u&`32ky}}3Q`n*rx;<;llkA0v+rncF<2M+b#~CAmwHqS|rqS*V1#V7+l*QwI zL_($lA}h35%^42S59-d$cZHpuB-_ZdDt%Br6P`jDz)atF6%X-&0exCT&RDjB{UJk6(ML>+JyJRj1w$Kw~Ypt9v=h1~0$BQ7*Dys26ejo)O2| zo<>kszAq)9@Vda1xoMPo!j!>WbBICWae^*?JM7w0$MZvd%G>3I;u^_|gw#VHcsKK$ zD)t7vQrc@KPQIPCwg^K5Yy@U=LkVW3cVN|p(}F)+b#LQ=rz(B5YW8n1rOMQ)E56&c zli@IwY2VHIvczfuc-@aPUkg=YwaEJ6&;<;AwQBwvr3oB}p;K8FSoLRPjB^tWocgkV zz^Wf+dB8)bjb3QAQw-7x5C^BBQEIgm6n;ZsQJ(o=hYKuhv-6E4V?O83n6kjx&Jl75 zp3S81R&DLla9U_(eqd<&{UV5HRh*FzKx$<7JZE58WVM+R>}@zA%qxHxXNRn&@Qfu& zoEERgG4LwxaC@Spa!7ix^9)Gek!0I{K8q|j%|=ce{1|-W`)VmSfVQgStE zSA%vBA&VIfhnJyHx{j0aYKYsmN{sdH@iS6);OE>4HAseo;D^5ncjSy+8~eb2lcIzD zFS9s}S}WbP3;42v6GcsHHjKy9RT1@n73Mx&Mcq7fys9{nRZIsl1qSwPJW2+$VbtX% zW-5<#YvtFKwo*~;!SyPq)Ov#N!y@mj?u#2w#cigTiYxjCT<8jCf?UCe<*D$*U0Ff& z5u?RqMUOBANQt?0uPCjpcM_X_5~RRVO;L=QhS$u!J^g$4Y4=(8E9r}zb6?YhXMrlo zaxfChu=TA~diy3@X}4BnHz(n>ggNfrZJNL|P@~4}w~nwq!oXlKByd2Eo+0hb;25Fj z4+3dRep?Z^Wg^Vp?$f8iaX*bG(_pKQO0Hlh8pr6Uk9ubwcADOO8(HRmOdzkniR4oQ zRFE8ol*^{4P|OnZ`=B3^jSoHs1E(b31%OX_&)efc7!L;EOnRN*q!YZ@)G#8RS}AqD z307XqA1i28FjeVwunbA|igM!o*S|E-leUP9He}ky)(HxP1b|jA$7GmQ2e(r|Ia8>3 zqPiBx!R{CL@Eh90UR%|FrGqMWO6`zr(t06wy(fm_Nvx2|6i>6)1s-J>MN}+-hx5@8 z0D5|n9|#!rYryICC&4iq#YLIsMce{73wA*JDo{KetNhS9CWqry*2pSs4`0env}&%Z z3CgO+hr8Q*yT|^+k@5VfatWfqoOd)-*~Zk!VyXZ*l;Pz=35UA33kwp+;PQ$4rKAMRWR7^tZ`&qQ;rW z#;rqw+aat=IIOmR+iriT5&oI8D(82ns&zFRA_E-_^0^a%0U+it>L8EdH6*IwTnsA1 z{kLeMx{^)}!WF8ayDp%GCG<;22x)%p!W_*1kN7+oUPtOLl|xin2+fi z*Wss3Zq*;gumGzSzU?M&!_^E1%D5%h(_7+9Ua`K~YToUxX@z>5{p30xx~YQ>DF+6nA}E#l9pyA(VX-N3SzJ|(Rh%lC3jJubqz8Lm5P(3k+~KwzY~OXtz)8f z=)QM#g^U|t^~UkbW&mYs(zXLITyPgi3+WHH-02zgFK7+wk`_9Y7T)|FTLYqh^}Yf4N+Dp-g5#eIh^|&%m6*J) z!S-h!i*0%!H&L;x{Su0LBGs*S7l(P7q`-^3idw!HR@@zL3YlUY;j?De@+X=fMyRyM zz2bHk&eDmi5X%}*7#09MUKPw7b)v62Vn=s>J*3u6%u@|kvK0spY!%C#fWAE7Pi&X0Nw=Q zg!4dt5uYSshGD>1UQg-N!xi4m0G|tuHZ=NFgs;$bH3Ao4Z==;{a{&%7&Td*YM-tS3 z%+CJksV$$JfFs;2rkkjS1z5BYTNb|IsjGt9oyzX>W^aBSTbD4+P``i)CiSkM_g;ou z{<&G8W0d7W!&of5GT2|l;{mG4ToKkN=bOgZFc5r{P}oX3!Kf3wf&W`qU_s!$SvLjp zc7R`kH>F_#6YK^B5IyD|;#|j!@~5kR%|@qh&PjM9X$PgRg(sJszF9|~AnF=BZ7bOE zzToD10GAgU;(u#I(bRB1b1@%eyA}n8L_^O}o2E6P_xZEOLV0ucnCO~B1-znfRea&r z1kljht6Zdm5hu%&{`8f#G~q`GbZaMRIL?MBqf#_lxz-{?RRU4nutooG-VgkWT334Rar@N=`GWT;Ay`?UnyHzvZj^kP2`GS zKv&*|iqbeWecb?Gicf*{deSSq%P8w=&8?z$@G>4oucARb8x_tWui}ne+Du(j$c3xSD=m4w z?&y^(Z#EYl*}M6Vj^`|N?N1Bz@2;zKB>$RF4VNhEE@uC$v0m#yG=__RbQE8Uu*GCA zz_G585!H)~gc5?U5M6jB2+wt5e}Z=Qr|yfbF8P%u)W?@>ZGL#nO{A3sdKEkz4Z0c&fx_=vMy*Jt36>Ke0Mp(+l}N+-VVoFeb)Z z_TzCL7LYFQrq%6s6~|zI7?W$^#D_VZHT}g}k*A3eYYLfZXF|nn_3~Jh{V<#2pgZIs z?D8k~%4N_!XU?G3B}a70cf)z^Hs=wAe81@=8t0G7hGH&ceg4EQC6_8PTQP4&^fkgx zi%olJOtVoY8&R1Xm0M2J(-g+rR}(EBG+&G}verDW<<7wXM`3q=m_DJ8lVbbW9Yo5Q ziKNjblGna6h-UKYZ?&nbn>geL&`oB`kcj>!4Et(vLfw=99PS=>k57*F4!-RW0nD`# z!F%sm`C8{6aPQz`_uJj0nj;c!EwH-1SBLw%7jSDH7y}q4;Qm|1rU1roXkq;B9&dlQ z`)cdrVC&T`ouLSSh}LQb#j6N2{)<9B(c!AM1h{|rC>TQ((n)hdib!g?5hM}uq(hL| z2~LnskJ$qt4BoN{yzrVvb;4M>HDZhi^nJ|eYKEH%k$sr--;iM%^fJ4?(R#R|+wUqw z`#>#WK~J^aho-{f{#Bff@X{mC;xgNHRz<4Aq!!q!?zSU;^qBHYsZOh#=6-kYCM0`{ zO8AmJorOd3(>UXLcq*YlRfnse*fWh1-MwaShBx|JbStWnJ2J`5gtySv^~wsvY9`K z-qP~7vr;N;vzv34dx0)dccILG!gj#SsLX(iXkl=GpJ$o85_6{{It*wm%${fM zqMS)CEZ za92f+$#5De)5z;#av2V-8vHRgpZsp?Xm+Rx`g1^&pgos^34--M*nS`j2HTj`+2 zl--nn*|3ufh)IdM;uk$SBb&BizzDA1G)(VS(6W4G0=R<)uqy&`)TW7{)DWbv)~X$d;{=%8?=5MCUFX+q?^v#D>%JP&GH`5ZuOrW`Rp$ujXT*`6UU_& z^@p=TBuwq6$)4AOcABilmI>`N+2^1!PEB@yz0xXfU1o3~rV)8VyY)j+yh_uovZdWS zzSuk1-haKbdu;A*Ugf{|x*j8x+?*M}?`Uaj_j zlM!Z0%bx}{*x`#4NK=oV2PkUY-oOPNv{V?N*or8?=iqtJJEfA(KhMc(s~`StF4 zuqT2VO3h5AvxjrEjNpjIt7Dw^?Yg?qM|R_YIxG1?h~+rhJ=!|y9r>;1QGtdJQu!sZ z^>X)Od%t%K@@Vi}nQWYmmG=gPa}+P8r(d6+$^p)WXiR0ND?GoIbKAYx9)Zw*Oo)XQ z2u$iL_=R&GVts}eMW#tP-<&xV>$}!Bg?6jV!=#kZAurbnvN!Q$dzfTotw5k43mWY+ zy`$^vYrCc|bjyZUkp^7DHHLg5QUP3@#xca9$boo3h4fqQF z(Q8p3I7r?EVFH*ZWVce-=C?k7jGklXO0G9tVQ;4Or*M$I>^`I5e@D^v?z@TRMRhd{ zr5{=??~;-Y)jU8*gx35w@*BvATe`BcDR&%ObeThF%L<=Ejccn46Ul9QeA24LR<#in z#E9ZXt&vr0Hjewiycl(6RvnaQ-rN~g?pAc?l~l2)-W?G13gr=(X7N{lMJI&c(k@^D z)O7X=v4eWVGyM}6W8I$uU@<5yd!9Uzw*F>1on#wpYt#O-zjv?Ua-Cgv<76%BkHYn@ z*4O@$Mg7$@x<-K%x+&e$%Wyhceg`wf|U=wFT7uW`2{4oNYp-y z0-UDUz}8Wl=g5QSb1a$RUucHpIyOMv0$lXSMNDIK6HTLjgf7KmD*AEPaKr?iAN@3R zi?Xk}yxX*E3hO{tA%Va`PWf5Yy8+SDs)L_YIjO*`3iM6Ykb;MQSw}hy%35%X`tDUV zTU>!SBIbOtU{x*6c5j1DOouj+SakPre`|a9;`sI9VejbVm=v8m7vCQBULRt!N3;Z2 zjR42%FKILxhJB7blJU*}ldq!kkXtZtyMy35O=c5P4^lhQhy=Gu3M(bZ%K&S!5U`a} zKVn1{xl@7X$GpaW92WK_%tU`-aQ65bqcEO5Rw38AIk82ZNOw(;tgbk@9<_*ZG?i2? zjC6Pfq^k}=X8U@@cC^-yhfW?>R=NUAEetoh@?ZZ5|G6TL%h$wK>6^8`cXIJ#@95vh z7eDTue0S0NVfX0AqrH=p-GhtW|Fw&bh2EXmhI2NGf-j$cB2)k#m$U0@RHu<^GUopt zO@9Lz zJvs`|nU`dExgvb5Q=zsrKrVxuBEelpW{E$aK4ETtC0x-yJ{2D?8S<@ml@IX0cmE^h zybj@_b_pDR|L4_<-o7|mP?0<1vYp-i-EX%}c8@PkdKao<(P5%ZWM^POv@;@&K}JHs zDxV_Uv571SIs50(m~IU|~X1t?J9Wd=ZCbzS>Zdr1>bKgRQFwPru4)G~e2ZuCO5hpa{T<|ch@P%@@bc|POj5X( zV_c%~LIjtbv#<w2vo=CB%ZK;N#tZ`Jb((jlTy^VfBj38(*59cHc5te zY$L0n(?${%LQ-F@7)&LHj+irUx7VYOQ21E zf|7iVG`6FwqZ!-slH_=2OWF!ZLKGqrPzcbnlF|8$^SWQoH>{_5%a5J9^c84;pe$vw z*7DkWVzJSe>gww1s_N>ha(FJ$FPoHgT~X6CZbILu7*PSpTBjNzX8c)|Q+8j;9GKXB zUUSo7jZRhSPWF$Iv|rTt+H!j+lPw&7@dgVOs{Qklst9~qu!v)y17sjlsDMnbt#T(z zORip++p9iC@i@*^<5vdrlr`9vruZlzMy(5dS0az;)~%s<>H>nqWeJ1>^lzPzN8!ZL zYNZ78OmH=%N*gmwf&IK_@`n2g_9@VTasdW0X}l6ETIbk&fzTg_s%TQLS=2F8GbNCk!U9| zn!isI&eqXZ##Te}j3uzj5c{gyyhZ_rylYr`HBB|3HcFvw23F43;|frq>t$%Wq^ruC zkwsM^1!R1k(Do#@+NM%uSTzKH^!IE73EK*^oj`)qi6^7E4OdCYh zB66zB zd6LsYI2bIbY9wDkwGE{34J~e{3Wh0yRwn+eG$hNUVkuN4J5pby`>YnENBY7dqZDFT zlk*k^6jgb_I{ZSHcd$SYX)Kbiu;wcv_5#OEtoP2ufEMBVBEHts&T@E)%F)ll%o-Yg z|AC_qae<7{;rG0Mqiau?8$p1iVL|}E34&RDnJ(Mb+eSk+&2TntuQ#(htmE#nW!Pd3 z;bX&=JCG^g^Cgbp2a%gh$-pXZl}!r`FdKd=5J#IY-&YD7NXs;SiPz^CFPI;Jm|px` zYlA}V;l5@kaqZ-<_CK=&x#?-wwhH?NxVgV!s!)Pw$a=_svx9eAcLygM->>bw<2!me!XZuLSgpY;;2^NF zoy9iDoVZxBq6XlH=idM0vC%u8j=jf=9q%#<&pR5s8HWL`@8#ZSD; z&Joft0;;OXpv35&OJ|Y%9v?0etY|gK@Zpz&aQ(x7>(@V?{O_$jJQ?m8tf+ER=>^v7 zyWA0ne3}3ZB-}rF2qa68WZH=dPx>mlwN;lVs#Lf}(T7f_rF)Qc8MCh!yG$7dRknP7 zV^Kk8(Ry300-_Wb%9t(gda=I^bjZXcN**^EyB4EVy$$9KrdPM&hfoqtFpVuq0DcR! zJ=uqU*_sq3se#?I!cCB%XQ-@_9pPXCY5cKk)p+qAu58>bOk z=gtL&u1U~9qLNH}DMV;kjBj|v>kmRYLh993@EmTHp)m*_V6d5A%V=-$aG-qTW1h*! zjGTpi>4Y8hM-fZp(1qpxC%2ct8CGj~JVUd8Olnd1k1g){1|{LwT^1b`%7q5vi+_XH zpq|UWKN^2;dk;LH&RQfhpt9YTaSw1$$*bbP10Vo|G*RPAvXZT2q*U7vt%=Sw>)M|4 zc$%M~M8{43@jV@tQ06Znc@9p<#-J+vu(S11e*Y9lm+HgX`VYwS?g<~~fQ%07)6-Lb z&U`IO@k!7R&`h@4*nPKufTB1wmx_fjwUD6&{{B{ihR~?HWBNs77?J}j6Lj^ku#@D^ z>1+E#Z2!423dgc(8>%fm)gR^GQ2c0F7t6o5M`>vPc>0*#1&@-JjEmhCT8?D2-e0|u z;p#?kYemI9jl=li!{cMMf5})(HBCW(hnA{MLXBlrE>*-OGwTWIN1>SFn?Kt2qVU{aaoM+wq3YsD=f%l*X01 zUBLkfTYJ3G0g%gR)IY1m*tQVwE$}v3w^DKf9)&nmJ79i_1HAx40o_W zhV#%Br$DKJ_Yvwd<)?{QPvDrnNjUAFp!Snwg7}r~e*8bw4+8iO) z3YIGm*J5aOM{jL>R$1)QJ_7^uX8@A$5dQVeGb`BoVe8#N09rju*B>?xoFRm9C#(qX z3ff`Wife{7Ia4d+ZC3?~y+D^`mE+{UcF5RS0bmPrb>k5A`=g zcG6@$I!!0hhXng6#7s5cc2%BUoD*7|U!zE!Uy*Tu!QnJXb26hBjwYMOmChnI)8y#w zgJ)35)*66{a_u(Di1v_nHX8ss+ID?H7r*{Q^UFCl?e<~$3xl1r5L##a4T;c?3 zo3J2cU=EW3#vEmP=Q!qN!aQBWs23&hw_>JAm8_B3%SdGijV@z4$-Lhl{6nyfzdm?* zT@*o7Y8;Wxu82pAeVeFowyY+|wNV^qWNB1I#pFCe5GY*AuOeNJ^=W=oa2XpN=R^<# zu$Bye_8s$;&i|!=s4N^8=2ym(A~G>e(OX$q*J7&!wd=xQK8S&`&hu$B8VTA8yuXJ@ zf;8uC(d|NoQ3o)-2gGNlmB|6%!S3d+w-qP7a2l0+c^f6uFYjfa9+Wld2j-vCbhoX0B7qDC zlaVYYe@w1QOa`PotD71L+PYAhsl5VxOxa-`cyF)_gR>C_@P_dyZ?yeO+oP;csQVn_ z0ZR?qV050Zx)Bq23oxD~-jonE6;Ug%$}r9XQkQT6NL(zv62)@JrZ|@M?Ky>m0a-9q zV0qkkRDusExy&^{ofV{&Mq`Pq@e|N^LPSA(Ja}lAVP{I3QLyZ0Zc!NJ+F39i71iMeu#U z6Ckr@IL*_27~QS8%35$fzkx1C+v$Y!6FBO2yPFXl?eQlH_dbY5;gtsq15-oAIE(Q` z(EGi$*KgNw4@L1XIXRE6aKU%q$>0Krhk*B_{jF7Jb$fy6W{jKqe=g@b(TEtM*smZx@8gmQX&NMG>{61sUoq@;+gp0F z==gZ;Brk~(3Z5TpBM%I|Me+2j65bft)S1F$Yvb?;PW0ynX~cwP;~2ZR`wfV#d;;QB zMMCi{zHmaBd4S!CXQG_Zh%yS6*TdEFP&GIXPK*s)$Q44nRshGL=uw7~f2+zf+wY%6 zmH&}L4FfZ94;PP+G+iH z?PB$F4>`wp$`mWRAO<55e_V4^i&R=C7&~-8sZM;#3)N;bhKRTXzfMmxe4{vt`0_j} zZQ@_BanYj|SCRTFts7Ohvry5W?xT|=HUy}$ANtDu(4W=)a15!ce)8~KfJ60az#)uO z_JaY$1vpf(x+6DA&AwC(?oj=#jVnft-HVOs*w}MU@X=f52HdNne{lZk;0ChZ3+5Ln ztr#G!$;nSaiS&P?Mo`)`9#o*2#OkHjgd=vC=z|2#-EkVO#twRSOAzjrV%ZHX<+ zt7M{ePfAw{W?-VUYGn8`QzqWcES2==z9kfEJO8Q{RyL@be~(t@QM>nBH&h3|XtCT2 z=74yPds3tI-ZV)nZleE0^yvV&hCDeCi)9IEdv`{le=1`KDK*twM(HUWIJIo>Xg-Qe z!XtYT7WZU2?l}$amZCN&839YSxGSYek>meMY{bSnbia=WtyXPo497Ic=5i3O+ro3> z^%juY6r*awe`4f#F!!`?|Cr=G*uXS32`^c?$bK2g7lXIGO{H#K%Y<6NFC{o?;6`A! z(}{6AcSlgq=9zVGh`y8Y=S`{3;ev}6Bg^}zt7)%9G3a5TJx3F%xT6_ zIo!*;ui6-2Jh+cJE_gI@4gr;oA+SYh_UA@$boAqNnl#*$EH422P8FKE zupO>z_*dPy1R2J4GJx56cd+$(YY$=Ae+PRz?_T4lPv~kHPSlr!t^Y+Gai|+n_;zb^=fhk1X&epW>Da2UzPtNoYwaC= z?WHNG2Z{RhxBXoz|2a!_;r`Cs_iwgNzA%Q&AxQ6k?wOFu)MC`}?i0aV{!f>0`4~_IpI6s+9y182j?6(qR1x=;AN5M>?nM zHrZzXbDHUwz%6APas}kqIpw#(6|Y}e!?1QzVEigL*c12!G>S^&Fdm_RBvG)n=HyHCr##8)WZK$h+2_rPS7d6Z0 z3@C9Cb<%9fkSylwjN{`XbB`YCzo2;^<5HDgfgIgGkFEykB}$C?9mt&hOLX4ee-Nj{ zz&jV06+Hq?BJH&WhQ4(F7T!I&PMDxvSayG%JBG)#Ti#HAL(Sr0K)#-+G)05mDGTbl z%A4KSyB`itN;P+qLdCVs%@e4+^A75w5~m$FOLe$IyOQDwYZn)|K0DIsnS*G6_-6Rr zA*ZVz**?Eyzwg3Ny>PNU35OIve?usfEDRW4ca^eDQ1QhljKoBXMa&u{El2S18pM3j z9Ew6wU>7jNDK51MvbECXeNfy1&BKk&aT=kwt8Mfu;w@zI*o>l!H*s?A#C}VrTXyQI zddAg?>g@^rHtNfg|IKCin~2NKn7Kb^oii%uk+QRJ5)JJ5xg_Nlrs5QJf5kV4u*;EP z!hS!>FlqqRYg5#dZA>F3oDE`V;*f=9IQt>a;$B6>OP}Rfv(mr+dt-Rd!fcID;hP95F{W%y zI@s64U{%X5lBAY0N3<_e&F&1UF`+B#C5!}u(roWO zh)X=cE~sKucCD{wwXbHiuVyvJ3A;h(&vrZlp$u)~7u24UW!An zRMRpO!4MSK?KGMQQY_nvpw7n$?zXO@`fVJ=3Y3N**hAAnUc#6>f65(*3QA?J!`*RY z2SE_J0?D#w6n=_!PftgjzOwMpOFfbY4UZq4+jVrTH({`fGycPZ0`%$c@~jgNlXMal zfD0UL=Kz2%easaIj9&qea>8d@Ht8efvaw91-WJ=A#e~YC>fTt|Pj>K4+dwsMdsk6@ zuN+s+IZ!cTJ*8+We-KA-0^-eJ6zz=RFwe??U0UTgKwoM>%;-kXVL8MPcOM>kP7Ii1 zYcSpR#fo<^*Z`y@;k|=TuD%?B*k2_Q@#DW7k*@b;Ze$|3W|(SM%c>_w?ji5M-K^^M zN7XcEzW*@aE6TrTya8dn7bW5lFT1z3Hxu>L_S7T2Td;Q-f39UFZ^tMs^$(*d^`>k& z>9fr&`xxhEK3$!M=y+6D=Pb`JX4UC-p+==invsUGrt^dk9Hnxu=;jekK1CCZhezDB z)%G+Lm_wV{t#9#jlYvJw9LZ)KM3t6cJ4IHFozNjb6^p7=l+q4YN=iJY4A#E^Wl8Dc z+B*g8p?gC%e~NpgxyUp(2PhIJ_~at-Fp;*$Io0!2CR7zZW4C5BKy7L6BM&@(y!1sqsA zKE3j-1!>X9UI@D@0jL9u8svFu5SOji*HHwje}_K()zV5Hu#wtrcukoH-5jcp`j}f$ zmcE|Ua-!z1{Y6~@`sG8l>6lb@yu@sNQRN54~o85txKOqnZ!AbSImdL22t zv6J4VKXCQk3CD!qq^Lny?dDr(R;QJFXI4X3=!`GiI&z8)02Gts(f9D@WvO5?FXN4#3gl zM_-(I{4ySmxC9QvB1~qL$iui7z!wvYY$l)yilLSzED~IPkGvhCrSYm9dDZ+Xf5Ur- zpH4!M-O_^FYpoDev!=3+lgDl2)8GqXCs%APK%=bwU@<)W;EBLxo~*&^E@Uk<;$-PK z+D0{X#oI~z!ypKbTQn_1ngCzn4Qkj4H;mg96AmBU*wMJo$`gCRE2Z(e5(7KQ?eKS7 z(F5TX(}zw`S@Xu|k<2zJB;(Yct&ak(eGx@5{Dw%s# zgIkq^ss?G!#;ba0%D#mz1AvoBM=YJ-3_@>VP1*}55v`nfm>qa{PfkkBFFn47$|$rw zX)&DX9v4=NQsb@nRrhZoMmSf0Lf8S!5r5 zj`~x&`8CL!>+Q){)3e#QDl%J^!g>pQnROiO(Hgu4C1$-FvkEa`fl}`BHUzi24lDO{ zT_Yi|y%p;DZSM5CVVm#vx?biL*rYMSo-;$Nj1jgJ$1gFzM0Bg0K-E^RrJEYstwq)y z9D6J_?Qgx=+Bgs#l#jsOf9>u4tpkcvi2)(s?7ZDMK<~Fvj2r`xMEUYgp&JN{fQs=% zlpAQ5VzzwbZr)&coOfxy&o#fqhR~qj%I(yk?X8}e4aRG}of>r3bXV`aPie9MJs~(CL-M0KAEYVgJhE zjHR*^RlMCS!sdj^f2;%wda^(5jT_CQRN3rl6P6vXp!Xt5w^o{1SAOUgYnr{R_0b`n zjJ&hDDOI%*HA*Kt$sq1?{!|B&?J9+z7EBix&JLiQt0@DEAi1`OuguQisKs1hfWY7X ziKicGT7vAtDRFbI8U87UH7*SrTW!e?^8-7NIDId7vo6&~OyR z(6{LJ*UKpO#^DI+O$ZG}pTmfI#RN=P1zS6SQP9%J@py~|Js2WKK;w)%jC2=hD$S$* zc`jhkvmL-uct$z*67L`#0;HYwX`ZK?ZI5Ss8BH)D(K)E~Y)?!Npj7@6=>laQUWtk}!k5DQk~jiXVCJoO5J`oZ<=F!FlG1vaX$8e1mnn1$@jM!d z#8;A?HAu(z8(*dV;~mWDALzApO^)!EzJJ; zZB!_Nd7;;Sbxd@TM6N$cN28DNU>N09^X!MoYsxQI<->|En$RB%c@;fu8=~LoFmj(`TLF}}*hZ;~T z=%ui#WAEh)V>UA?SHJC7aF$2}G^TjqhH%c8`p!WV-8UcSx=_WKzT)27{6S`2+oP~V}fi^j#ij%1f z#R}WZ3Bk;*sNWTu$_9GD7W9?CF0daqt~!Hw)NBbFuG1TF%nR4ni#cTC{g9S+*X{%iL)?w&Ky-_LTX7QZkdrpu)LXcYC?*CQBCf8s$$ zI0{FTYLJaSvixeq`r9~8Iy~44T>x4GR|*VVi*5!lK9@4dnH%@${$7;Dzec;gj2=|L zAaNqH7}oC0ig$jloP-n(${0gLc(Mn^>s-2=t46%>Km%)nq=BG;H`gHEL%SOrJ?c;Uh67wzM#BDxmj&VUbQn#hf2R?Ku}OR3 zXy6Uv$U}pyH;hIhn&DyCV)*RL`%PTU{`JAjV)X2R#s$2r=*TpnKI))d<*T}&SX7KY$pqU$ zJ9p<3M+CxmuC3XFId1fVe^Oc9aLVM@at9iamk2NxUwKk=C|`lnF5Bqc9rZ_P7D>%_ zLkh1YC0_zZ)jQH^QYY`;v!zk;Y z!H5~&Vba}SyV!p?{r&&a-5cK@(oH9h_5p;h$yoIA`+uIECQ;rs`YUgQbToLQ4V?zI zfVb=>8whCS#0$7B)UL`uPA}_yV_fw5FuZ3R_v=Batopq;CoIMVBbsg$mb1Kmcnj=N zFI{{$)=@Y*{r#VSfA`XDE!`fwuv5B|E9?yYowja8XpqYKot(fxyMLNcl*~GFwYE9g zU>PT>e5wj#8BFW;kUdLuryddIjaRRm(>hnM?6eTzWjsG60}| zM%*-I9Wa-GmEe=O!wZt2FGR_&1ADeXW4lTju?ws&F4S0-yWPD= zkZ*=wCNRVO2!qVR`SSx=8io@PjWCKddSejXk2$QW=ksBbCiJsKvtsrlW;KlXp!)H=H>S7mlnCIF1Qf{~S5H(4&JCFnc; z;w5}VgW^q_`--Zfv32F`xSOtMMxG&tzs9@~q46I{2*tEQvwRP1RJ-V@THpO!gxqc% zjs%xLe?G{Zf@1Sv9$ERS7oW`=TTpgUbfLPyhh=Nh|FuR(Mg`NMCKK23?OwiEU#3ng zRAuIRcc>+wSRO6SY?rJ84q&VxK2y3^#{=*gn zBbF@88X2{RR<&y$OIHn<$?yL!O4OC>sm1x*Ue0dUy`r<}vjH)%>2f|w;5H4(V3vWw zf$2$wAR|$&g_wC!J+9d=L=ffZ*p*Oz5GO}$J0p{TO;9sK%e0*AQq>Amb1_6ar09Bd zf1ZxVJZ^ZNPsuE(J(@dG&PP||Z4?OTF1Pb{a)Gv^SfiW`bW@ObFxlk>hYP|BItv@! zF6jjki2QIop{775CsaKPN4T!a78E6*(0$5BrsZc4Ponc2gQ{R7n!a?t9Y*62C3;pD zY%ot_K-&8d0n)e3jqH#G7b0^WTbUPqf5s>>=pV0u=CvB3sz%1uvZpvYzMqdGvH)^D zIBd=JVkN4m0O_H9#yYvba3(z-kFwme)z-0{CSMO`E0YIpxD;Fy( zgAv<%|NGsKC)>MwCvVpFUT@K5%Sw{we!$vY3#D<9viGI82#}R*)HN982{k||e^;Cn zrA4&PjlWyRAty|{Wh7>QG#39TZ0+ANy5!3fe3DT%MIb|p67L4sxwT2Z+xlT^Z`O26 z$CSE50tPL{U%%SHqqy2$+E|9IGFjfrpha0t9VJ3W7Vm{l`9dKRM!ie*C}p-Gw)&Xf zo+jtw`edx%R6+NjpiCS;MJ);xagX=BVa9J zFgNayiwUa>H_T>L3-IDp733RdaEMG~qy0nVq2`!0#VXfbUHrjIUO9vZp2(qB-GPtr|EmkUWmU~VpjqIMM+;Ti%SGMb1VeVrf1R_uOkvlvH-xd4 zayww~vv@efD;cb@4suQZESV-lx~MQ3$kP&8h=G2(xG6XZxb_x>e4l53S#(!ay9;z` z(_MvYySt5p==h8w= zKKdl+x4G!I@k2D>e|t5#ZXYp#7==$+!@PE%kA+>p~CoMr48C zEH60OgUp1bd#!i7!%kn|e*@@r?1Q8_iu;kj)b=_{tyMI%e~F|37&N!@%QVe71Pd%9 z`!I3{I7bo%*Mx5dp@|@b6olwF_ZR+sp;ZnvKEcCC4g5xbK_sEl?{{l6theh5idXMd`xTXWOtKLE0gC)cK zbGw&`iid);ue^+e`iD^An1PtX^#n(=vw+C1W)H^7e@n$Q=Ja(jCU7YKrg)#n&H7fC zi=~}Y40u0tzg?Sr4>|2N$hMvBa2$`W$bK?m^9g!q2HqyI=HLI>izejjqPadF&A=Hg z1I(Cgzv!ESAvVr_|4%r`qlCpow8mO_p{$WPq{Y~Dqx(Jz2ZfY_S++0ys2w_awtlsN z7G509e_uG&cHi+Y3q>=i?5X~IW=y)VXG^IC&FoD$h|1?iLNar9K|x9;kvvU7f}x0$ z8VN+J?y1YUGM6cyIl`d?bphCk(>xl`cQsvLTrK=6_Z{b309?UJoYG1xw44$(vaL8N zLE(H!U#!%4uNywTC}Oz7lpx)SW4zphl)7l|e^zWp5^h&;M(v6UA_CJwngC^H{YeyY zh;tuZ_b=l?eg+@Chb3(A9)Ad@$wCAF`|CRCZKk-kkID$`HF=vPEq*9UWfb4$OgS~t z&A)VXLr(_J@=dL}=~v!gPSJ{7LCbz2BbRRpd;67ZV>}JJ2pQknM}vmSFcar_Uagjc>VE+=*l9tvA}9p4(Phf{jDQ5#f6!tIV@ZnylJ ziS%onysvTc%5n0xF&K6!I^JfOhZT9cyT-TKQRu28&`}tZSY z*Gv~m({d#J#Ms~B$^T@uJCO;n+aip&f5WIOTVU!*@uwpy6vY6q&g;w-+Ny^`yvoHQ zAY@#w_q+QC_VqJ&ENrTrt=nM2&d^S<#_<5LR+6z~BF*(_cI8N+X=u?FR^+`NDYTBr z3&K-l+5<`UdrDbI{F8Ow+1~byfgn%cq?Zv4ijFm6NRYZ}B0b2g-WHVx#;<_Vf7jV_ zdFWMFr+~&JR!ZPox1h*$y9c|QyUO1f-?GC0?}5~bW}bo_x1f|drWj;VQkaxTgOIi6 zd=W6iMCo2vYvelDooEnO6CwAiDa=XA5eBz4>iATUeR0-D&YCElR4IgRCi|`mttPju zGeQncW|m9;E%;2*N(C2_2m#n+e<8@}^vyHOqR}awX!``7AJzI&TR+I;293*aA25H1 zLWN*U*|82IApLAgdtQ8TI%X4Fv(eY8B8<5HEqI}&`PTR%zq*ycPK6P) z$K$+%DDUoRmZ#$%kdwzbUanO~$f~}Pq~&*?9o43snnrSU`2pnJ%}9|-f4?7Hx*l$pI!0c!cPLJCcyaG*kOVCK+0D)8%r7+@7p zqVOz&rcr|+8^Zny+dPgg3qnUZHVVg;5OY!43_7Cu><~DJ8)K|S@h*(|;vKwvsB}mU z9>AACq?s{rP2h;@*%-xtf7UWQ7(vbROKZ7$t3i3b0Q&+zg)pMC;_S?L1yaLJ&!a1R zc-?@V&apMG>%8j$h##cP=_~0|p4$#tT1%+PU|eWp50J`iCHP+;utBOB@bOWQ?vOd7d{@`lG{QUj5P&GwQgQ85v7O+{ zwZ7eOACwmPwCX@L!L(WlAX$>E2D0w5BCEgV6ZMLk+jTi8FK2aPJw}>*Zkb{w|JWgN z^@}OHjqAOsL9qguf50+aNeEYKN8l{wg*w{Yj>dMWbpAH4uw-lbO0+#ZuetWRX^%n5 zN%JW4dvymqm&0>9QAD0Sq^g;6is)X2EU1HFwf4|s%;GJk!fhFzSptIw$-IN&r)km) z?dU$&m@TewJyroKFE#*^pe-`!6d+BF(XK&VK5)R_DE~Y`*AZB$%V@88|$`ebcm*MyZ!dgRIHJdg{jWa@u z){e(ApA0NBdq*_w$fWXGOwACdXCO-}S~Dx%K=(4)fDnsi8mdDQW;L9gf{funVV|5qpC^tbM7dQDt~ ze*{+!E>Rg*7kI94I0@+AF99;ZU>5$2b5_`0?WNQ^!5QU4y)l-XrSuG|!f{dzc2A;8 z5u-u>Rb$I>tsPdye;f^)8a(U`RMpcLkfT9?=3G}R$EhT&LOpuY=Kg$LDz!@r&(g$* zrL{+cIQnnNS#jopg2PgoN!gA3+5|nqfAs3Ok|=l+@gL6QI~DgC1*l4Smm-SjT^S&z z+GWMjrOvWc)2p1dxK6nXbGf=*QU@{~#gPbTwNKuw(k9xPVGeg0+!5)<&5*cRLx0=) z+oa<8tA<4H%PRLPtyTCAUm+6?trE6`_drAU0mG%!4Ta2J5b+IR!){OG1SG$!e_DTz z8TSseo}J9N$!Rh~!`mLc$aioh*_6fHo55r1Ub(r5?|SA%QjxG$tD>-T_2R)DW>-mn zTkOK(y>#2tm(pMCZf5Hd`ks6mWo}oR>y}XH9aF-iK#IC9ykVV4RwzA`oERxzgw3#C z0jA@ZV5!}Ub?vbaBszeUG>*(4WO+MuD$fzB3OCRmFf2>;1c4%vy2{L6&9Pt8DCgMgDs>*IEDuf z&P-J&(TH9~)m1cTN*a&(z_BKYYWr`+eeHe>Vxcm)n521%Y#6oFIC~o=lI2)5{S(pF6gvVZ?#*Mytv$Qf3>1}x#lzalGOrU zlY^9?k=ORd*WD!Ij}1jd0T|-%NB6nDx8O*O*@PQIF0L{@UTrv4<gt$I;O&`#lX*o>QD z9%CHk;Q(*mPy@JUmjUA)O~(mGh%$~TE;gP%Hkt!D0kA^=cYx$ZRQNu`7)95u+ni-p zd5t=(1XWtm9%g?M(uu%T`79Ar&OqEhL63uzo_OfD>fJl(f74sU)xwvVaxad~-D0yo zdj_mFXoE=!hz12UN(yY?ZJ|Q1h%Ri&e)f&H3cf(?XM#MRSB117oGhK7kBY~W{EZca z6_3hcy{nqfuoN^P3bkYUv`fUolI8v+iScf<6#3S55jfK#TIvN%t+ zk*v;%zZ&(Ue`==`nCeD|F*RQ(*6F;utP!SWoA2#o*&6pxaTw;<74oSWXCX%6@KQVm zBahlhg&~qbZ18Nn>3L{kNiptM_U}M}>a7U3`XrC@tKEs5=br+h7Zgl&4Nr#|D5W|Q zr`(Kx2|>d`ChDMG^f??~j9?hpL4bIYMtm4D#RO15f0DzL6Qmy9m%juYxYeS>#c#Q=3o41-hx z-^;F&Jp6o9QX<)@q&s88Ae^UKK_>yVs%2p%daqVfZm~Oj{Q!!ozu2z$u00k5yoLKy z(65x}f8QH2%nU-_6HPoR_jrlHEtt&Q^dZd*h}{V~vJ8MwLQL^Rv{DeTZ)p!0q(=K- zQUw3&X1K%6&}1ioB)#Qe#WfLcoQ9An(T;dF%BB7O5< z5BBN8n&p5ySAk2msasNj8}5yh#+#$zCNUwFe{**8xJK5(7LFq+6cg@Fqc*~vUoJzKJ&kRu#3 zf0;{)0i1gj_AjUiQc$I<$pMPmU4W5IIKg$bqUSP&&!^^D!~ZExF-f2^PBBTc@)YCa zNGyqci0qt7EfAJEo#y7cakDmyTXD{JN=2r4(_^FCtvI6?=WQly|xuvsWe_w#o8GX6MxT*uJ`@pcQIXf(eWvaqTXvq>h zj`L+Q`M;4p3q&Vmsfyx|*JK!N8kG*#w6NzSiU!eug(XpSkVec^&caU-3@!54(vq~D zqoQyY=b5ZY0E_6!q~iElKT5($obosqqYzkFipCHS*RuX3zQ~oxmnsPg z@KTkacL}YkkjKg@@}ji9kwuNdsIBY2RBhQ>Ez|YRBm+sCvU#i43OBZQgA<+f22&_* zv<9U$WTwI^iO9!Dh`0c1I?$NTgvQk096L1jySY$wZL+R^9e@8>@XIDvr`H_YkGuec z{Yf@w?6-lIQ$+h9!*v3>|03;ke-@uDixC@Pf}0dKoDCUWVzA;PP94RV%MwDx9VUow zxO;_d(U6--0y!ZurFg%y;<;{ojJifQe~$A$yf{d;cvWSPY`%V0hhJtFu(}dq+F9$j z!?6EZuqXaSzVIhU-_o6+PYiD13uAn;4=_7Q!TD~x0-RXf@%kL8?*BM5*D8CVWKO@TZFIia+qZ4*r{6 z&`UUcYucW}dChV?8%$yle~;O5&8}-rquj#ytO6e6`%LO-Z<_GqvpH6+(72c&6g3!GfA~n|5fU%R_M9ro3_OCFt6-B^UH6`^z0sVX|w9i6ye|JxL&FmTI9X@*0?7Mo#z*;9Cax_-_k9 z*_)X=_f`2bs1Ts7DLMLh&PVv#Z+W$fe$jPaa9^MJJQFl(g<0!1NI5Ih@;mPQD>2VS z%m(WIoV0ugf7Hpuh^O`KFjqXkEqcVRzp~bOsF6e<|4<_CHW;gvs&0iAsk2J9N?-4u ztKJ3OW=_KW%17su<-b%1X{#PFI#U$li^}Lqy{#jSfz+xv$y2;h z65|0a#U#x_vlvD*$5-U<{g_V4bqDR^x+?^Ty@2Ste-HHtP$__3MGlk3yNA`6eW@N* z`_jyz$W&@w#>Kj8K{h$Y%a^Z+>XFiY0lIou^llXKRhV!YWvcOejKr8uv(Z%n@p5HP zN7L*qngiJ)h|M2_ZBxf}p?jOaXBpR;VAgy_6btHh=i>tPb(Cj>da04KX@ZsU0Mq@7 z^r!L*f7Zo>=-~+MoIpdIG^}I}5eP)?VAgXrr)^yfH;mghK#mhFRR`RhR>529s#5H0_gJBaS&QWFj)dSCrV-fNO7 zidHhVSzc%(f$;97%k#FEf*Lxxi~*-3f3kVTIXAeGfs@`A44me9yz;n%V;8$_v+pfg z-fnP^hV=(&_@xKwCq_rfxLt_yfz{0P=I~Q{MoSE?mcyqN_dNB}=D`Tz+2|K#4n!JehxU{;sVGf!m=`qS~%Cz~8e~x5U z5V0KO8jPj-wL$b5!@SmK$+(`+5PqwA05LG(VD08$eBpg3EUdzP&a5T|a zvoz(5@&!Ci_3?)?HQtVjtLY~(fB*H^+8$f@GmD9NhR+Ts_a4~K*k`jYadS}1zS^?$ z1F=Ol%*clH0yo*_#y4ZL8>NLUPd^KL-X`=CaqCZ_FAIL|u(E{+rdDhuimThj==T|w z+KJ-ocBkniiigSHqpMO|<5P9}X%hc3EsraTYvzfs*UHnR(&|<}PqTc3e-cU#icO7A z)$M^J#Yt&JxYQ9Rezl3889v>djOClS1O4u;>ik5aEu`)=p4hP$zawpD#gjZypJL0Z z!GZbY4A+VITv;ZyC?W(6q7jsVKzPsUScbrdzI{yl8BVe&FDm2q5mIQSf2J15)|9eY&Qg}n z(?ff%<^Xm&5^)V~2)Jrr09}^P*GqfOE{^VlK;MtEn@>Quw`qj1(|)E2Mq-CU+wMmdH|;0PbeyR|U)HDkfBtUF$7&!;lMj@EsL)as zH=SVvZd5U!8!&Q~*LfVUn{O#%!CspVZD9J7nmZw(Z94puLNE0d+sdupEV!;c6hh+M- z+3gO+^pJjzZ>5vKK~%F<#wJ|`dAd&_dN8#tY_n3S8;cG+H`?G z{B={_;ifEz6>v(-tkfVy$A7!6Tt?Gf^jn45FX0$^e+1+d>euR*vjvtaZ-*u9Q(rag zfR)m(tl$n=fuSY1*?_L_KamC4=(+7a?_%q7@3`&hulcvUa-Zd=SNKv!yi%foAROb5 zY}|AE)9Ro>ddsWl1Z~f7?!1FLay1aX)-Zl>uAmB^+ec2HTj{0?-~Xh(x47GM5GQ=D z7bbm-e``tWGvh+sivFa29M8CKHlsq#Ibb26l<~7}P@lX*Yu=~O&2l zlz(_E<3wppxzn2K0sF22O|rFy?AHuwHmV(zPdpf}6DJ*h2UZNp!Vzh+cnqWR!!gea z;zD;hOqDadB^7Aq~kcltK}>me|?Jl*6|&CX4@|3OYCpn_MX=|EEv4N z^gTD5p#Woc?@<1NIj?r`wBye(L27qFvU_ zezWXdlN~=E#VL~Jl^OUr4SPQTsLg`=b;BF`?gO>E9VawWJ`TOb^@ z%JL7f&I%zP)5&?pu6!paq&=OS(DhH??E-CndX51y09lt%kE@Z=PBlFyWPIeMUJ^9{OAM$~ zxg{4xg_oT<`8)b;t_XDCt!$WiO5ME2*T>hc^&n6(jBqUCC&S+c;SlXEDC84c`0W~Y zD8~7>aN2<%Q6W654{9^|Nlk}CkZ;icMjvB^GYw(3QQFTx!`|E$ebKShf3_+x!aKwC z0=8#x>Wc{&F`f;;TLF0lEt`BEN(6+5mOxDK0yOvNtEs$^+M=sotJI$8uqm5SuoHd2 zNHc>(ijCkRRfy9JiAR4bIC#=PEpIo_o8kr6G%Au`FwW4`i-2iY&qSVh{%_Z9Hi@*% zSWqpBbwgmS@IQ)il}Kvgf9UA*;k3y1!iGE72tK90$g;d)*MbJ6#CryBCxI^G{7SOyJ@lzm z$q%rl;MYAkkfLFTaf_v+52bNlP4I=nD)#&G<;xe|60M1ka6f#3;Df-U1te?EV)2mdd#o^sN*Gq9T(;s z`YGY2AFh4p-{Xn`d=w+Lw~=*Y0l>mv{iVeg;C>mH#FOCh(L$ z6?L8>bs+laZ~XQU{`Ua>2dIO35;53khfxcq-$+ym4tT4(5;YD?a_)6rijDS{FsEWV zVvOQ`I*8t4Fh~%|isWVEn+2Stx+(nPOI6Xa;GQcYfOzwan0eIEj;7Xwq zZ2x}b$87>)8Goz#AyAh9^{+sTiB;M?-@2&0qSfH^{ z+?#}xD@BRl2o2n>#f7R8=wF2MLM>UW>Yc@dVjV0}-*f@3{V!n z`%VolM*jQOk0=4Lb}q_(SbOtfi%Quly+B7luP*MB15Pw*U45C?hpWOQQ^R4X@AVnuRVml?QL#tuYGuP(DrurPxiOq-|gMKjjc_=ZHyK7t;XCRcAkz+5Lzlcav$_&CGQ{diiEZ*4YFy!4K?8nq zVMqO~8kSG$k=LZ$r?@wmx7X`ZM^TcaDRR!9u74Gt57u4-hH(Xe^(?6UtA#pP(-TEm zVuA65BotXGc(EkmlWmBLjO{?B5)5epI1~lP zx>MpodkdYwWVYka9=DW&w+2Cxd#N=i2sQN< z-HMIgNL09hzP^FP&dWWa;#9OY;6jyZ(p`wL1Cc{Ux%b_7xxwgxa0Esavy}DiBcTjQ z8)>`E7m};SAg6#K@=i!GKl=!iDB?Rp)qgLs6?wF3t+CXP|qzfL|plvW@ zE6>HXSVRPoXyh-yF{5aE`Utq@=c&Nzes~Vj>-M%>XoFY*Y)MJ_Pi}Wl?Ola?YwsH2 zXpK!&!?FOXBY}B8nht6Gg`9-NN@_X8Es92H*>=_b3>0-tvVmN_RRj6NP$WoVyGkn}%fyJf z6>m0E5$mH;l;H`qA`aE6Hh6aF7J{X$D86Q2+91Rdq3ob)6Cif`6xm2KM#VuA~ROmTjT&;)2V3H$x%0+T}m^!KFYM5bG-P=EF`8lMHr z!Eh?sa(V-&6Hga1PWS&uuPTFmQDn^MIXeOk{$GaX0AFM2w4o1t?oMgu2K6 zB$DPt!^Frd#o);PwpdxTBJ+vVd@aI;o2LFwn zk<+c94m9^+t#~ua`h}|U4zmL+tv{O$anHyF2hry?pG+nT!eYARrhj^^BAmf#u?G#9 zzbN}-dZGh>Yadc&q(-V>?;=WSSmqa8dQ+NcMrmf~4nmTx=p?xYpG}U|kK?@xM2RO*FZS!3YmV!sY(;~G8_3ZvYZ131GL>ubp>tn%cBdIX%NeAU~tUSohrJH z4ZQZL4M~lU3hnhVc`>h$=iV!4iw!TPZ zE9?zzi(yd$^nZb{3-LA~&Tx{msb7gsT#-$feB-L?;=K8j?=N3? zyT$jK8ehdL3+d4F;6@`#Rd}GI|+4yx&|q0Oej+ zJo&h{`wopxzH<{#BD}NihTXQ-TQCxKxA&ksBy!hau=xpE0C9&4t%|S9##iM7uym*) zIwrZFE&-u-`2%jBman!=k|q}*e8l}2(1UpHhZoQ*rJ$Om(+hl_c!3WJDMVYQ34i=mbR?e;1g_w6t|I#rnW#*@g-u12DiTz0f^Zlo7z7s4)quhDqYq+~(TGF4V= zBoZMB>%+qTK@-O$3fNB=?_d% zNmz6*hia3vi8Z;(B>*jwIKYx?xzUW$^rC}gD(hQ(jn_!xO_OBB z>p!xD#`LDhLvMwmu&uIhBYz5T^V8bk6FPP>qaq^v$pd{ZpM)SmqZvTNBSNEV zo?m1u-EQ80^ldPV^RsC$h|_M=ABW3Nm%D$-qJAgj?sz~U71kIi_LXH}n#Ab;Qn1g6 zE#Zr=s3PU6QA_WTrGl-lpMQ3_(hB^<$*1(Zgv+5;jVkBS};P^3*XQGfCCARQOo z8N?2E`-qD=a1;Z+5H0*65Cw)uM3|lH&rq;49!G;129mH~B09Sk6&35fg>J)PgkcpE z0$)_N%SGkQIJ*$sP*js8%IZ5!a`KT{6eYh*qbZ`5UMG-v{%&t;ZS%+d1K^Vz->W8uJ3|) zOb2b%n}3>E7yuSXPjZh7eq-{5rZ6s)xavzUZc$@?ifM4thY!_F5~J|pLqS}}RdHHp zEHa1{)^Wj`+ZT7dr%Ayz_!Sndc+$}xXWS-Gi?5)FKz#vR!97is8jcs{zErcYcP7%8 zoRyP`t|d+Dm4Dum6n|T~a`6T8;Cl@5W5F2Vv_N^W=^P{Klh%C@_s@M`nm*7Y@Y_Kf zz2_`!pn7uwWCm;fw|#Gjm(F~}-qO5d?fnklC6IZTE>Pts5K-jc0jNDqVKm#!gl}C* zIQTHeW^?*((EAwm@R?1-P6r0Cb_)eXUolV=U+qfj5v6d(6MuCB{3)OMnq^BtnvA&z zs4cm}s*MYrC*7i6q**S;WA51Ygx#SuTdQhz9$yruNsq0b6YsF9_NKWP=b*b}S4rPf zei3nQ)idA86_6%Q3((=Wkb}LE3{U%5nEjM|^zVuGpjyNH_WP6gBF~yqhde^{0Pr0( z3D6%F9xN2MbAJV>{(@MMg|=D|`66UhZ?+-AZ?iwb7`;f42jRsH&fa@u*}7!!qL`-;Q|KRes7RUwoN%^`=ho zjV^vpQ*U~a;KMg5KfbTNT2+-oG*52FB_vXL2hDR|>W;j&x3~7= z$@+)w?SC!u>m`He`t%ewha|(zwS%>jA9l7r;&+VRgei99$M<`?2fGJ9z9(r}$*b}! z*%(gVY`uGZfQF!jkCQYRitC+wb|qz|<2r;@RplE4EG6V0ny??sni4==O~Ehg;L8d_ zqX=`UCg>+W`m-)$skZh7%~?1|FFTWn_i;4npnrc`Ca#6V`y$=7ERn9;VHT+=nlqNf z&{OYx;7_TNrI)f0{*>Ekl+qNan0`o!J{`(p_){{4cgwO6{#1VCk|KH*F|7Z1uw^W0 z?<$XY16dVzx3|$ROjOuCJp}?(YpJ?6dDkm%;iQL8E%>Xft41o;9Z_8kjBKDrE;dM2 z1And}?WH?gTU*bbJVxsg=HsMX3K*VjfL4x?scd)@e)W>dK)4?@|W=8 z2DWI~pV#A%?q9Lm%a_I%lJ=-OGz%?1LVvek5K))gUT66+b|Qa0dxk#5i~3?pXwdqV z4qtkUXEgld1(~ZsJX-R)#`jm=lGPXD2lQw0n;IgCGwxceH+Zl{+25$AdlE1UDE-3k zH=tY)l6FsJ2tk-+zAS>T{hfw&iajN~o+Te`UWOz&mx^nvH2v0E-fM1PNg zOtWaz>1eNh?|}}@W7u2KEX_2)j}dLJPkeg_bkG$mP=wa5^+1BM1jIpoI;`0e^gfQa zYyvATFd5kHY+wlp|*0u*nt6F2S2JQ;XY{Dy~}Ugo_ zSy9;FB0FrlTaG70(cXiu;VAedyXvj7b{|`QkQHkCAaJj*TrUh^Zy- zD~dGwXxZ->1SzQ+iw++h<9{kFKZXs)1h^i&lrQNeTdd-1ri6KIU*CBM$YIEPhU z{Cs-qY_RmSrbQc_J%Prb*YyC?YTkqV4HL5qVCvOlY(ITm8pGW7ao+Zxz!E%fxf(kF zEH++#)b<{i7cLwOUPn2G)Z7pr|ES(gl2F>e2JiiiL#3h|i%P%Y8-InB>Q{${vX|pk zAgt^1xX|3^#JjZC>S8F)-o$x6infwL93}>1OQvI~JwA-p?I_>xsC!$1$Oc_1zjvO(-nJSwKP z()CdQ+OmD$P3)k|iGQ7}&_BT>Lg_p5ixiSopjwOT!ngN-Aoev5{D+3rOpISk>vV5S zfQyS_g5yxG6Wsx0hli#0iD7Yi;#iFF=sA`VFXjkZX$~fU2b~IcTzm zp+U`5mMK9;tG{idqnhc<9@^UMA^|fh%kFJ#m0Dy_0k&1u_c6EhpXRH=51>w%^wAaVQU&4IqHh`k2bJdhV`M@^-NGrtCdX^V$&)- zS|7zOg^xVye1G)BFZPtpLX(I(7YdC37*2dYnIH7)&kK>2x}y_NS&*##`+MK z2BV^zj#eH4U|)J#nhwZvx*~xMEDL322xf*TCFzW3LDem;C|YVBjfjWzaxv zkJ7LNl_@kmAFz?;!5^IH5H|>%qQAH z|C0^MV}BL7QdZ_lw>VmnLuF+SB^u8{d{(u)h5oAKbMwVe#r%sPmDtW73{#P_WM$4W zH$;ye5ItI+2TMheO6=tihN;Y5G8cEb4XC!~gv#P8nTxN?4b^i8R8Jq*Lq$RnskVlR zi-J9_+NpDXy{&sy0@;&JsV8a(~2r6|QHx+vdGC>C@3{DR^?jmhZxM z&05O%A4X#tV#LxV1vZ_?Zm7A=&|OR7jEq(zdMhZcMQ8I{VV zZ>KZ}P&}{~3_`t(+bLAgwGN_Dy`D|&8Vv78*&{^CEneafz6%;pJgORoc||Q*NMKAs$QbDWh0>I zH{!_0@f;dVAU<<__$CYRrQ7n-<7bbbKYIFDNEX)jCFA?I+SWvMr1G=K+ubT#GGd*~ z)T?eL!N@u5@HsZe6IZ%g!@4bD=H>&_@_*~VO7Oc7imBeLRIFTKgkhp~B3#(Qu%-q> z_=4GfDrL%*)wG|ANo_igOxYLV*HIcz(*AiDBLZ}O&bo1yO{1*){OMolFOl}Pv$XW& z*^_TEkh1MpR`OXBPLG#yGDt5ehLp0wki#Q?2-ty!eMS)VuVjlA*#lmkJKAHh)qfg; zQbJjS%YM^M+HikfFzogV{0xp#0WlaSCqweuOs3-=I(>10KtSDzLSVb&WmkvjQ0}K> zy;7+eUdh-U6zzVcSWS79T7eV}&cft;AtS$6RlZ!iD;)l4pE75`?(W&wuC{B7=W)U;8p1-G?&wAOhmHcXa>cB+A~>JdW<; zptRFhI2i4z8Rb@-a}X<(Ntjs%XJ_mC12+m@-H5KyFMVK;c|ps0;z_-fD6Y(tqP<4ELho zEe=(TfscEy=PZ>ej(KV`(*K5sNB8lb=IZGFv5)aq+W1c5#Y_pT`a7e6rQc<>njoy_w?^d^z+sxc z=)U1q-Ya}6!8XF25PxTJO@Hhjir)|xF@_a;j*7jOJFOpeYOT3hfCPcRt#zhkDYc6% zcU~Y?I?mpuIc9J7do1Q*$4*KJ={pjGDGtsi2X;EhL|keg7-W*>9`MY;$Vx})N*Yx|ES}yoV2CXOc?pjo-%>=vFSNi+efe&V5xM423Dyu_{zm z@H@8ATB*aIinJlt)U4F@+?%K( zPo3?7SvxlO+aQUYBZXXP9d{MyvMCjI-)4MzS{4)w^i`xjdP6+GtY~ffOE?%f%lR=B zd^tQezFe;slYff)HvNaK@}B6mTJ|xd;pMG_{4=z(CREg1_q4QV)vRbWjuUmuPcIFi zK-j+4WW2BSR(VW=))fO+eX&1Fc}i;7(ifXO78tRX+wR#rL!WoO!lza#rM7?1wGQ`6 z3sKrgbqa=g1i&d=f9zE46w!fFu6m`EnAc98h1fp}vwsby+)~_5Rbh__wYtI@Qn=%@ z&Cfz7X6Ta}F-%}^H2y#~4TJNjJxc7RSHWy3B@eg0SEZBLoF)*vnAr`tt;lm}A+Dex z&Sp#X%SoUJ_P_^I?3$moG!78lt8On!&$%e~e6eD!8UTr}F{XNMwrr3_WAJczV`8vF zRWJOvz<+v`Bvp4vyD;wFeb=s&fwE^4-I1C*fWJx-Oo1O@9l4TaWDX+C&7qu)3ecKL zAN3=Mv!$d6GS|O!E#T38;swCsU>VKELThuZDju#PD`u%dpyM#kP0mKY#tyb{DOANW zoU6^w^%ACtG)s6Y&X5VXI8gb-MM12*cE-vE8Gi;G7ZL*uAJ#yZHT~hi{pyUM9Vzxd~s`;a2XvTA61L#q1rkOE9sEKgZM|q*! zQ-3c4^7bgm9w_U;X#6aSyp8?$Ev!vuWy&Q7I-0UhAKf=b0daxdo9!6cj*&1lp0KD> zD8C4wJ>$rq!gz#sYHVd#nnc~AsE#o4C+W8fBVj-|jK+wMihGe6@)e^gBx%mU`BHC? zdSNf62n(R_P}`4@cC%5PXEkMPSlkhUcppb3&Gy0rkAbtFEh#?R{%Hnf!g3)`tYmRky zbU)8VagQw0s+Wzle?CcpzBecFCrkk?>jpu0KtW(f%jjmnQ?&j?k zj91;q7(aK7N_Oi#pow(+S}vT`!xSjBTc}{S-brAh`5tRr2KxAn@0yihk(XdK#zrw^TszI4rMb_csK%TWztQu^LCs}(Rjg@1(%@mhE7 zBChTyq-q_ErPT>9;;y3^^~?6_2i_WoLmd(bt5q@H9`IG>dOq*$_F z?gkh$S6(e7pe|Rnqr-^9hksk^D^*aixrpUO;W?ljvDjd(gMwbG$KRdX`ajj<`)Lp4 zF>go4+66IzWAkTsHmGrr@j8N&Qk;Jwha+OWcy8wIAW-IZbA7no!&)V8uxmQpc>Oul&14?whzs%<}%JaKWw{ZR!>z(tW{ z5BuZ?S?0G^t6O5Cnl#B$kazQVjQ*$SxxnsD88nv3k}6y8oPT1NZhRP+VdN6dj>8vg zAePe+hvxw36~O-^5id81pehOawS9-l6-o6$U9H+4w&Tw*`0F_Te%kZcMalciqot)K z+IxR_^6b&$0H*+uU1E$rfC(*6wA%PMYdSou?H}8vQ#kuD@MfGqbJ&oeC5(gKnENS5sK_TgNq2XYd_K z?`ba&WF$9UIegG2YN!Z3go>6vWbDIAkK_hYkkhb`9jROr7|fTK7y6$0ok78!aS;5 z2if8=w780+(EwYRL()TEW7O(pC9EyiV=XJ5;Ek8H!usu4)kk&kJzBZJ>YziZjF^~N zi{q#~27e-68^vLU@pVCZ3n{K`#o9cnTbt6cE1Zu@x=JlZ^%j?=IDM$eZ0{fM)a`!byz( zZhum%P?+q$gwy1ZUyWz1@!P?{B@?+Bg7>b$f63t!IyZ^W~}ebn^eR_pWPk z9Lb{StCY07H`P|t4d^;B8W{t!@kqb|WY28GVHMp4lZp%>guu(us zD-1INeOoLewWdZW=z}d~mQg3AKccIasj?dCX9lKabD?-3=7eq{Skd3Uo+9QrM2%i^ z=k&LM;V+MNhzEkcqTl?lNrdRO^8S5{|NpRM0=AsXJS*ce#~n0dysX7;isjiGlYi6# zw*2C-z9NiTFiiwaRjgN)tHRDbD<_YP4Zdx+P=vmG8=f!U-clM03opv%`QpoxnHLwD z2+d1hu+Y4E0zb=S=B3XrGcPrfnag*kvCzC!Q)vFn?1bjUg;JBiLe)udtFJ}iTDp;D zj?eR=2CDhu;tb)mR65eqvga;#n|~^KCB+2IZE!MaZu!E?lzw4AZo=@IZSwQOnjn2r zx`rq9%~4Na)Mssv#%|pN!=z2U0ggSrA&xbKArD$6&t&ceYVPw?(|Eotf`Nt3I|#dS zHB&WBq6!q27N7!`HF%E-M!IM#`q;AS`Lba`cE zTcct2DaSPiJ!M0KDYu$6D1X_y@zXdzmjBBut6C?ypcjW6DP`FzTe0u-mE3CI?7s#n zk3L)THF3is1E=Bmt?bTM9al7BIBV0FfCzecSTDJ3=guM*0d};ai%|BUksBHI`5uur zx6uxAW@u{<`IEJ2j+Jq(J=#S6yYX_iX&-}u)_A)KSw%8eiM19YT7Q}g;ZH7i23n6A zRaU&Ksj5D#*{ZME$G7-W7|5b>^hmvwz4siG!MS8y_Y3$zlxoMo-v-Jb&~Ih#Vp+hj ztmMUxgnq?wFjubrZj3jZaX;z>=qeKlXMrnkI7!FkA53SpfW2xV&1Da_sS~UjtY9DA#(Cwnv!_D!5P|e4@>JWoyp1G{_ZLWs|*HnA;rMvWt1{;T zx6@Ev23<943%=@W6@>YNgekkD`37XEqy@NA0^y>!e}DC$mU)&^4{)w047FNjUiI8H zxXTcF;~#5p-mPz}cL@BhnhiGLx)wjW6|EiEPuRO-clb3@PEl>&+t}Ur#O9$GN`9{( z!JZ_ep%7|WOl`zT-45&JUhxI&lroH>K#4rY@E_in-_%7t>dgA96@)~2hNsqS3`PCt zOsNRvihqfp_?=1s)DS>}3`uCR$K)5LwF^(50VpE{$>X;#P-k$3vU?nmU!&nAfP!l> z0_a7Q0s>uThxnjT4Qek!4Q8#wZ{}vBZYpgzY{PY@<-Jld`814n^Mea8iDmYaFx8@% z0U7e*9fDpG&7+RTcxA6lu(+cASyOUGTJQn_JAe62Jid7UP+)eBYkwxT#1ngjGb3{4 zm&wVmkic#Ju(iFrfqyMiqk`weM#p4>W4T720y}I7h|kI_q=&ZQliP-}rI?)0+&Rev zYd@8)?PUVZmwU%HLPrmPp;4RhWjd^=)r!d;do?BRW|}{SlN| zD>sIrI~TQa4_x3BE42mZ;U&>9kivkwVSn2*^^BuHD;Vl#h`);;lq64@2Iw>YS}8?A zhL!Bk4HeZdDJifS?{?N#_cuJuylpbe0suKj)N7k^Ox=Nd)DnvH8AYb4k>$7%vK$v6 z%dte3X^>+5-45&zZo=O;{weokcKcu4{d8L`7`ncJXeg815{@`eKi1mr<~qBnG__uhhi_5Drelf2v<#jyOP0tU8dUDpEbM1CFaB>WO7! z?tJ~I6Lv_k8(iT;B{zl^p!J_c$A1x7-cNF~j8ZwdR#Uc|jn0w{C|K9owpl~zb}Em5 z{($Da*^BH}#TWGElaE(5s#EZ)?GrH)T3RSl{7!%&$rQLiQUOB5ht5T#=@!bl>`XGoZP(^Z;LwNq}1x${5lsz=teAbA-iloV3-Gd>)G_605XA4%0~HV3&nKb-fY4F5H!V z)F-bGy*ufocg9;p8z6(@4+e(ms25(0vm7po!`vvyj+lw#M#`@2c9I#vX$#3ej18yT z+M>u46gI_-Ch8JYY*Q8h?FSX&1c<-*DxzVKpEH)7UWt1~H8T*Oa(^&J|4M;w^&d4( z-;GPjyg_${n0}K)0NQ(UJwP2f}Csc2P4TGTS!$2I-8*YDsOl0qvNGdt%DhW0i zVUi-rM$~pG>V`5e`+ud%z)zC5(dCyl0FW%a?U9{OJTe?nZ7@s9u*`OLGQ_NaBI>$O z3uR$7lPMWGovXU+t~5SUtx!CLaa0zI51koIR<*_4$}{yXDOAmH%L1{-#jOIvT=|ibQE+JozB~C$Oe$HQ#PDftq<9}ImV#M-`*iU(WQ#$*n zz(it}Tqxol?L2TFSPiP*+BcK0BpIreWX^SvG??k-4H{b^8M&Te3E}uxqxpTH>i5xz3 z*pcefWK~pXdDU%CA6kki&_$!8$QFJKFifT012p~Q$$unN%kX#9U-lL;(Vxt}sUEms z0xu-es!ri(xTecc!TbHgMcAyGbN$v(a`dv9V5*~Hoh1esiRQUN8JW8!?gGb2KUwyA zXJPLgcjPh@k+CT@UIYqRgrT?X-34lkp);;9%>YywMgyYl{jlOSy2h65I-KZJgge*Y zc8jS~#eb4Z!xanzijN2UC7FygI>gCn7!0D{S$hw>zQa!GT5AE>17;k;i4J#w=u>oo zv9V@Jh6~qTh+=Vgi8fv-EU1u&!Qe8uN@1%$glP4}L4oQk++FnilV}9OhbUTB$kWC^|hGYo&0?abvmMUESS-j3QQZ zLh0mKM!)?pUohAn2+YWa7CDBG{QP$HAO1I=GAp=lp&1D469xR{lY%Lf^jiN_JrBbJ z4}TCq&Sz!n_?)HqK>)i)kQpJ!(wB!I1vE8}66+C0P8~)u#?2|kh@%<;|H1o*eY3+O zB7`i(<@AX|#ZM}Y_g1GrI}*~A5z```#cHFPyx(N*?fj=QRLWI;^r(Epg*sk?51`P; zDVUa1qiOL&* zhl2UBL$F}|<&l0-o#nvtXnKr>aB4w_RoXkqDHwW}BK@wt+uhyR+CSRge7mu?zxsB^ zf7UYP-o_-6jTMw%_<#RzeGAF{7VAaM8kwW1b}Ki%s@<~`1|83QGKtvWr%XP%+kb>e zM}Z>c&!gD6!NeBCXQXVIw4$U>D zeJJ0V-vW6whPiF(7o8XgD98>Sl7Ad3lLjqloS;D5bUJKpiZzsBa%QF=AV5dcyKmOH zv688ZgrYo&0l?!4U=%*`;4Co3_m+kL0u*1|4T)gq)e%MI5fYp9z=W|u63lXuwUJbM zki0;%LpCI9$hPwSqJq&hMSrCsuk(0*xe{B$@K)FO=2i%|-o1H)ekJ&11%EG$E+gnE zjfQ9`MzCNxae)gAVsG&kgd-;yn{wtewlo+2S^dvVR{*r+-de1QoTlOYt0;4Tn57$jpfu`QUVbK-?P-uBsSO z9ve7ceWg$+frBy?HPNiJa{0~pejTn~ms4f@p{I1J(7q6Pq)0DdA;Dn(>LSefCgF9S z^hv6`8bOf_DBqj#H0WKGV4;kJG@y!mJiHJWSE`3N4U-|pLfQuv1%F1-Bce<54@RMQ zw6M2-WPe?$%^cGah~5t>(iNA{9BZzR)HAonBA!dYqyE~aD>%-v5g z8Hbno3Wo~QCro#eQ^x1LdIa*Wd_W5PKocZaM%+4{!b!o19x&O8++e;a|pxDLJ;p`?#%zv)R!avAM7x`E%@Ox|M+-Aco z=iOG~)Mk37Nx&WGR)@vzXg4vE&BPG4RND~tRhj(n&Prcfyj!xY#CIW3F3rl6duKM# z*<01J;Fy7Yy?@l?CT(dJLbQ`GHxa2bq-|=MI*(kfyT#=y0qWKyq@_ENkd|gAAuZ)4 zq{64kDrL1H1-S#WpM{cR`^~Sg`6S9FJj(C&?-K)LytS(?V!VSYF{17aDNcmr^E;c(e{ofW4?S9?nOG3 zc&hR%1g0~Ij_$37{f>y5eScdouR_%`OA8Gg&%CWif6(0yFD(~zA@9RdRHgaT+=8%R znLr1n$<6F#6g^t7Z`|EP##~5AFOFogxkspCQuz&p@@wDxK+!G%yHQa6s11Lzr&)@Bo=R7o zw#c06U9)@U`-kIn5FHaCRJ~*(wCK8>PM7(7SH*GfA9pj=?Y@+Z=jtU5F1o6M-OdJ# zYT7lwXGY3cU0vh-2Am43bhB|wte!I05RQ&yOn>{XUDfVp!}8I!x{*3`*REr?XV*ND zdei{Hh`w~qV!L6D)C|^aC|^{!MyrBhoVk>Z371yPZQ`$K=?4Cqc8yAQYx7Rm(VF7q zb&X1P>s*RPtB-VYj6So+&`++S-H%fvaxVtT=L1o_>uP8B{3aSk<82WmtInR5H?TXm z%zuZD>2mzou3626uX$eVm{(C%*8vi)<;nOpXaaplXRd0Q9m(I^yH*%bwRt>=^T9>b zbu`OhOgIJ{;Qe}B-0v|}o9F$0+;y~~ZdpY6)>|D6l1sLpA)NzGg$}TyeB1R5UVM~JE)3mV zF%&=F4X_oie4A0Y*U%$-H0dGHxTR6l;`2-NwX(ZCve#}V#VdM#&G4bLv?ME2c*8pV ziI{4J7~<0I1AIn+diKr;a#pb*h-mvHB<5yKQ$7&i*O;sVK#*xR(fRB;*kqNYUitO zW2o})uWHvPCQ(pZC;#q@L1`#et2UVYq%?#E`SF#2_^}{4NUFHs)Wclg%JrWGo3s(& zCCw{@yTo=W8H>}$sdDtc1+C@I8GlEz?YR@MwzIjP+n$;7J(K6XBC$6R)SxZixKM44 zrt-5KM5l0X3kW)9B2t33v-wEf_76j05a2Sn!m(2~OW{2A&ajvhJ{H=*DEvxUPE9lK zsKC?YcpOCWf9ir#BfEQh9E31uHa*taa7&YqmglcGbK$nV#mDg97j19p@qgiTsqE9x z$Pa2|GOx%YN_A||2%*T}3kNk;gmvrGtIGadYs8{)ZvuTRUyDNA*& z8IR|*Vp){iW=z!$N*R|x#eY(j-?zDG4mqk&qB6aqK8EENBMl;YHSUPw&TWW54rPIg zYV<{+M-)hPWYW@|K$(>Ogif+;{Zs=L4{V7X5bhSjBK^53%els)>bIFnHfem3x`jDJfcHLb>dee>(L zKpJTo(j^7hKUg?4rA+>|SVlihF;pCT(1GlXZ$W%Cx$tHT+l$&^ufxXfMbpgQ(aObQTU zr9so+>Z;sTX>qRjMz$$z^)$>#dtz@ebA?NbV zh$GOybqF|&r{d)-#q-1`Zz%GEr{ycIy#ETYKfMQH)XEiK%L6pTOxg&9_D^b85*QYoQaTBygp ztL!ho8gHy0RNNyJg0?x8Eil}m=jC4Tp$g1PGo-UirF3@5ptH|m0b$%fiDF=+SKoHa zr})@Spk0lwOPreXxh`(;YW@zdQ9VFm#Lu z7+@HAjk=Ao9Iz$ja6Vh>4YB>s5G{!Nzsw5PSbtX3`x2l7p|vTMh+&iO&$3zDyI<;F zC8Jy0D)brs>UK&WD+&p#3AT6?Ds!Yn{j@pp-HbQ;_QN3P#^n-4tD`2q;SEMGgB}cr zFl^uYoa>Tjz1h-at68m1ov+z0P8^PAYZHxbxU}sHk+wq_JG%+pwqc+-IQh-i!7a@d z@PDVmMW|6_#k-oS>cg6?`f5#>LPd`$N0D??Ox1hy{A6%0uDoHcxW4+u#cu;6s&9@6 z$;WOrUT9eAkAsMsD_4I{Ck1csu5avm-~aQ5g0Sjl#$IRB8yuL_S@YCQ7a&XEZ&YwfJzqzuo*;OnU;{7*+zfnt!OY zGK)>J(c>n&Ma1;Y=G)DEZyxhzM8nC@fO++5U_H{u3xd9inq zC|t`0%=zCxv?etqqaLYrnrSau)dTdc*!*E-?5A{xW`CI}_ubC=>b^32GeH90CXrtRyP}X-FBo?g}SC;{rI0$JF(bwwIN6?IPK-OSvo*i+?? z?A5#)_r+z5gMN$F+S5E&11Q~&=`3tXtd6jKgv%KMo78GSD4(+*DrhYGai2juf8za zI5kC;!j#e((0N2e=J06tqfx+WN@qZ}H|}`Ak9h0Fr_{GS5~Y<00LM#W`Y+IjwNh&d zD{f6V6Px$1Ww93xF~JeFpmMnD=20X|gGN5cqkiNsPGQDC4%!I;>osRvJ!Za(oegIrc z+-?@S^@eXuW*$4Q#;)!b}9t>U1fFp!g4x!vj{jprC>ZWWlt}sLE!r)VejjONmpjC52&dpu{K>~ zY&8;T-3?l#M*{xl=TUzGF%w|!eoFv2UE@dIVqOWg0KxNJS97idi)@=2f+O3t8zO7( zc6T?n_K)^A-)`*fufE;EMQV%5N%YZ+(iAjBGLhzL`_Eb;+#%k<&@H5y;zHgQzj{#H zS0a~Ofvv*B;KDFTLTOvbu6HvH%tCi!5~@ofXz_nF%|AtMO}A+FnPwTq zCZ2|VS)V%%@-!)sZ)lL2vBl*UtSz&&wA_Z3Wo8x@+q!~er^1YJn|XPrAAV{=R9Cp7 zR2W&YstCX9NHV2QAnof)_u|U#-1J>rQMhrxU_7Qqqj3Im1ej<(hoL)4jJJIplB+k? zy9|KRB$E-qQuu#2bUGbxZv*+L*_7_(PohyemY$e{2>u2veg80v1!ndPn2j6_vt@X^ zIVrRT;zu#FVyT7>P&#ZtfJG{x2R0JP8Y@KiK&AE zzWMfIyeP$cb9|#9GTNw^%2=3r@W{?zrgD{iMN$w98XJGBM*~G2?B*+2ozUbtHnb55 zn&PdwMJ+^H*Qg-bG>(QQqp3GSz8WnuDNyn^sVe1^pb%Q2ft{p~fGFLopnY$HDAr$F zf?5Mf;f8KnC_>bs){YIb+e}?(KRW8j0oM}m=#rhd`HkFXfDqIazJx`<$b+%I^Z4iA zazh_H15SU~PnfHbc|qoE=-ts7r1 ze*M&be8!845?B6=UzDlH$|@~0LQ}yu>lYWaVa{&y5>Q4#*4a*5MGtQfQUGD~5Wz^0 zDspfE?}J@Llqirz%?uD7fe_N|2|G%yc@QGfnp}Tl-dy*aAzf_GIADa9BXEcY@nWHa_!}pT9Iqdk@u)1 z*Ped^l3z!zy&Grn`V%DGTMq|eNzy#C__HL<`!giCV`tR8-dQ-b(;Ct>$$jcISL!uJ zyc?%p%XjmqOTCs~;(hA1fAiF9d6c-T)N4HQ7n~fe6f}2~91UY$q}e28(`HQ5{8^_n zV`Bbwr!{MqnaCb7;ft@BnA>s0$P zgR)cS_O$x$b84`GtmC~h{$8$n{UcNujt?wO<%05+h{mAjO-PB4PcT9tb>|I3;Ddia zd4ni8Jowm!4id|-G`~c@Tl=q{3Bl*N2O)vsx>IEJOWFC91v0oxO#Grq}3-=j` zz>baXKIkeqADMNZTxi;!y0x=ZB(shTiz$B^C(*h9e`QruaT&-fd)X?>1`d>BsC_Yo zZ+Yo+;f%{;d#3D5%3Y{2TKB1rrpRhiiedMujw)AmpXz89h<2aqD7#soHPun+UfriU z@@AD1sG9hGovDs$o%OFZ)lq+)!|^qwIx1hs7nSO$bgK8Mj;2U;^rwrvzP|Bhqa^OS z^W8})TDiUB%3bir@^zaLRlWKh+{%~qc=hhzqSk*|D)yKZbbf27;C+{mK_AeCCv-U5 zSD~e=yQ7DkO(48d_=Zw+mp@(=k60WYc za-n<%h@G7;wE+rYJQ;=~g!?jGW47@r{IViDNOdHHhX?1NRbR6ZeBJVvZ$7!?;Cu;# zb5PgVX-mP5_X+P(9Dsk*g#R~aC#b!=-(g1!3Fw2wDg)A_HYWEpB>qo_VQygJ`aDd-Ue}S+I$L|F^D^R zWQlCr^yetNbg$caXt|X*sIFsr^Bt2oL$~DuAfC+12IW0`>EZR#qYx_`4Y>y0IqCKF z(s?SLA1a7qQ+mi^bu6B(IQp|E0Jwi$I5+cW5#-D|cLKltaCk9*1GX2De|-jixbK_s z30BC$uG8t7r2>C+)aorcH(-z1HuP@o6z%G|4!4vqm)4`u+Y50r$KiQ09FDyZ$cLPz z_s4%9hojT*7?idNK35uns{cF1q3K6q8V+^Mevo?jK)4Sd8R-*@7JPyvkwUC}>xn}s zs^Oaj>KXdRm5E1Bj13l;BsQ4q?C2ko0$KvBet6`a{PBO^BV1Kz^(w2XCf||W!b_n{ z9{5br2cD(%Z7jOXbt6EqpX~DEl#G(IY-#F za1jACF`Y#YauwPcTko?2{SyZ+U?zJyP@cvaK4$RO>Lx7E)3^o@oc4 zX=|YTPmjlh67Mn`ft2E*Gy)Tb(|?{^;09*T22N3b6Wrkw4t$+EFBexnR<|&7$n<}; z2;x}WCOal}X&bSytm0US!s@-EzOsAOp((ct_lhTAo`%f%$ki=E@67kSZ55jrZ~b2H z4D_8p{?C|XPC?Mmg2}}={o`L)2FQK}y9XFQRF%V+L{7Ek`ik#=L9IXj@5u?$?aOG? zXJ!CriCMtwNqkOV1X*NMo?u|%&Fxk;QwltF?H zXL$-Lsi4|U@xig5qNF4Gayk~};rRNG|2}1gCC&uN?t+y837Hge4#t-}Kk1Kx%gpNX z1c9q%?hpR>|0H3W#HVd9IriYxB0NV3S>%#}k7M9VZ6GaxNhh8qw4SJa4 z6cvdw0bV*=hj7%%eQUXc6=JVj2$W21!V!_<{#J4Nj4+#{e-8X{MBKW2Cxi%Ev_$ ze((1XNOD|6TzN*;-i)rCvrl0{a!cKMqT+LEN97j>MP^jt;tv1eJOO`2k&8*Y^!$7@ zzpSn~J+u)iC}g6Cz|H{90!Nv2Z{s>PGs4kO&|)-UpeI1l9Sv1N3Ph8E(dI=1<68+w zGlWOUA>Gl*Tw-Q{+Tf_E`Yr@G9OrFEyMb${GP!qPi$&M204XuX3Bvs(v4(8>!$1D@ z$NvFN3CbrZk04&n%Z`6KS&23EKFM4L*9I3KMIQ`9mOzAJUBuzC;FGbo)o2+o~CF*Gz{73JCv|QM_6GbYg`7SPN$P+5OUbg5YJSY`g4P5j;>Q& zCEmAlt%97x&^xC5W$J@6#@QeLcZ9Nuv}+>$8X$SvTn9ZQ&G&y{KtPR6GFyrncm|O> zB?7{Z57;I?GX!ZX4L9SlUKl!E0QMcce;D=OKXg8O0d27dB63J)y$u5C02VAEhfLud zH#a9R$^X#h63!!n2`qq$k~{e#RWwxis~5vRj~Y-=ZXgLVB`A}7*6y=kLPSNo1I+G56$`nW4?hhbJXd}PGr{5&@z3&SmZU~xxI&GSKJBP$4hKMs*4j}d<{CU_9=J_BV4We^bZha@gd zPJ|M$8ypFJ#B<%?z7sw7<*}&PX{|QY$jU87of`7jPL`f|pMG7U%d;U9V887&mF0BL zL8iQ`nQw+cl`-C&VWI}pjgFlY&0zbt4rcpp);M&UpKYNBV1c!yaE6A2mzkL{BeI@4 zX5|$5T&I7vcozG>5>HV!(S|ve;bY?>j>qYE>%d6?l~bTca14>Ra*5=qWRC&j3{!*u zg_B!uis(um4ds5z?%+UzM)JIp<&Va^K3f$DM-Bx-1Rpw4-B)(wM-NE{7$mQ#sjgw)(Y-u)xtVf4Xkj zxXgbtk=8YdDoXp~{@XWiHpOwh&LMN2h?t0tV!;3e*bSvN2ulk#d!q{+CybjGG%RT* z%Q_rIoP&}1#w6NC9a7!tlHKvrLsct2>Jq?630LFZ84wsT;Vi3Y1aGS=H_RQt%K|>o z!0RWy2`g*l948yTe;C*ro1rOa!>X+x@N0k7xtwSwN9%xAa^k&ov@cF^l{MN$=~gl} zuJA~?>R}&wor6T!o@P2Fi;ae-j*OVPZ6_V|teNweB@O7jqF{rUQT`maoR5aVX*lOf zy(zkm(!Dc`&?MJ$9aneh1;_+G*3UigxDgpHShIubW{Cd-b)tTb(&%{LI!VR7pGAGpX$uD^YG_;= zo+X#B@ln-u62N)@65eSzD3$=*-f)r%Td=qUzKlY$2FK$QP%Gv2dgFuft^0p4Si*GC zfk@3t`fPB-_>z9ipy7@#3^4OWqdym=^L+u5dC_DZ76z5)8uUi|6}k$fY+Tltj8E?9 zvUn#$(;-K!eTVvH5~if`Muh7f&c1+lG5xWIsvu)nu?8WV4D178G|L?z@(8M3`vXY3 zQ7>rFzu1KO4fGB-Yv)3a`mKLS6ToK9>{dq0DzgaVkA-tHF=outnZh6d83hXnqWA(d z(Vk4k?HSZ!Cy?`uQ#ob;iO0G5CEg5W;{zvK9Ru$@o{Ui|4@OZiAAY<*ZxjmUKv(+? zvDaQ{Zs&hRyur9p?#ru8>vViYvZ|5ds-fgtxlZAsQM}Yfixgy7ud{#QGW!w8C&ATn zoW$Wu*_y9imMfRFDEF<%rj@H$V&LMpXd;_~;~|ErzLnRWZ9~i0a{3kY0c7UBx{RBG7po+ECEA zj9pgN`W}=5s*h&z3U5%wQ@dkxyF z+GZC>G?EX&5k4wPk7PiH>`OkbG*6Z0WhL(1UB*Ko>(p?NAR!8-t!JZQM>w_6S%e}Y z{Hj@|61Toq4+(!=n<*{8jy>$;zDWWA)Ciqv=X z-m~GDzJvR*D!Qydu*nfjGF+uiH?a2q>S>qU!(>(rec$1Fx8tyE$x**_mCe_;Mz3Z| zS1C>|sdYLpJL?NRkDHmX1l=;w8+u{xlRFeEhO*G&`woA3c?M8DvPU$tnAyv13a!#p z@F#^=S`%R7nm8M#$3 zWxYGbEj53C;=nP^c^mtr!rK?l*z8YD+WI)9B|rD5E#Gsi)Nv^4=iI=v3X|QPf>95R zpa>lC7s&ew)-lo9{Z=Q+V zHB>>4j_Z2JEvOQ7>?FxY7^U{76tv!7;eYrf0Fi&9z^_q=G>cJt_qKSq97zVd#Xm`0 zUvXS7GG3$VYT>ytb(aO?fvD%)V52SKzVWl-7*fynJmdo0r_5OCf&9B-47xE%g1%5T zou`v-nEU-V71fM|sZ(nJ4mY|Very%IK*$Wh2btTiW!d#>eKlAx`A+RA#R4yIp7Uau=4 zcSSra&I%cYv%`JI;r%HFd|)i&1Kzn-IG5(Dmn3&A+9Z32wKxe%UUV7@AheCKS|uE? zbA<2i1|dsF>5-r5zD`@UX}Q*Ug4?zzKv941($eB8zs_^s>-+<{EDZ@T6lXF%1NqyW zK*!t1IAiF{+g$!C@4i7PI5f32Nbz2#sKok`?d1UN;#Bzl;bC3l3V$fEQiv7@y5eCcOnbpa zhz=6P{PN0d0kbu(20H3*qbEP#s#UE^70>Rcz1hs|r@dw~yLLYUD7fQseTIMbuFsvd z)vcrNH;(rHxwW>jt}|e}0}Hx3xQhn{ucJZuHta`};mmKaOqS5#KFDk~i;FJ0)_X@2czA^vZ3o&5|pF z60_U3=t?0x^AI~#kQw;Su5@80fj{A1tUlU_CVC^Jk{_x%0# z_M45>t+srtz6>(qb>7+~#k^Wo~TuE2T`?}~L^Z>6; ziir(V3P1S%;n{e6fgBYB=elcjyXED08e9@C?(9VXGV)6Un>#!2zJGtSxpuU(y8k0a ziWWV(JcQh^kpH2cAE9XQYW$L-PE)dSyojMr*=JhD_7*iS^z@wd zKH?7MoU;1iho~2JFwP;xl;24>Ev*+wTuCVEI1~q?7$&RtLW zXCA({zl#|kuAP5f8{nJi2xWqS2Ak7*R%UinpsTXGX~mlys|f+b0yA-g$o{dcP`$%{ zXoZrWNVPMqM20R~mAsvi8h7 zN3g@KdLC3bH`3$q5920ksn9T9IWjAPSU|lWEF3Zj9BBona3E?re5;vfQNcbr4{b40 z7nBqo!-DGfk5KL(q1-=0DKOmYd)YcEIO;wM!JdDA8R5|p{pUDPu140>E+^(-3uy4# zhyh3PF_}~ma(elRXOq2>Qo}piIt#bgollvyR zb6+}_#|U=cdtxYA+6kcW7q{Z^DY`8&u!|aq3;q$ucF0r%*#OR(1$e zxuR^JB3c=WJJJBfkKd6e!9>09nDBnv^?XNO+*?UAY$Qy(tx?ocGK=uD8*@;lCs#Z_v`ey#l1R}VV)XkIQ0U*vD=55|#q)jm%Dv0`ogbHu*dM8i_ zn@!uC*%TvZGv5?iIhv(tI5mfHFc?m>%#&z~cn*8v*!c5k5lHR{^h$9cLKr2*Pdd%K z^$Y9b2cxH7#ptjj0ooW;hwQD^=2(C9Y(n{2eBxO2<~MA0JQGYF1L-oEtkif&=KEc!14S~@;uQ=oIHgwslS zaO?-ls|_^pw?TZhpKOB+Z#b@D=!!U`&)b(VtoAerXYt9q4Tw@pO+ncWTZx*^N`pr`1LJ6S6ng{dIkLf!aEhbi+! z%$qDRa);TCu_|ktRiVEH#8vaMpx+?GUAL;X-GMm(nY?qbvz~F!o-Gmpy||9Z?y?TFS&6tSrq(mN1 z_KF(LxlYa0(hpD4+zY>gga68NQ;uctz*$fRUQ-mPg0CqklzBXh|OM90=&oZpe z?;rX!NBByUZh^Xr`Gs-!uw;AJbBCO=NSqq(PtG&NS=yKh>pWVl%{=|O0G6ZdsKer$ z=Vo@C_VH)nv`>~BC<3(^Z2?z(c36S*b$CsyD#Okwxg@jW2IYTKd;jpC$pqFK$H`bQ zOv5Y$bZs~pjH3(mQj<>-g)J!bQlz_789gcaS^%w?AJ9cIz}(KKvfUMs%5mZ$&l{3) zpi_RtQIU0PYNZs@sW6psqgzyUze${s%x<-Bx+?{+xEsPO-ENWW z|Dv(vV#XTDfX&vv^H*0D;~Y&P6x~2DqNa>r4XTe5-*LXj=s8U`kD47ZH>xcU*)mb( zStys9o_~J^sp-Y?OyuAxwz}pP-*{`~mfB~cs!=^T_b)fxF?o%Nv7r`9Zxt4nYtyys zTHY`#mVajE?i*eE*wv5yWxP*0KMm}l$o)KXk(b**UHl z11?zun!o<^4lC{p-{vkUpVbsXc7PijL;hXvr@!2b;@pL%c#U9F14|_E4-TcU;7eq1 z={bTx)W1nqN8KE(aOgX{;=ai>w}!#gci&&o{kO4A%`U!c8AMvG>fOyaE?tbGVKBP7 ztNnkrhAY|NJK6POzrfzjT>$T5x0Rp4>ehONqk(L4?;mmRAMxe;N8E}h;*+Tz5%2Hd zzWO^jQ*~+}K`zbywl1shHI_4%3gpbC5;@a(1DK)Qc9onCdRua6)otKyizKug1QV7r z9J^!4ATFTHN<>-8izr{zO=Vu3G4BXxD7=4G-*(`A#V?wwqT2^)IJm6*Kisc|JH4f2&& zVj@aW{paK+wi?gEyXJShMeasVH_8;b+o@&e+livD;iB$8?dzw)+d58V)1 zQCnnFl&F=vDYI#d>+Xd!NInn`uh1D*BxuxuTH2nD&@FvX?(Pq+j?)lM){BjngAoBpR#4u%;4zi`Y{RJpr z>LoI&v<&=+@t%Y{@x9}h`_aRVI=!4!_*gFUOp_F54a3)sAg5i*)37=mT z0O-|xVm9gK5mytBbd9I7kZ$5k@%E`xZCHL#&u z);2TvSf-@H$4zxthOczAdqaODjtTHQ6gz;@*FG?)C_O3`FJY)3lS`Bdywm7I2=x0s zQgBc?)bw)~3|NH@wp~yDv5#4ZNI_FYsH&9B;{8L~7dWGE48+!`gXx4k=ZDACbg*{# zuX>1u`jLu?O_}WA_yepa7#|%(6iK6K`gCkzqEd3`2sDMR&k%^g0DynqhZfPeV)Km~ zPLNKDLV`K2Lsi@-jMN^vvD`;chEj!_lT!iLehxCqrC8SbNGT(hB}ai zBoi3VVxd(;v+CIt?!}4Q5+{m7C)Fn4t5(>ra$%z45PnVK1Tue`dvW4kocPm<6Kq%n zwmXR(G6mTo@1=?_N~-uQ4(B6fv%eQC?gfi`!D1$Y1qFbsCtQrw>nD?|$mc;f=PIIq zL0o35q~eB+%GeAdaQB|oe31(5YTVz=GaM-3qzG8jpE2jTySG6l4i4fV$Q9m+Uub?7 zXw4*8x2Encn*6?il${%%!F%E)X)nbds2NZ?o^WmgUR)zXEl%h4f47C&55= z3hekK8lWz5eAV#aV*1+cIIO&B{Vb={&4CEtao#9d_$q$^i;>I*^y$>_ZW3P(77o#= zX?kA8J4$p`MPR$(ex|Msjfl_PXiMo@=oa@BWqy2SHgt=^({DN5FV~GV$KgXSzZEu|9eyD6_wXt$aqG$pw`&~s5BE-<>f^8% zAa^FtkF0-MJU;TyLy+!4U=Ut9$Y0NdxGI|Vl6VX&NwsOoXqy(h@)7ih?zdHNe1vx% z$wB}vd^lDw{aDFCHe$8NbAaazFdAXu*HFXSgo)bOaCZ`8l=o)mJmY!xpY~JuYv26f zc15$jz^eVxtkY{arQK%EKuppEq#-yZ1tF8>iAsOhqhOGn=5jO{Wmcj;vqN#)2-*uET>+h4!`G0+;9EtCvRm3zu zW`|ZU)|9Po;M`ll?ijzgdIxjn733<~RHgS(x1yG8IX z8nac@Kc}$Pb@Qp^<#nMDXWhGK;F~!o(YAl3-u&^0f&{s^V?dNeBM~O!P%v@iBJrt% zhx4h(G(nn1`=2ezK5M*o_oX!D0D!jJhvNZ7Ls>-T54O z;F_}($ii*N93~A&w>j~G$*Q5NCyX2M8K!IOe}l=wsqOpphDl{GA4J1wjCO~U)QshS zN6WwoZHW1cPHRrD-eOnr_3R`be{qYJ6T8jDZ^vO~-Jfy6Fd2gqWLG-v62E`HBK6?2 ztcb?u4(%D#pL*((W7cPye5z)jHk*EL5C$XvZYE1(kz!hxg@CdPdZ!<>z2ls)5s-L& zTsZb-3ANB3_A2q)%VlM z@hWUB2Vf}4(=MRJ)sGLT!C`-SF6@k*l0jqGx}>S?IQy}9(uM#bmT7(=AV|vr7mHs` z>!)F0)K-m`+QMNxC;pCfpHIA}mIidq<)Hh20L5H9`BhzL1l48`UAVjPW_5oPv@@mm zyj|V;=h6Q55&nysg6aA2{$bm$w7s=q)=A<}Re>V28^d2BTSauD-6MZMJs~TT)2gcH zes5B}H>uv6R2>&iS8?yB7^W@ECK;VqZZ zLVR;7~miR<>%hqLcz*ahrd@jC<#&Bhaw=n^m3p#o+-15h+ll_FU3=6nfv5Sr37g5-kF(l;K@BEY|@sD)ifw+YiYstlx zTAZU7#N{xhP!v(9EbK?*n7ymZFo>NRF58bAf5>-Fl)*wIy<-&gv$)&N%)~tgZlT63 z`i7s17Kj2U6Z(Gx@s=p1+wA;&Tb(o+hQ9n(AQuaSkhP#wV_`^D4}}=IkQ0-g_I49Q z#?orofAyu=o^E%$ikEwWIaSNtj<4r1)jkH5m}cCBWl_v}#8Ies-SR=oTsWAW_Y)w( zsbAi{+uZ~5PNK0oEi`(XhpMa~&?a>S>a2vCytf;&w&s64nAw3iiI}6i1M20l!^Zhi zZB|3aOnsFdDGwfC{upHqz05s^XvY(tZ^!608OB_kCLl16K((HX(SNoVdiKVrXUPNx z$9883am)1`6!@{M0lg;Y!If*~HP6MS(4G8NXB1pAqQ8H*v%C7k+g0?(52Mo<&mC^y z_SQ=NHj96*PAx_aw9%BN4z)U1R0DqZ&Vu-q=x7PK%nN~??5EBVbkrY&o5SEVOnq)= zwJ_@1Mz6Z_t2kB`<&-^^kj;X#H)8_Y?QY`bTrh}!2L&D&9{RXOh>niK3nyH&Hg|3a zrkv>oAY@ovgH5)h5cg@GPcPlG6%wWgmqU!7P@GQK|cA{FBBo(aVW&PzD% zoiTr}w$FpS4sczjD=d@!!g<9dZ_{@;vd%~9{1Vy5b+-?;60n7E9i>}JT5~>A7SUS>(x3(@(nF<)cO-gxFv4 z92B2z;ra5I(54PX&xC0=E3O?JmS9*%JdS@*fI+AO2W^!=haY&76%+pH*jQZ}xHxwJ zGIs|K)UcPs!i$ah2hm{z4-y9R#>epp$b@=tQS=5CQ6S{H>e6wPmuw36I43*jR+J@D z802pd;+e9bx>78fGCzNt*Yo{6!9(^)6we^ln67J_T$q77%TyiR(4^EiVZGS}nN)wh zmkftd1z86Mg(g}bO|&zZ3R<0#LD&iDX-4SU)}q;tlEL6O=$%*1m!zJ-)h)vgB;qhg zL)Q#S#4Yp1lRPH)rb*(zqC^y;Waz(Y5kjGbn-mDySatFpg$3opU3Ju~Ya;V?Q|`RU zhIuC_XNksG_w^f+$)Qq_m7J1OoezIx@4$X|VGj>YN~-!1LDzMkS?97$BX*h*c1w`0 zvm}}fSS(E|m}jbhba*j{#^QQ`gPMqLX?sNTF0zq4i8B_a3LhRS4j|qTxt&0{P&oed zo#>cdAJc5nFzQ!m2d-BfbSiC#n4Pw2ItAvf#s_Kx4^2Cv5M$ybCOM|GUE6>AWDNo= zJi%E1WA>5MvDOp=H{{jJ>#W zU~qP?Dly9x+q6%GYNx|;{H-WNh-!5p|1vy-vscG?rvaXsZd)v^;`%96yph<&92A2U z?PK{$ar@*lF3BE11_SKD2z-A;CW6d2a^)-)x5PL|<6Lc<2~9-@Ge1}@N?6=n{MAV( z$LV&#tuCqTm{veH9P7=Bj8rFcep<4G~#9esb(fuBgWL z$Z^#MxjUKhJ{hArPYwA#uhi>6{avwJ*=keoSK+1B0YfmZMawJNXK8qbap$zQp(3?@Op@ODfY(>N7h(sGG ze6dRM0^Q8`r2G==3RA*A&NU{wg;n%oI@z%)$t_GVBXmW4>~`0;$^Ok@)KCiz#J-d7 zq!GCc{iZwK2Ci_EiztSp8Gb2FL|gKy<|?39JHvNU;stSQg_eI+l^_sz-g~^#qEKlbXb& ze40P)&1jN8?M;6-#oVT3RoW5}!(~%&Tzt*MP%3S&riqVbf$h;QC)e?{y4B8V-sHLa znWrlrr?E$dIoGV6s9>_{&bfiD#?c1-RHZZtG-KJr6rRSlHGXhyt)r_0qaVSWJDpB` zIrX~I7w4+0EHY*<#EV^TvaiEOrI$h7ZY1x#F9noT&v)zGQF2t1{tu?OJX&4NBGs4zbZ@`S(hW;Q=@$=7b+`% zzxA8TlMuI)ZY@0#i`1OrqwM=?E~NFl98w%Nw#nEyK>2IWR`C`A5)aJFSw&MEm#3Cf zpxZdM$JD%vyC zgHhqmQ1?u@U@OA$mTq*RdDQF(y$=|$B{ap^kd}X}Xc_&gIi7J~7wQbfz=5I6kM+dH zB6`xClC<0*39XK*pGBJfHq2qN=Umls7BiXBmu^GW$ZnmAG`iv(IvqPRDh^f{BLQ2M#1YwtuK zFKq?e-lKzsL)WZDaB+uGSe5S4A#m2=Lz{nNohS{wmTJ8{jkZp=IRpQX%p8ks+uiQo zI2;VdUOz(1SOiMmNisMMy)=TYawO+wfGQqLKT9mXVj9|z!lL*Wq+v* z%4C>gDcyNdW58cDpEh(8t2f2^;ivXC-|oEGpb%6wR+AyU&8N>ut!&3dtqsiKy6=A< zzH-N8avGA&!y(&qGI_IOkx0HxDGxZoe3A5Jbtp3oy>wFMQt=DZ6QfATjWC7%?#9lW z)wK<8b8CN_(==$3N2wWj-U97&Q}%vdee-T(&&w{(s#*Z#A{Q<8h=!@Q#dg)$rL^qw zs+f{Ftza(Q(76Ex9PNt&^wdDUE_;7`P}_WUYXZso#+!}(jlCKYNzV0ZW+I6x9Mtyj zn2AIY^>33gXCbCI^Jaf0yg9N>$?l6z7Y%(i6@|>9N-Yw}t-RN}+i#u6^_L$vb~iBl zz~+`Xx{>SL7T&~E9?Y9ky#gG$b&_|RfNKo2GAdT$BR*rYWxd||ep#a1@B{^V zwkn3bZq;$@DOPFHCiq`DU?T~dMw@}~TymN!-&s~N?dvMDU(M&_7mjD-*99pNRGcC4 z7t|^=l~TBBD5T}P(yY4Gpp(* zpX41tx)+WxSEWlbl|ktHNskuoJz!r#TAHT90+f>r-^>VfE0V5B8v6iLdiw!nc9aal z)m|@5Qv@c$&`t5m+OM5OgZ?Otr|SW8hwmo5nXcAa)X^X>d0$vI%u!If((5ME4sHmv z>4D{HnTrdaT*g&MHHm-ujP;$os?Oo5tW(6fTn+Ep*gYG&XJfADlz=N21&3@g%f-x) zj+sb@j-ZYr_~8)+KU86F8$?KSmsznAt7iX|GE^o#m{6D)fi>VtX#-?-4XPvT8umWb zlq45#IJK(PG-Tga-_`3VGbXzCX2!^XdNGRv`{K1N(sXqIJIsH$9n0k;FNPdZn005_ zJ8)~TB?buDd(?OKtTrdzsmOn&%rPPllAB&M%ZQ~%|G~(OmBEpcc7i&?j_i%G_30HY zHSUdwyc9k5DM}Pn1B@K*roTEag=TXYt*`EHv}Zos2}MNuT4sw+i7}ST!#l*j8%$TZ z)X#Lf-*0cf*;s$wn*DU~-x<$!Z+~}l>xa^F{VtAvlfuj`>_FNZMHl1QBMq;twz=@I zo-b!!qhoTytifO&)oPtne7FUUh6?JG{7mS!_uTBBo85D>dv5l1bF+IcCAgGg2=#bW zPG`LZ9)+gRDS4EzqTchUdmeSqqwaasjBx>o%b!r|3Wt9|H29OP=^{weOPKFhB2r+a zR*XdY)f|Q6LDD<_dZwEOgYoA^g_%feN;Il(QMemRx%M`=fpuZ^RxRc@!scg};ckI; zAka3yRN>U6w>YXsaX*4}++=?@*Z* zbnG6QfkJMHY;| zhgUZO|Leb(K>sh(fxlhm9(odvLVS9^FP}V=8Y%Pb)-t0;6(c4wJGYP$6QsSMUp&$c zFa+ROj37^^#gOKZEV;h?{IHyv>0@;oBfaxN{g!{2svPSEY}N4MyA{UT!~Xw-ob@6A zppEZ2D>1Ew#|ul3pY$F-S$h8TS?}5NUU(7!ZF=_Nc_WgfaOHMb>*J@-pDdm%^`E^6 zo;~d?J%9Fe;mPyo3r|m8G@7N}`7edFn&j(4{|Pzhm!Wch5&TnP&{2)8&JrHk7ivuOan%FAm2C6b-G8=S2G!9xc-gbMmi<1b=drC$;5~Q=KLC!n9k3XD4t;+* zNRBD~ra2COoNI|E)4gOAW@_LkRsLr4``y*ue`cx-qT>-rN~+f7dAjj&oT&sK=fjU< zRRC2$s=vuze5NwL(wy&K%(Xfv&>*)Ndih3rAMEyl+GQAZ zPQ?7xBVe&vn77FW34Bqo8z-BLLYX?_WIkfhsj3v`ev?y@WolE=JVzo930;Fh8p?*7 z8%I04+xy#@MjUf+{ye-w#FUk2xYBLnX)zd5W52L}wH#54A&;dIlrE@WA}O#6z=Yp_ zU?TK4237VkSUzmVc8j(Rf5BeKIkpg}{&pLiv_y(`eE3aqknkJz)9rfeNj!%Mv?fFE zcyj9fPwy=1_rn<5QFvyN$DCH8LuExgs2&5g9;|W@J$hsW)c=3Y9TAVu#hd``oO8N1 zNC#K2k)^*=e0(Gt#7=|>;`t1|0C7Qo5yssiLZE1?i>c!)C%wb0Ee09OmLU-JF9AKd z3V*w0B0x&-?`ht?(MDB~u|lb?*s%f>+gUMo*xcLx4xCk-ljw$a)tutNj)>1CX}sPe zz$rLdls}#DbaP{I5mD>(NOJIlgNN zYD)P5C=`hRai@nt!LTyI@qht;>G3)b=KxCfs;TBOFG^ER_-L?@IUNpVj-(%N@h_dl z&QfPlf;>o5&{llTiQ5*kQQPZuIxPnE`o`Yc?&i+^_U>NU>25?e1U~K+;-jv1vAN-{ zbrFRIA1pcrnM2?{E!m^;4Fg37Gvwd2_W;85ESZ30e3^{S`EaJh+EY${fX;N;&$G{`=@Fn!(WS+!s*=&y@%;9o;O*j7zALoMO9@INMi+(*H4CCbDw^2$s<$0?I zdziuGIsN#1C%qU%V}EXc&WHf2=6jAp>h}ldSpR%QY6;?4h*kTauG`*f3p+*W6@g&J zlr(F7-)eEtKNt-w|D8l#I4L?Tj|;tV5_zC#c)+3Q&%?q~34nbPPQ(f0zBF`#HzA^m z3h$C*EFw?rqWXd{r3K2oq;o*DSJX~7P~doph%Y`1E=1$}jk{BSBunm@JpO7H2UHIw zjul-~^GG@VE5$JPTAf}J15NaGF?=KvqpBEv6*5yU{#CJ4TRzJ()n5%=ki{k9tG~kB zl|qRU)dQ0f0a7rem}u^?yK)^*fsIjrY6XpoQf|PDsW@|KI5?T_B}2UNH%mb4Qs*v6jdcKx3%!qvRa_WliMX8%Srdcu?#UGOMtb)iNZG~eG*(V9= z%t=MrNzenX!TI_=T`R6mk%dMRnt-MmuiJ=gZ9HI7{v&jMKny}DUv;KsYf=KR$C$=$ z3*ip_`78DXe>{5B^5TQ&kSN>19LBAN|IQuG35==Ozc{=k@QLB%3=W`k>{5ctL0V&VsXd=`wo?zbLs zcI?Xgwrendj}xL`YT9^vp$Qxy>3DTSad-8m^0_m@qb=$N#|iKhYY$;$92CaZ;|l7@ z9m_E!4JsT+h08L+x0(Ugct2HW^Y>jGWlz?>XQFySncQzhhEO)!VrXU-CoOA~9c{BzX47*rop6Ya;mMYYl z>FYh6#FVBG_8n=5ZCp!1Zb8}CfQ#CdUH~*?VOd+{ke|kWtH>a^j4P*2((n_#EarN_ z0WsWjz0P=LMtErIb*ZRVQGKy-_qw4u&g05)#2-u352$-EM}AU&Wbw!28B9TUm7ztk zie)E%+h?p)-@x%r!_9bHU{&nMaw%W~hZ<%LN~8nLV+l0Cf20*Lb=SPqO2QclSl$2U zVE)nJtA&G)|2XWrsic~y54{52U3fu)<4f-alFVG`$Hix&d}+y)Dpft0O4}O+{ph1{ z@KUKh(=vTl?yzdB?LD?7Ub7>p)b@Pp%=_Da-zerfnk!*#opG4TDk$A9K7&nNTwp~H z1sMap){eX$BtiL}P>rU$;s7j)CdQb4!G0lB=NAM_=Qm?YopzN2E%$*CYXnuxHu#O* z6M}9fXFub-F(^r;LIqdWUDUznQR|*x@Rkj8n}W9loq%{RImubfPY6Rxh<60%X_%gW z8e)wws6=BjFN1)49FFEVE7u8W{P=l`Kes%Jm+9?8n~l*Z8Tr_kxynb;*y21(3#9!& z_P7U-VF7Ex({SYTNUer~;K?ANsF!bp@mYs{l&)6~mo-dXMZofptx}k3|NtHl{c<5=rNOjj5tsh$qq@&(U*9yr4f(rXmSMhB6k)@$=4;&NBs% zHCR??OanFJL5P!U6_{$7)Z>a}s{^5A%}J#nsVP=@U`oF&eRlw5(&8$DI!hUhscL8% zeR-q)0<%WyNr|ENF2WuFV2!Z`l(o|+4hAA;w2-OAnG`iOPB?GiM78;Uo~~EpK240P zhO|f+MTyQ2uUfTQ!VZ%W=o%OeW^8*MCvT)-DbpQKv>GBTrS`-{3#mtM(0(ushe;dw z%5HReCP{%-d3Aj)OKe+aKc(C-nH`)MX18s}C6iog^+dEcP)af9_mBxr-nyO)9Loi^rI{3;qLc_{NO&-CJ>eDe` z_qpxLk*mdOvYaFr|J6gONv!IxFEdt4FDJOn?S}nHFZ4k435ORT64H@i$`>adW!Mb{ zOjG78-;!%}>${Sj#NS?;vk<1!6=MOd5=aR+X}s_mfegU4xvRE+x1GPA#mcsfg8cKb zBp#aafVO{eg*mSx!%U5du#g1zNrjJ;j{ZJ&2otqW;5b=5PLsi89Bv8(%+wD=@jR{T z#%J>2&{&)$Z{^mEwkh1LZ@Xgk;)4XjcVZJQt5xQFM)p;2`4Jo^RBi!8!5=E?nv}9R zUsvprRh8$Oy$Jw+%tP%_o934e0V{2T3~LY*(x6F@90F*3>d$0fOevssb~aFx=h6Zi zf-|OH@b@?|$xct*Lr~T=T-jd{6m$y-f6|vnJQGb#sM-9YICWg-rI_x#C%;1nxv$s8 z{RNfG&s*8V)GXLrWBXv7p#60F06$8?6b{l*rr72s;V-kAb`3)kg+l&QAW?WAc{qbk zoeYB06yi_^ZBV=8ewOlDpsZPNsp#7Q~yvV4l|)q$ypi z_{k{eF$Uk}jfGUow?&dI5#k^{&oUPH1h@ezm8dg+jCz0``HJd092VIhh`b^h%35#{ z97ls_e8tH!GL7*LM`U1|@2RTV@gN*wYW1wr&0ke5@-jXRbCys1J|AF#?vTgY9| zWu7J?Qk1AhJGC-l~dAF3< zuJ2eUG3V{=i~Kr-T;mbQ+qhP-xVDD~^V6P8azrplCSx>`l1q#M544n9W(r@R8=$Cv zFs<&$b0`Mf_&~=Oa8DCTxduKD1Q|*Q#OpBc8x1(hMzAh86VE!&JfDVMTp-V&HBfnm zq4(@ri@k#a@+zhM8#_a^BWq!=6w8D47ii8qDma<>bu(oPRMizdTPGCJ*Ebmh-( zl%|s~?e@bl0OnQHfBE9^!qaC@jczV~L(pl^u@$|OdIUtw6$u^0$t1-q$u#kPonVTe zv#@ur&ba}S4=*~A@LQdOWeRitf>A?}MO~4X-+hMFQKl90q@CZ%I@rL<{gyOAo>6M^ zRFaT=0U)>QAMq8aVVc6T24;Z`KGq{M676uyMg)+zseIWZpJ*ZL5sgU3(TPoenFOYg zjls;gh4PZbqNBKFW~A4jQNsY)Mk@nnK@>A(<{B*1DvpuzPT}5sy%VMJ2U1*r-oe;UFpMMD? z`V~W}d~|RihrtzFaf z9rR9xLEI|b2%TR~^=tENsmmj%tTzupEBGrvb08FfLl+T|R@P1CJgArn-%##V6FD=h zwnZEz{WT1ZOc-!k`t;y`kt;ZC>S+y8LS4&6!=*R|gqC-ZMcK@?R86WoF-F3$#08|l zBvInLwaJYs8JG)Ky&3zg&Z$sOT+BfO4uz5ovPz*p9HQ&48bZlPbLv{iLBEW{p;>{@ zIFeX(rX;+~*pjw1-g=WaiJ5F?h+D z65^P#fCuE-3PbsS#>`+bnkuv;sUdd_>lkPF>nsklKuC+&WX_CzUb1^SmpdlqM?|&H zpX@q^Lld3Mvs-I-zEOgdUbboMw3SD?Y0n9-eYfyx@oe3PD!(*#bA{EuOHjD2K0a8| ziz%aeOKKvT&<8CWjWw=VPj*;J*OIw>rfdL33ZadlVksDZw+tdfGBrk`qabFQy-a)m zP-@D|Z;zE!(FY=f7g##)savEG>35A=!!o@?9-K?IqM+fxJGwM5^{6itD3Bva2Ng?m zir%K+B$!Tb{L%kL2~T1ebU9W<{HW9@u~~&vHuB_|;IUNW3L1Z%k*Nz%*eXgbsXmL9 z>bbNJ^z8WOz9U4OHVsbI*&Vx(quvw zo(XzNUWg{Rl_-&RKIzgbZ~ZcOB%Ap* z?(pC_#F3x%9!vO-Op(Fb18##Ateva(mb>5?RO=wDz znow%Cvsu2`j;uXMAYzM=J9|m_IfY|%*yC|%R_!a+Ix>5c>&SEl5~ME6_o8e>LR@~Oq&QKsoD+uCY2%0Z%Kl}&OA`mH zB~Ms&-LxfH0K?Iu|AvRMZOM>SrkzEYMF+xv5c%?RNHRy?=ghDnPP8!mEgAO|WGp<& z37ektekFT<z_%H0{TzFDHB$FTzESBHB}C?<&zM(<{1h9AeAG+x zE8Htvm6A9tK?jbKr?1S|MYP2lEB-Lfj4CxzxmR@=Xvr$1d}x(SH@2-JbN=5 zn5W`exIa{Z!>7HJYRoVuj%o-n6%>5(m}X&AZX{IuP!sMTO|O~R9X2L zgB(aOgAWG0tYQe%hl|B=R~@U=b{`U1;0U-F>5cYx({Aid`HGfUWkg)`EdB78zz`u7h)D7OtJf zEepAruGRILIu&wW%r@Od1=AdBO~|qx$p2)goVy+2IUn%K51qF_^Ya?a99@Ve%PlQ+ zH-9%_7&mKmbKSBW@TK)o5;9?bKCDU4+V-J(qNz~O3++>dUraJ&Rhad;n%RMw3ek(u zEq}^OwsWTYROogm_ihom>y{g^jr`Z%$5|EG>PuVgG60}yX5>kfv(}7l`9{l+lJQ!e zs*;>qFG~0z5I$sHn&f=kzYqG#hb8L@C$4b>xmGh#B?95(yjBd6J0l2xYtxDNX4Mk? zn3W`cTvx?5Qt&limlT{7^DRl;kYlx79ScP7n$CUYFUL^O$OIW%YvrQ>e59+TkG8)Q zZ2wwI#qwCm*pDl{#X2W)D4TcZ+FLAKi(4!C>yUNE(;*1;)6AKyC}^ctAjzQ zVWgH*?X104zd@qAPP52=VjRndSfYJg@gbh08h$q)Uy4^@j)#{@+gX_=uolLH_r}WC3J4)w3{GLmr-^uG#Mflo? z(bSrMb49@mr5H>>E-;!w_R*7=tPX3)FDIZ&eaxsTlGC}@b1iLujR?k_qsV-0;3Rn{E)H4D9(2V?I$VCSA^4Ac{mgo(_V5DQFaK$C4 zxP(!Pi!0Jk18YRFDg3G6MjYEk9d}_&#LWe@6vNLe)Q{SKUemK6Zc*s#$fb4Y!*bCQ z^)6ID7oFJQTOgdk_$3cc@PKPahpr1Z6R%u2W7ji~L`k~s{60O->=RFhXi{docm0KbytwCK^{(tt~ZM%&eNfiB+w0l;Yv?<<1>RPTE zUAx@v+gNgcd(TMPT6rUxC6cLPl9pA~n$I{-d#(L4->{$ht$yr81b|FjlSx^2SNC$y znlhCD0s$ZphzJBCR9_ydsVx~3kSOdjU(;Q^_<9z9ESAc)ID*w$)@LbEAoM!*(PUQ& zpXNp#_H-WqOGJZ}jXL@2b4=?JJy?O}M4~kq+j=N}Xl89qxhfU`DIOIp-$qPG9~&Bd zhkBb`c+s~CJ*5;eX zj`HTQqr7>{L$+vCFMZ>lh6;ZIh@7T9kz!?_k^g`*rH`EDHLuvrslJvl^FR>sY>tlz zL3QSTC(kF0)HxlhN05OG2>yHv)HU{bZFL;5u%S(Dy)jy}od<1dG=?=*1_WQEbr+B< z@%0})$~lVt%uqPYoyAHZ$%hyTSv?h*oG6`+W_)@BB^w@WS32|D_DmSv*NU#<>gSof=(~A1?AKqp~E+*``(~jugo@3|;$CgltAx4vUtfsy7;c z^gCGzl1N{W@lO7$!K2Zf%xCFzxTD%OWYwcCxgH>j6kfOCHJLRRe((q{4Nng6Q(QhX zPS$IPUt9UFPN(?UZ3s@*&wp*@zdG&WXNO;T6>52bu^y`i$>RzpN{J|e$AKbZ6?NG$ zhG?_r)M_JiRX}LFF5c0dRa5Zf-wm`^@P=v1alv+wn~eaLXwt19Srl4hDwHMl=StiZFA!Vla28 z1AM2TWu|!ZC>_W&OL-M9xK-AdGDgtU!@gt@%N2<2T(D4GJMuPc|F~LxH2ge&MEO}R zukf0AOvpR2Wzi_ZcO_Y7cvlVYQLfc;2UlfhpXKi(FZjmnHpRY#|6_Fv+f}U)`tHhu z8?0pA!|3&~e`U8|@xoQJR8)T*|G>sWc7{_Zmsjz8lt$KwP7^9BjClW6p3dbShCAx# zm~jdNr&`~rCIY{hbvN=kjkp$nO_w)H!U|wv{sJTHaHAW`gu>pqu##gcIGMBjL8?rq zULFV@fiW%%et|;KdlOczE_-diU(%Uy_(x9di+gC%80a!m0Vr)VgeIFZIlB1_vKmdl zVS9L5yf&SmwJ+#KKmLuMw7%ly!;SuB&RhV($0 zN3%9LyUhepKNCn_=)gH7f)7$Fo~YDWL!{iLi&@#m%)ehaO?m5N>NTg|Zj|ZewLjl5 z^Lv~2e8?+J_?I%(Xv59#;}JnMnp-JmjuA%v89VViVOf+K19$`<}33K4Q$+5<^!59c=@9z zigQDrY^IoBjG)VZuYj2uL!>kGrs;GIbNF%IPC1%bcAIK>(N;@WRatX+7Z1i}y*xNO zFSae5XbGE<|7@l=ly6uGvBgy)gD zG26B60=@w-&joIX7KXA;Gk+|6$gllqjp8f9%0(*>InzpiuVW+VJ%`K6wA7=K;eA10 zs|K2#_@7?##3J~N<%9?FAIAfE;wi5d3t7+MGj1eBl%>*qkSBT?DGr<@X3>oi9P){W zb^+c|QBMv5Ie#S(mbYj=3dz?=uKL|`6+xslfzWgBNn!0cQ4nUSu@p#a3LtIx$M_J4 zu{>NU_Rx-hchq2kF~c}vpAdFSU?Jjr7U;_Wi%Tiqu&(!~)MhV;+l{=o%6tYGVODAX z4AvK>9sZR+t8Q>#Dv#a@DIoLQVy<+0%W~`@068kSkX397k(tyrncH)b5u19mLT)i5 zPLY-mc3H-;#GY|1StaAx8w&qg>w8C_M(KnQl46i}iFH>$(1dTl7geS)s zm69`?N}!0KoECJQ{qvI!1DO1QusGBTKuC& z6b^1#>doAtpfEgAI(lw-Jbw(|>`AjZMh)-$F^nl=54Fx8OPQ7tHj_<-bL;8MpJrp9 z#k%`{m?jZX6}fbJEWhz(N7^mtkAKS6SRAqz%+S2W>ae%;t*1``@2B1gY=6)_KZg)Q(U zh-nLdND1fxe>wO3#GhTgp9&apbgDqhqqi27)e6k}y{Iuxhp!R}d}sm^%7%hGdvkm{ z^(RTl+$Gz)da*phB1@)J!;hjv214$&R!p=Cqh7H+o9$+4(@TAhX?IdPy~Jo*HunX8 zn6g?{kZv%JrpRx2E&KXOYMK!;i!Rr!t)%w>wTV#-5*MGBy7&BhGxQikYn;#O^XHBU zuiM(1v4YMYa~!+?Gj>UfO6Dd!R?Z)TKwx5O20qgwnz;kF>8RZJv#ErMjzm7%?+KOs z&u4(zcccj+n%_I{WYvmDAtm_U+5Pu_ikNBa^jS_6=a0pC0{z~TI7)jdLG*sTp-ZgG zdr@OH2b|I}e$VmBzpj}K0IzIM%|H638QYj$`ccTT2Wlz>itHDADgu@-wL z*E2sH#rio`IHlyDFbSRhP0)AoosBZ{etmkUoq{?4W2PXMKyhqi0i;WCVW9aVo&L=v zdkxE8GXy|oW=UAF&_%(6JRR;dof2SCrO51P;0O4GD+Cn>dH`-04`7ZuHW4YSV{729Z@&6S*qv50N2D?zVWcQsv{x@rX|NrJ^GV$PRS${6mPLXxg(qFDS=GEP&(eZD8AI?c}Dh{T_bO`6sD4G7U(2o>? zsT~~->7J^Z4>gc6Bfa5SXI7Eir>rdQqJ+7am33vtLYz5HSM2yDAou9%%s5Fd=skch zSGZV8nEW4*Fa)>BtbW3OT<1qKjfD%=cXepT8V|DqwX-`F77H-4g1CTln-s1_5?KRU z`E9v=?ur&JX+o4Y%MmHvACg3(4z4mmf8nu};!$02S7?RW=Fcf;Bf7OihnVNm`}wwU z9!TZwY@5|_0PzuF28iKw2|5jBOY0lZGL0%NV4^jyyes39I+ZAY0F{KIM6`2r-$EcS zTKx?VbzMB?*eGOW*})d9tQ2k)M=bD!qN*HCq?R(fexVF&@SP`?jqMbbnzQ(NjBzSj zzt+yrqi6NI)=>5@nxL7q!7p50`-hTtvnm%_Xo4Tq!X1wQ$}}L2=gwgmE&hPIF5(l^ z?4T2-i?mvQ03C3DF$-f*eXn6Y-@kkLTx#)C)|~j)?5Z#uB@^bjL#7RppazbtfQ47q zQ{0&5@FMIbDwPq-4|X#G=J_$svpgjkx@u<_f;mf>FE-{7!Fc9VjNwdQviTzLk~sm3 zQVOYxc@aIz*P1mwZ+|hz#2V8$CRcxSp~7&^fUQr)aAxm+#^~~BEW(nEfH7Yy3cAQF z+&Byj4gvqU870srO5==W>!63~{`8h(j@`bPKfx)<5~%JocTGV%K^*!EGECjJsP{Mn z80qyqnIyl&gi1V{W7xZRIt0jBQ#|lyvvtCh{&XR7FtN`E_#U+=kfL$$Ad9RWl-8t( zm3X(0yn3HmJMH-)k+hftk-h|K*dSWAXw;N#hIuK5cwfc zMO~so;0U}9(v1={z?|mi@{()s8>VOfV&X&U8*}E%RY}XUTlw&*gMG#WR5% z9CqLE+WI-$LR2Ioz43{0_#gdbOs+2h`v~IVd>-fC55*|#!_eu4UU=v=nFYu`;HtZ! z;y5)5MJ9^jtLZJZi#u7)8MQ%-PnF)^TA( z1~m46Ye^hy!tMiM2mECh_=o=09a2cHug{@Ne;ofPue z%bA@dQfjLpFpwsZ`$j2Va`0ImkL>S;?rti(l_pcP+coF>?7|Gf@$8v2t>1Y%WZSY@ ztzvS8vjXHr6SIfaD_vvQ*Oyr*9n&Fh%hmBq_oEI<)en5WZh5Fg5k7v(*G%z$hLcqU z_5yP#?)~Z2WzC3~vQ|9);x{NpL=}4+sDvWt!av^`VOZenvuDOqkWnbX4lm?%^=Gy? zO#B}oEAk=p0+go(st<&yE17l6bCO6~N>zC#N7FLsu^`Gf`MMfHwW>>+vl=C<~zCxu>9# zc`~OAWly;M>WNgwKNXui&o4FoC@fjx6HNF=u}!sH%?SMo^W&r>s?2DK1}UGs8(G?S zkL8FpT1z&we6-Uvy~YtM^v>K1phU(hie4t!90Ssug(ovNRPfM`m72W`{W~HLqSn9Z-iYZ7un821F`DYiNGG#$BjW~nRn>dVE zddq~Fv3N>kVZ%}|3vVJLQ#QxvNsGAx=T%2hGE*wU-^-C<&77!+YKsX=)h?jRn6!62 z@g9VG%_Ie)0Ci>uj~xy7c9*e1mkG-L)W|``$r%eLG9=J?P$a7>~VIK5UhS z_ZAcz@6YLIn$59xyN&5%;GgX#fq8@SB}tvLB*3gZ*^c)o*j3(tk13{?*_%e7Q+R)g z(IvUz{bw}wXASRViqSVH=Ezg->&xBorvNRPD^C96+Y=rYnTD)5?1L&W5~ceK6i(&x z%pb&S0eyZ_Z?baH-(Qez;0m`t^}1Vo-Q(>oP<}sccGfq0z3mSE-tQl@kM|Fb@%Pd8 ze*bWPuis!z*0=kA8wcI~J{I-2k2{^tF*Vult{-o8_j>qyZ@+WUKROgm4!7EydwZ;x zPIqg)zu%@N-QId}}%j zgUuz_qH$;=}=Kf}TZ>vu@ zA9eP-oppkL+&ctx50444{`xx1Oh?SvM!&tcx!&(FoHzE`d;7FTTb+aM!FHF;UU#$G zJ=hZKve(@|KHA#ru(5RZHa2?H zgMFH@-qGRK-d>Nb%l`Jk!CsHnYh$Z>v~hf#6HIRl$nS`Txw*C1-&kkMy45?_+T7|e zLOM9uYr7;4&IUIC;{zVh1|W~Nx~v#(0Pg*bIu|wtW2mu?8dRNHvJaBP zg55gfVNeDzm_@(69dB%G7T*K<9t0bke!SH$zK8UEJ=}-~>zm!;JNcu2^83BPpug@H z-(&jT@3iB7cXLpDAJF&hpxxit+6s&BL;Bu-8Emab+kQ}dA2B#V+zzA8Hk%^JaYNV4 z&=m2h;oUa8U)0A*zj*%}O1wXMwOjc0OTDhQocKREno={6BLC*qen9}A;Mc7QAWMc5 zzwPA-Pm0#xfB(JLg+`z>edn#W>kJkA+F2K$JKNIdZeF|7w)fL<^|K*bb~ogHI{D{+ zj@(aQeBLy=8Tylw;cVvc`f@j0Io>_#^ST|la}1pvdPjl2oqt}JKj%|qY=O(gH4mgy z?1ER)bIcF91LO^(EK?xXkLHknKZzo7 zoc*L|e>@NXf{FmdX-DdX;wy1G0{jfvPb3YWdj(=M7zMQJ=I!oe-cL3B+;`s3YZd&r z7Uac&R*b#Y!n`=tiX(wF|5GcbLB)A-tQF(%YlFOapcM~^9`fR$Ry-0*$N%KTj-5GT z60LDMk+cg1OlHNTNon|git=oKZM`dw$mR{4fw3TDK9P8X<17UV=($V7hPUM|jT&C3 z>n_HGaU1SpAlq&UVnZk{!E6M@TXp5w`_Y=B1K*0%B#h&Bx;}}6{-Cqn8*Ec^Kj?)0IHF!6eGKDQ3bb5Y7V~GKGp)aj(^#SAu zVbl-$T$Kv_PDtb0-1Nika6^di-6-Dfh7AAyb~k8uH>pX_M-|I|_ep$@{f)S{C3@+H zLEDFJXvv~pX8`|Unha3URzyue+v@b!gMOij#X=K{L57V6K3htt7s8)}WEAw)yB(p5 z1f-;ew3ORhg8x$X6~ z?{9VmV(pF47kV9kG+y88vZ=^*JgnolY2>{>qc3V(#*zE;d0aG}m_F!v!ld*_!b0h3`{B@=+_j^ISE@ljLfo{wd(Fk;s zez(K8jii+J`x||KJ74`luN?~=wZ945rQP+pzUupJ*86%l2%=7~mFup4FXXywuoZQq zHY1)+40>#T$n@BLr`Pd;_2f%QYAvlxG}wycV0)XXxIsGz+1`m^hxWGeNd|Q{Y=;32 zGwg@keIOskI-)J#?-7#mdatwPhhmcZ!FCw>y#d>O8|#42I@gNhjR7OqXd~zbTfU?r z1M7=vDf`Y_=%W58=SyS;6(l&ZVl-m zIdw=JGwdOKj500TL*PSod&tOT5E;2FA|sbcWaP4mj9f;Mk;^JFa+yVJb`d_3F%=De z)`KwIZf{8=VFj?O;ka6tfQ7t84Dt|cO=%>opg-tDz#%%)NLYa%#lUeQsbIhgxb!3`i|yY**mSW%p2 z9%pBrUfx+}%doK#meVNHZyHFx)?uXAH|5w?l7*aKbzfpWYN&N^Qk=$*LP?=;J<%>3Eh!( zaFrq6&pK9EpZt+xA1ew1r64Q{LZu)o3L>Q-E(&6$U{Dkcl!9SVFjNXglCeyGvX-$N zz{N<$%1DZWKq&}|f>0@lih@Wfh>L<)DHs$51EpYC6bzMuQBg1&m)rf;yZG<3=Uz8A zt}U?uQU&iB^8~R}f+AM&PO}%n`EK-u*nGly7iK|#(7lk###$M5T$FRm^K;HIYM(~5 zzw`>@yv7)I6;v73g>_Hry(@KpE_K{>_1h6pJC1%kdA}W_U-aT+6V1n98cRE}g|qd+ zrrq$9w(}CUEuVUCre5i1%|kqId*0R?m50`-@~1clXIpgy=keXxM~kZ79%SG1ec47*p6rmQLkFzozn>u!(C(R}8UfY_^cta5BP80^YeZ5Fn$bwF z5lb~+WM`=5zn^)rr71COqv=3uI>1%~ zOVa@{SH0;_YC5D=mZn3-ll29Zni7{BS(=U%&g)QV?s2Vun0wyjjl@0NMsNQJj)H~< zJ*R^~78ehfw9C3tUcp+Nx0mH;{73F7C(edfP$RoJv{Vc7YDjrou4-Xk4XKRZQ(Edp zc|9a4ej{nA7w7eme%8CLdV{lmjh0$f1@oRv3GY}0W@!k2EPQcGE>;`9qZLf1!;?AGK$qXw z>HI|a6qDnzf)qX7YE@|E=!W5dQJItZEup1!&?>EHEW%G&=>q(ewWLaF>sPl>!QFa- z#Vx6l+Ik;|DGL1z$k>?lW-D6+_+l^sI7USk&R&qsXMQ*bG+|4W4hG8Cd|tg}Yo|hf znM{&@`I{+Q`6_E#-awl?7TfKR^1EPs%7b*gm`q)u%c`q@-@u^8CG(I{c}uQl+X#Q9 zjC{OX7gnySDnLenC*dfb_$m-8Sj(uSC08Q=xnDgTbvGHl{s@qhcwvgZ^`AUgQGCur zvB@bw$pDT{I{o}x3JQynx)+oLJk4TJwaHz7*D0AnI+(L5RT$WFjP>LFI}2p}wBKowe(gxXTLQ&C}6~_L6J0f?VLJ zZamVS$w@C=FD0;dUvTN(E`o6qdN0Id5x|LMG0eVLr&1KFKgA$oaG?R;V)OlUOHax1 zVJF27gteaGqiuY=!^1p9O)boooh&4=79?RRvA;me?J_^-CSn#6m@$~6d^wf3m00_k zQvJ;gdfmURT%Q=Wqqd0R@$Ms zHbXG>!1~ZPgROub`IkX+><6(sXe-6TYVX(!`NLB&hl0k_V9wr(ih`OgkgF1A)R=b* z57YlAaHrR`CD?a%N@2`rw;4}K2@{U~SsluMeNl!qJ-x44nDQcvPm2NNf%Nf-tu#~3 zB$I0G!GAxpkoPp^BFWs@I_yV(3T5`R1xnpT2}Ytt4_e$N@i@X3a+j2^N$Ry$zbKov zZuzWXK(_lWYo0=6>8h@m;kUkXkJZ7WSbCT$Esmw~1c-PK&sfa52gjF>Y|XVc{j#;u z_BZ##F%*E(`IMJ3C|VZ3_v1l26DP|@Tpok1ln!ztM!1yhHMq#PCrK86OAq1O_nIav z3BP5)(JF+EXnoG-N^iZnc*3`4gSjc6oW@A;1RHzquFSr5a zuj(sol=}d>8O1Y(P@+vSrC1q#f}&!?2BmCWP5WR_8$qn`joZ(B+ucO~S5?@E~6 zimif>8TY2q+gwDb)#1#4sW-T&c20Er`<#ygR%&;Jrv6|6 zc=M!&)V_38O9-nh0nJjZ@7JYU?D^;6C61G6Yvq%voRhE_si}g0|1vzwchu&?9b{W& z{cQcdM5|8wA1+(%4dBn;xoA~BOh9#|cL9C&8}XMpQ8}_@suj0PR6M%xu`rt#6{n$BI)+|#rN4*QuMLm- z{wyI$7;9Fbi~eVS(#48%$T}^R%v6I@#dW?H8k;*jkWp+kZmE@*pGmSI>XFDED4W$C z6xVHk7Au&=>*;y?MoxEU+8ZCz&^=z{nZwxp3ZMCt53_n}k-D4(4m@Hw!Hr#Nwv3xYzOa z##xH-U@^`u3TPq*A6=%2aApiX#S;aoZROhwx(QY?FBAHw{tQ(AhL_*lDLSWI2fZTY zKc$_iTsr@Mpj2yO@`!YrH8F6Vx1*HpsuxnZXsTXI9RuR@*@>~94O5kPVP0Pe$hEu= z%k7hV4QaV|I>Gh%@Z-_DBfK$<5}HL!hBb=So2O!3Uktq4bm5Ks2t!bQOwvU*zU43q zBt;auM&1t97K*`$SGI+p8PZP*jAw?KJ0yVUDW)NRmPy1Fu}{bb2%XRXb3ly0pJMhV z*^slySUM5X`y|v>rZNUVCNuh?7-)=iqZZvWW5FuDJaq~NaAflljMMN6_R$y)=`6t@ zk?5lU8|ni#%#Bz1F!eEID%BNhDX7i{jSZu2<|}4x>y|9Au2KE!;Y?u`?2O_TV!H7h z(2j)9-G$bje>8`d{(uT3%biqrWl9H%$=IXZ*M}=o{8uG5e;R#wD0*XZcd<4ATU(f= z#GxLA|BwZH^X~V&Ug_+MEf=~${nM>hvArmrK*7A}wGc(L2RRd#Fv{-7h+j-!L~6uY z0Od?-NKITYW67wLA*;$vKd`XHoHMqMO4}FwVbfiC8G4G4RgZxhN9>jx7iw zK3bk>hhmvzg~#&G)S<@+CfvlUcG@$M@y($s#VIkK+K;>zHU3YzmhB^G|J=f@V`qw*jTRTHEDD5em zk{xA!ci2B3RjrtqyX=N?8D4?FE6DNU=v)RBf4aY`oQ}2}5hVre-M!?GRkvv6vpI_1 ztiCnwy9?}8Rx)`N$!Yf?7D^?N&si~IsxM!>dU5Klc@zIrGFeP`epj>(&4kCkFcRIv zXLy`Uw0KAKWtlWCn$f>29~Liw^gld&8MkRg>+zjO*` zB+fqSe1N2Q^1&>gd=)^p9E;^5+h?;#e{o#FsG|-y=3WL+MlrxZ_+hcY#PkSzqPOFn zv0pL>(LB%AT{^!?r?)R6Kn*XGD&3Q#i_}rkPJrJvkKjiV_`2=b)mP)~Ed2;_N+d># z3ED`sq-0_svZL72zy-pOum>=6w7eM}>u6lcDgo&cH5naV;|_BSu(Pi6!w5T@cPUSdB~^TGk{mSgHR~?KnvwQYf6^k730%t_SJrGkNq36Ejro=^iyXYrNKM|u;< zB_Pg9)P-XoSx zF=SRw)?F6**Ky4`<4wWN*c~1&8iuxc|L)z<>(k5A7q5;^PWN8DHBSoWf36n$SG!ic zVT|*1_BC;S{r=_4>S%I4y;J3wJr&vwE>wQ@AZ^R51ApRCg8z!a8`Q6IBrila0qGxp;m;3L?Aq@WZe>aO7UD{fCYQK7O zTLgkCh68;9flir4t?5IZ;k2fl7>z0*+{A$gx6j>4$X^0aH#9G^)2?{JiiO%eHj~q3 zK}Np_aJ;?6#<{)M1>l`oK>mMwXy-&frOC90mz%&1p_0DL z1fo!R2#{r7OAJ~iD^bZOPYxFIdzc}p$<;pBWSG-f-QM?)UvlY49KkshrR+?hSOHA1 zXCXS+bv>L8pc0H={6CmkdUxHb*ZE^%A!eryohK*%@$$2@e=Q?qK)Jf*u!LceWDGB{ zz-rhdE7$5I!@a#}Pi7*qZP73x~DMllv{c-SdND9jYha&A8^np}`w z9OP8;3q-PTTwur{HJY3#K!wNDqPGYrQ}7^Sq%qn0{QT>bhs1_0>at2?zpvu7YFRIN z+nELzQ~`FYf9xBw)ALP}J;bij0%w%(8DWrj+3K||VH)}GCC^#uvDiQC>Vj5HM`DF* z#X{~bkNs3JC%k)Id5L{_Fl%v5{y^>&EQTCL`Lahj5;@8L0HXF{7RIn1*RYe{zkB)I zK?Of$$UrC--T7mZ(P8h0EFKr5CqKsHYr14(*KSbAVlfp(d@az5nuH!x?tVOd^|CgPKh2GMJkG_ijGjD{a4liW zgsS!vIK*g6-mAU0Xo^wWKKbL59r%wwx!!%!(2BmJqVe1;`JPIKmXhKbg2@0!Df^xv)CaTh`#uCtrRA z?4$bbqIPx;|I03(p40zYKZw8U8Rg`zo&E3c;E%KK^`ZN73^IA$f&cHi#YJ2^;uqH) zV)vm zQkITC^5*oD!`sE_606N2W8>OeM7xH&j=#pN*G+i%*x2wb$!iT3<3TbW$5Da%e0B@} zf6eCcbuAxo6P8E}4{`BApKPogTZCUDL}jAPJ7E=;^>KFon9h###~1hRi6F99>UZKQ;Yc6L#( zvpFr?{P4%!gB}|vK-;hUsXx>X4r14AfA7#UJ&_5LA`rfehkkh5V#Q3xVhwWJ3_#VJ zwd6v%(O;AJ=EZa{1_{8@ms~2hI!LF;%8Xw4ceyG(C>!I9o8XHwxy7MB_xY@tO{7A( z&5sG1m~WlU)N;8cz4>;wUoCQQ5g(C(;dPtd@o#@0&OPxOpB4VHnEm$m@XD*D)9dt_u4(HYD679LG*LM$ zz}Czw)XOA$!P9j~;koV%>~bvsoin>%rP17JUGk$Al=v5%&DM;Q_7U%%SFjrt^I{$b zK%6kRpEn|K_Kf1uAGPA1;f zI0>)t#&t39{)Q2UOB@98 z8KsXfOTYaO961&h5iwhaf6MWkcOUlN9TMKs9JmZHDk;O#NAagO12&0G{@(<76pGbr zopS%yc?xSB4`=CO8kry-$XS&F=pjcjdT2^Kv*F35_Qxv~d{$M8KS*a$`q5t#+fiDh ze3Sc8M5j(pkmrxD$qydniyF})n{)a|!>BiSyusaS;841nNbssgf8Tsc#uLG5>8Urz zg+XM@2Pn$whdWrhP(w&E9*#M_s(L(?~pk@SOW)$XDoDL<3 z?MjpX^znYqTq+`K-sH>yV$D+m%$cIEB(7N|;b;aVF&@vo7&KWBsuyAw;HdR}iIX8s zQHFQXO^p z+`G9tzw(mrfBfm~_ZAgI9PVl-4HfL?M4^6a2}9j#oyNH58eSTBI192?_c5J#vm_kN zlOf2p=t?#9V24`VpmnT^n+>aH25J9I`OkXYeGlLeiq0R$EGYuM3ci`8)1k-oR&soN zl)wpL$4YKCzRi^uIFgd-aP8!F5~O1~6hY`lr+^~V0K>HMeYkZAt`E_yIZ#!*e_)Epn{$CFr} z$@x(wf7d3Jwu~DI#>p1bY?KVPYMz|#ogQ5t9-W-Nd-I=1hq-`Iz0r%;e{yP*Y?7Ex2UGM$q8ex1 zDAxVQyrND!u6F7%K1y$DD`>0AZiKEdXp1R^*XvC(z1Pt6Zc5TZnocn_7x&zyr6dN) zf8w%{J3DOp|Q%j!nj_R&N#;0QVdgBfI~C4UAqmb0Lr<6Yn@4 zjpG@zR?snGmYTwBO9^6;EhTy4W}DQ6>65=_shiia5Kg9v#>T7}}e_3r;!V6JZ^qg~)T(dI2toJjfb2dDGHdJk* zxKN9klzf{zKWa^O?`zHDSFL2stLZo2*ufJf3Fx=jg=q&WAPS1ktDA-RPJw}F<9Cfm zp8{bEl@uspNTYwMbi&1)C-4 zU(b?{zM-{B#zF&WF4MWB5k|^Ze_g*iIk8T)BmQ~G5&!P}>({pPowcXYC=TXaxWZ{O z&lw#rb{y@E$0QKLcxsBYTvx>9Rb}$Jg?KFs{PMT|$ufC)y&L>52=j|Ut}5JbttDfu zi$Xs~%zYSoS%GG1Rf*>9-un}fB>(oe%4GJ}7e^m1U%uHpJUX;1&XOFde@oGp^Zc_2 ztvKS{Qonq`-YovmPC|AROSgaaoEMJi7jxgd9I@l}MO1f6KUzia`HF`&K7g{G*cDH2 z_en0+Ois<=kieX$yh~8A!LC2R_0)>jmpE^yDc@pm(~M%07;9GzEs4;1c<-8(*VZc- zxh?GOzer1$xSc;;~2+Ub3$`M1Gd%o_>Z2{dt*=Rc$aQ z*Krck>y1K@wArGhOH)HbVv6WXP_HsN%6~6H1jFt}bnzMd_IKb$e>|`46a?D|sdS`c zn%26onB^CEEpO41^Xqzx#RAuOtwS2H4#|C4Bf-wD#|bbhy=}wmEb(N}0nsa2yUlQK ziWC}8$>dI}-ty(?mzKFr=s@XujPwjEgIo5d`OOPn)S+it~KVBG9iv}&nV z%d$gZKSt&$9}7+I)dJ>#n3A}$!<33_%y_3%<<#KEfO2p6;0J+1CKlT(qZB{8ord;% zejwgO=CO?li!+F4Q`;Rua*v(s*olc_`vD;`4aA?d@ENo|fAJ<;;7C1pncYhGgQkgE zO@iDG2&fPm4Knh(S#$Y)$Ev*d3BOZ$QeSQjwekhWuENEf#y2?h)AR)2Ay&IWucj?2 zkn5$^O4HLyZM=e^atR|Zxe&L836SmB<8+8tZ1RspF>7)?zilvsHU=!1rn8AZrsa5K z4}GzkFdZ)De}rGH{rRwlDW028JuZXuAveg=# z!3x<{?;{3?Q&$eegydrqq0g1)2REdmIVCu1f1-bs?qk%70xyl4x#NTsr>QtYhNq<3Y=`ZyK4s$HDKgE{XxSxJL+%vkvnLixH5q}0_KEc+?e>LAi z#jMD5q)jqv%mdj=uc8W1)Vx>zOIL?`&ICWF%3D*h+vUgCYnA#sr(K0SNp)`eBPo7D7-0XR!8@Oqs?!>b0qX~;jl zmRG7`Nwam+Ot1Zr#Y;VZ+-`0t55mh^Uh|6vYC1?h#gY1&Tn|MMpkztel|y4~e_&wy zy!c?8z?XNrH%qZ?-WL7->V4W#;KFQV>rcw~+%OOa z9SD6}3Cc|pfqMMht0{11$q?kXH4}J!HRz+50O{a^bUsffI((P`EBO2v4ASUUQATZB zcGuz{ukb5Bdm(LMgo$c71+>E^t!7jdzqrJKOs*?{3 zllHw$lj&R?LGx3?Q$O4~rnKPxt{E+AC==Q!@N&;B4lZ)McaY{(T=K{Vh8-QbM#c5T zChy`g1qVD$Ycu{6X2y<}$~OdROV*aH6vimj7>)_D`H7;XPe7Sb z#vGu6^E(?ASsGj^evPW&?k;Xu$zs|=U~iZPH}C!E5Tj;;F@K%)>oNj z)i7E$(uFP1g%)U`cqE=te_n+NT~k0|a=l<`BeOt21%?BZUj6p>$pnU?L}Sn}tP+p` z?KxUd2KJbs@*41m;}Twq8;Uh9~F0Ok}XO^d9Zm$~8xB*Q6agT(`Pmr`?? zWIQSuaVHUxz+N{s-pjk<1c+;21Sf8vmBI1HqeU1CluBazO&Qs^f2Ikh&)&XRkoYO}J6mjZeJ7GVKA{$=UyYmvWZ_# zx2ySv&=_-a9mZq;e{Fc96iv?LM}hB%D4s-I)bkfMLXs~^YxC(`}fj;dox^e|zS{PZtx|iSM#Dlj}TZ zk%fQ%EFP!y?2|{gZz#_<&L8vfT6!&;lkYss9$d4$;r_gN;;~k2Q#D}0ZY+2&JEJsP znv5mgOjmPIfBzG1*8B;=lwOP%yXOe>R1o2t?7am_VlNJ93-N+DTlVULBuM?E^l;d= z>C9kMETfx#r&%lp_0sT)M?3m+9CUr)r;P6Bj-PiJp4tMD5r2n4H6Fg~NEll=m?ZE$ zd*+b#&Wx%TOnalhmJ3^Uz=bQ2qglg3_6-y5dUdX>f6=aTpDaNvjaz`{HSumvT>Op| z&vJ2f`{JLi?!J&yDSc1AWeoH!zXeJ~BmrNMKvoMKl9>GTA zlDJ+L#-lg4xFfE{vb<+r%|z>x!^Wf6SXxyCIY0hIv{dU>|Y+Rm{A?nd@)= zgRi;+&!3~a=+$_U!Ct60xx30dXVHwiC-`uc*fc`On5T-uvQbUti|Yr_EF4Xfd7*I@ z9wT$z{31O2eAU+L&r2ArKX178ZmFyv}{Q0OkNv5kD$0UV5h*rdM)scaV ze}@@F;ZU2sz=#+n)m;g;0h&v=cIeN_pr7OtfvI1*w%=GQZ{@MJEHNNUqHS3%VD@-h z3d+fJ7?0=abnQ>^d>+qCQC3wA?h{(o;gY2397X6=gJ-*H@{liT@sdESE?8FkwqZ3^ zKR_Fcf+-A&uK1OnrI0I$bYJfWgARVVOp6oTX7|oG*;NVWDX3*liNQscV zLO5x%iE9XmyAP?~X8v0c4UppA#~5|J7n30Ys3nu((HK3cV*dkPW3!(>(w(zHY^~O4 zKEKX(S}kI2=y5+7r#HSe|}8- zwV(WtK8v8Qs&>IR4X;j;UyywJ4ScdeshU3~aEy5IN6dfQ_pXyq@mLPS$zlY)`_n#M z`^|Q|ZXX&C`M&}EiyAtB!&@CVFxE1bO9QVz=5130n1&A*T21A(uS?W6)yF6!1 z-J1;qG4?i%yiMb7>SzG0%fw@$0*y2wGG|{ULS^G#0CAc}AmkAQZUZCc6t^JQ;f1niruz|@C z_^dahnSb*FH-y-Nuw=?Z28!{oIWsc*uKDe>dD>_!gpgE%(9MRoba$%`6)asznX{#5Q z^|}|%WQqU%-+4l4V7C~Ukm7SoXE&ku94gk>&lcP9iV26%%j*nXb%LT!V6DR=s15^F zYGT2|=|I{4Py<>R0{d~g!AiA7UG<@j3ALyf+_)0Kh*vKuo$;18e=h+(-x?xs2yV1> z!O595huYVGz6Sal($|?gPp*a{Ur0PXt%s-ITHo%ix4Y}DPN%!M-m&h9+6-v7-Ry2} z1Gx<8cYkXWeh2is(*e5v-s@~_n0omS)^owEw^MRz>nxW{3V{HnUsaopf&we+wo?ac?w23)IPz0 zgNA7dz7r2`emweLR{CCr4j+uzSm8W9p}!K?obS>snr&Ve8A znU&+tJ`MSA_p1Y5;aj??Z|SDKrJJ&Fl~+C>I6Gmnx-@e_S@I}%_9&N8q0FuzVIgb^ zC9$h*UY1$$zKBHvwzyiFbqxDx6psN%=0#ohCx=#UrJM7@*5YG}{Fu$UxDZT&?} z5$HD`j}%5pe}>KG_mT!vBui(ef*Ly48L_P;=qPCcPv7A|CJ2ZeX4sjA-~pmwpp|7t zb9!m?OL2EOOxpxlUu)}!JcZ9VPG?6TsnxV4Xn6VjKS($hhJgUtT(*F_Wl>L*3=vt$ zV?Xg^jG|)f2{!TB)ImTUltE=*k}B9lUMl^`)S!*^fA>!a)+O3qCF+fy^+IQ1dRh!O z|7s5SB#18-e_0827gQ5LCFP9`L03+k&qL4!)v{64Of@zX-N|e|4@oy%6HPhL_~&lp z0+wShOR@03E}JhpE_U`m!A>rT0)KA?&STDg?phNV$1+pdS7h1L-#^vD+5`VCW6F6{ zn9p52e-6m8e7y84E+FsmpK1wRA$r`4c;`@eia%WTgQCVa1Hv~0!Z!ng#ei^{!XA0J zgw-phh9=vAg21npp3=>+30{!<3G>Uz@7;gKECVONY^bRWT5lyPS#s)PJtWAdxw;()y?seN@0s-X2jh) zOZwbWtXzTkc#Zn<$AN^L7RAJ%jPm?;TpP42<|CPmv1 ze@b+Svc@v%dWe#aT{5RbkVoL;{MiwIv+~5Gzh__^ss}h5ZNJ+*mi5{HgKnmTyH4^Hw zkgt4nT7D{ihG8JrX*#E)2(#-vE~6!WUnw|{aX{BHaZ<|@QsrpJz)Jk5wafA=Qnd%? zRjIuizcQ5zmt39N;aHU*O=Oe*g!*oT*z^60Gk5;@4@@2jMIk9mRy9ij`E{bhf2G$^ zdNX|&Q>=80;Q9uRqmxB|8OQgC&zR!qtGujb)Rslsy)aB?5quQA8Br~a8gg?E*W%L4 z3e+eVa{69R408=pRf1a>6OdoKnaDPcZ#FUe+Q&BuwqQBz@=Yx_BvW7Xfv8H$g1ev+ zPGv6`SRMB2PhBR*BLH71m0TyDf8H67^$@fIw8mN+9D#ji!tQhd97EFC^F?m*UoHn( zX1OWp)#bhj+*Gb!h>xp4w1JQ`5kHD*Pm*jc5_HGwud&5{vMMOp;nQr5Vwyd%7{Y8I zswK7-^Zl0aTA2!dJbm@@J)+4w)ro>h_DUZ@nE3LvvAlCPiC~k0G92FMf54Z=>X9rp z)0Xi3alxXh)JDg?B=lE+pUGUXN`su!tgY70Lf6$BlOsJgQ=9OGlUgndPBEt-4q}by z;S|OH-qUE+M!`z#N z2R=qM;>B^HB|A?Z`GP7GzjMB>WBV@TAnS;KRW5BUz`3y3DxM*hH-TGgXlt>eY?intwn(7XsojG;67 z`0ei*TKX6BU*?z<0VCQ?FzL}KiHYa)JWrX5jGUH$1?MVy)MvdUv3yalVOz55ap=`% z=1bD0DNUUH@;OAKe~w1NS|VaL_qi(vKVj_l5v4aXWNpdWQ6aVV2@AqR&ymS|xTZZu zwjv>!8l6eqrI!GL3M4n8iuJ zv&4zr8Bfi;9yWMIKl}p*#Y6r&UCda>$t2DsxG=~8V2o*e`A)@GniMpo2oB*1<~Pfk zpNJX~j0x9A_tIW;#l;z>436O;VEIlOm`!Hn;X?FF37vDF6(ZA%s8+w&{W8K|wax{W zD=X7Bq3b?fe^%*>sxJ|t%Q5niQHybN2@6%c`f{ejLZZ~T z>k=kn(@rx`gKV;>q%FVIghc9UC7Y6joJ~b;SbH)tw+Ug(T5_uL-4?;!C5A!WvLa}q z>79Ho0X(eLP`q2OVx!Z1;8ZPG{?q9PC)N2nj~&@8m`eI9%T);J*PrnOshS$Uf)+0n zxCT+se*y&6*~C!h#Sq2K3mX}&PNiVu5^)+L;66)8=jEC1d37T-Fp99$Ox6_zIixT@~(dSe^Ux0N=O88 z!W09xMKK#6X?Vk!%oG}sN}1yDP8p7I{WGOXe>4KGg{DbW$m3aw`GaQ)<6Siv@CJcv z6aXxjWG;<7Z_^;JzFoULWluy5$4j$HlC!{+xmeinty{vtBN#2(_OkmHj0($09Mv9= za#EtgCZseXp{(icVO%&t3xAX>Aw1A{5nTK#y-p;luH3vMUgz_{8=N=2zO5OSY|emO ze`~@lK{(a<(Wc)9EG5L4aVRvtD29z(>jpj}M|Fn}6YovHS+}CC+tOYOzp@ve?$h1cv=J@^>P!4H^3;KODN?3Db(mwYPu{BHXwXk=w`IS&tIyZWLO(lJ*w50r9rm#VvIvfn!^!`3Mruv{Cmh^8P)35eQsof?DqnvrPov3CQJteHztYrp|E0jfYd-fk&FgB=QSxMn7o2# zPR{akXNs|3kTobQwUlDHl2VCe3+2vejuc_vIL@m`>k243QKcEI#C3lA{|198TK#Zx zvT!s`VsYsrF0N!2Fi(fWaqP$of5uNeyZOT;oGPZclx|@w8KZyue{3X$D2rn7LR_~e zrn#AqiS=O#vzs63YJ~k9F(EMMFRrQtZI(|zm%&ImA=yAm=0e6Ov)t&5n-BSLZrU2T ziN!)6RVSG*f5|NCSzoxwWsuE3W_C?kNR!gs2@vvQ)!?;vF3~AJrK$)|f6Ei0NUkM# z2Px~EOqx2N65eO2a8@!F1ru`tz6dtu>ufy$ZTr^zf9O0Gjhe*?IU&B$ zS#e1{OPr>Vqp$JYV zM$qKnEnJP}=QZ>Of3ruHdgEdk@#H5zpsS9xDgW729;-FSsSjr{azu8{vGIOyGf&Km zm+V-}@R9xl8~z$0>v(-mJHqko+)=(a2f_*#bDaDnGQr8H$xr!9ag^So>F{!U4kml_ zikWvN=cFpQx+u$6dv}fh%bS_b<{Zh0=z-0r{s_Ck>+I^He-u2(QW)wRcr{2<@COHn zE=X6UX!%iegl4APB7Odt%uu*xmp?MTWI~jqmnzmkYnms0q0LD_+^fAgMGDzOkHrAQe%sN z_~3lg&V+78fBrlJ5?G@F($>DuUPIZx@^CKWjBn*tMx1)sqr z{(uwooI-EMuuxI_{@sfM5m{ZCJxfO-LpQ4XMW+q#$z?G1r&mvqMyDwj+ZgW>o?!3; z``pekKolIz4?nkJ-sa6o%t*7fn2mpc|NrNhFBjLte_l@bWZ8`{3b&B{a!Q@jzWrv9 z`DT#$W{@$D;JrnZqz5BRR8#E%+E3Zqh`zTXU}TH|MHZWi1lV%^@$5YfzG?Rtg8_Oz zgjoNWuarfN52zlxu}IC#oQ4#a=_PP1%WVu#;hR!2yqRWcQ7arxBUiD4C}ty)|2AtE zNwU~4e_I;H8AVHRbx2Ws%PO!Lah1*%(<$cpvU*8@OwMMq#^$$d;sbfgi}pC#m_(zP z`i7U!G5ZO#X#uRPRq;pVYqGo(m&rq3>HN3*y>EF>IEIpb7{TygP9qPkH3p^hZyO#< z*wyeN9=Pb?Ll0$ey2F0K4b7r}X5nZOCwTb@e|vLp8qE+)pQlS7#G|qP{)_oI%;;Aq>6HRCY2@m7v0d~hh+1n`u5wmI!Aj^F0*u;~Hszi3wmC16S&KE! zf2)Pp))}eqo^-6=R4PksL1-6W`oUfBi`k z%3aqa8ascCNbYE(YRDB3nH>##S<9-sNI@DBBK}njrF&r*XPK#?Enn}o*w1d)Fh06# z<$3i>s(y(!`oPcPQkbF=CqrwQq6;$gg?%(%(<8v`1W?#dNgWcfP^dn+Z;Ej2hhe~c)y>yBSN zbnD)6PJ9!mmb(|0dk|Eb|ErpeC*iC8<52K>4GDLrt0%{#I)RY9ig z2h?Fdng@HYFZYiwPyX}u!O@{~=v6}r_B&BWjX`tnOy1cyQ{OjJ-#1gAe|d-;r?X)? ze+vxx2DY6&#oqgjrI#@8&v^d!mZ+f|A@>$o%-gq?bpOVh4h+2ITeuu;9uULv1ime~{MSuW3@`)h@SfcHuTC};b_?Ov=@Q~czzx-_t6{=2z%aBy^T zQva6j@3YeVp>C5ecdm$@f5g_=Lly??%dV1&sPk8Jt>*-r^FS!{olnH;8 zoUbKp?+H^e@de`kE#BcW#MC6~DnSKqQ|O;CO&{E;xaojNK&e-?w-1#MM1=x&J~WPV(3 zs05u(+Sfj-a~Q|hFO%t2eyG0vfO?q;zud}b*8gVL_-5DmX4kOTHD0Ilz417`i5)f# zp_Ny)Pqco@a%+cZyQkogXLxV@VtS1ge=V={tZ!dLv$X`8^~T%dBRb1AhG2-XJ!-zUjhu=bqT* zFHo^o+56K1*6Febw*;!>p{)VQ`Q+ABbJ^oteRiw9Iig2Lj173$t@8AU!Xg$h#acbI zyId3pe~aPJ@PI8uMMgjhe{M>DF=j!c*sL{%?L+9&Q!sa%V3CZY|Go0Dh>vvyquPXv}zJxhsI-($@EXo=YzU<@J;XeruTf)dn}Gc$(Z@s4&qr6{NsTh z6H;UBfkQUDb)>Q{qR%kzAIlIeLO;r@Br(kJofUimIB)&=$b9%F)uha(`Cq%061d2) zf2~%gYo7(v(K~Bq*W(0lKU?-3lGKhziuJxnAA8#ym!fwTQfZ!@DGk@WPPO2;-1}b! zC;g?$Vqz4vuPA{9<21l5l1@Qt5ChxThgvm#rmdbQ1+C_SokH79=`Z#mU!Nft*bg&) z_AsbYPuw8ND%8xUc4Ck;f%J#f23d5{f4sqexU&J)uUEKqv+@YbSLcP8S@qk2{Ov&g zb|5XLXWUK5HH7N_RH42!Q@hKYf0LZ6 zaV<^>+;4QTmtr_RM8si6xz0It1*Wglq4BMZ;VTutvHNfA{u{fuu=@kjUf2UVL+|>s z&-=c_dsVAaC@W*~c=INjj1!kQ9SW6>SwLqe{exyLqQPy zSGCBR!XLQFuMx;|nW()aoe!KQbW)Q0Eo;tvY%4mDOILLAP>XGXAVpR>o1Ne8je1$o zmEFNd-wZJ4@%&+^oPn~^IV<`HQ~G_0_weZD(dkzpU*x;Ic@q6zX}6T@*fLimJbo@9 zrNZ=s6f&K|*@g ztL~H48T-E?GZ$->&l=MKHC~R{*HG||?#a-RWaYP`qSp$$ET8m3hP1i0QXq!Q<2Uav z508%b-oHG(JUThpdy8QifJ$|Fv3h8SS4W30-oH9M`d_Dw`vc+ee<TK%gJp-y5QU>$IsUYxCUDvcq|LjOAc z^9hBl=NzcY;aUSMCNIE#+&rLsr@}R)d~uX^{Sc+R|UeNkmWUS{Qza z>~wM+Ns=pSwV2dGm917m8NxSv;5U2VH+!JV9{ARu;bTRIS}p6gnEm1b-Z%E<@Yr@>EpB!f~Z+ZT@A4neype?$=siWRa7YS8^z-sFOh zLi$os8j?}Ye`mEoT6}sUEc&ux(bL`3fNuM05iUj3kpS zzcF%7O|?aX5q^G*2U}N`_d4aqL7S)#fVH#bpZSU@=WD+y@<#K7(CF0dI~eP zGhIvq5)Yh?AJVa%o0gU=YCNZJmt4PtORnWdRJALrVq-qkDdoDfDrXvZ zODs#~f5&p;tz7dfM$Z=(8izsbGehZ1aqiWQss+8jTZXOWYaU)*`N{+RUcNipJ1oo| zB^6)2Iec;apOP8IR@W84y(A913Lsx+HcY%}@bS4RoWYY}3oUZZ>*<&7?| z7ID?Rq7VHjFS>i?JrThqVaFk?IPz*YvFF2dT+h90v;`n(#o0WoKjBzNcKy5;#PAM_ z1xWzyNM!khOtT0;D(@H-I$Dixw`bIWZ+fl%hFPn>q19U7GGW0ttyaI&HEO{(tOcu_ ze@uuFel1S>2K?mP1%DRy^*aw)Bhbn`8z%vAhrBgCVt=>5x6^xL5KN-mcOVkMI!ClX zMOzmCgQTw3l16F|djW7IKb)WZJO(VKrV8wgO4oc|x#eu70^gsdeiZuIJT_3x76E2* z02!hs)v}EK*iXjGhbz@$*K1Fo0s%hte*mk@!$;|OAmNpkm%%1v7{MftIquXarb(%`3-IE7j*Z|$M}mqR=# z6oxO=OTntN0oI~f@=<$MLzk9xQJIGaE1b9R_6UDSXY?g|aY%sB;emb_<;AMye|4m9 zM)g3VM;6vtqP^Os?nowN3<`>Mp zKc{|H$hO=~0*pO~+0ih?6GN)(-T3@Wz!X<;ls9g%A39+)uV?8zMZE%ZVMEua5-jQL z`>aQ>7PTpdkaJxQL)yK*{W0)Oe?m94mwt2X2PIb15Sd7OM|5@8gNY{b_i0P)_p;GT zo55v|rXD&w?${N8BL+2h2Ck51LPby7YE6GJPfyTTT8>Bef$-=89_;ti*2Ri?VIjuv znxuX7DGnDP*8;~M!oYw@{l`l>2yRy(QmU^ICVgq(t8iOHNtwxM{ER<8f9I{ptilKv zuk_^tRA2SHt;~j#iDSI3KYkNZ+me&NW?^pfE5Kry=@sk^I8r6Ik7D~>uDt(nUc^az zkhA9oTaOcwPq0DO8;Xz8@FxBz8Vy@VsLg6ni=$~I|E1PoE)Tm8#Q;pS^SA?S!e~ax++eT8S4sd!_q;0ezfW9gA?U+xx_uMjC*bOn@6Eoag zTUw>=dRaUkh1QEdP=S&N@LHlgZil)i+ryLGiuA<$0lw|93nO<_9%YElAelxormh%2 z_Rm(L)aXH4-jwo`;m|D296iefzI0WK1{y*Nlr@c5O4iUmz(4-cf7Z+Q_UWiE39hts z7o3dKo7&H=ymu>G#tkBy^Ps(YV{R~ zs(><>#qM=ZuY?a+wR=~|#mv3ldEcdDu884XNm#6u1F*Tz0u_-^7xR#RHBq2mSP_&coFZBF-qJ%j6Na zZG@$xK+^~_aLm{s7FitOrjMEFq_B;1`}s;V!`vuT(|Iw?cz=hjOfm5geOm1?zSVih zWpu~~=EGovTy=ojq?L|vn$9MeE-5}`kG_i0F-KryeC%`a0&RaW7+40$Q9FN(!RM3| zT_*m9VNpR!J+lZWohrTvvjc4CUCCGFcbukmh6h{feoT)M@S)B8<6vSX46LfL&E$xM ze861>K%`5C(|_8pcMUtQ^P@M@@$HUw;EV4T|B$QLs12Vi6(^v4!jvK?5Cil!YN@Sx zGQ?K`MmzS|(jZB*y)+vhX}eg6#FxHXd zVR!N$FMmPoeEV+iPp|d_N|%H>?7G*x=zw!}VXR~RBF}AJaj$2^HRYrJ0JFtsOp&}b z`%n~Aiz{APPNtNqmA;L&c>b{Odca-0Mo* zF(s0GAm-XFh#pB6^?2JW zrd6*-^)&RC_jk>>v`uDCz14g(l+&S>hkxi0JKwYwI(0{72AyW} zE&bx5`dNK0(PRE)Oj|q)@r>>Y*~!h7{B$5*DS7X?@s^pbxVi5+3(Hf%errGFuZy0Q z1BrG267Bpx<$?iHe}VC*44Y?Bq`ADw1zvmCV%wDC6eu0mHD4jLR(T2UzA&GjpMPUI zH}4r47oN!<&L2Pj0S;g1g}q~9R=Kx#-fCA<(w5)iqws_G_SrT5q5ue`THBl1e#Pwxk-0hQm^sq_aup&HNkGYd9y*_!Og=2jR)qSy)0cAknit zw&0}pct`A0k`>`*pglH;P<=uNW`EuaXw|3JYLdG2&cA`RddIpyO&PEp!E(JRC+B~9 z1!&nU;L|f$q73Q+NjCm}_TEOljT=c6eU+Bi6Ou7WiIRWiIF2IA8SU7XS5lIlBWdjx z*^)Y<*c>)xNy&J>`!x5#?vvd515iMBlTBHknLXd;>=}!VLIEfg3WY+UN`H#mE6Jhvxn8vkFx>&@+lEWzdD8U!hQ7>veUq-5KA2fSG@(^3; zN!2`i7R}R+aMyO?C+<{bkL>Y;F`-kgz5K?L)sk%7teFT{t4j_fs(+K^VFgi1Fb=(~ z8Lzn2tL#!OQ0?ZX&i}RgAx)Uk3~|3Td+qTJ#W;c$$YnH@-PrQh#g%ku~)}Q;5~&ti$3LVDun-$WPv+egr9{AeSAqzHERZIye8d z#_71LOvstSa)TTOoFJMM&I+YxW8t`8SO~e658&fbg?)zoH@a!ge>6?~Y6o(mp8@Pn zvpqOmjZT|~_s){*V$RBngSHCJ;rdM6&l~KFs2tJ*3}eyFsekSC=%-{j;QhP6;*Bcvv!J)8vAl#K&Xwr*Ec%(jXuNRysbcm{Y}e zbYN%jsCCQua@Y>q?2!594CW8G6(>u?0r0e0alk()D3qNk!2JaK?}EF|FAL- zy&6I6r6cqu+$_3m*@tTyju<}YKpIXu`7%a_>Lotl4+pmtn}Mh<>9#LYk4hdx6~^(_ zQOoUe7`c$S$P{BjzR^JM1x1)yK9?e;N=X=^u2u+38h`B;QR1+}Ct}ZQgcT~KONs8O z7_78P`5xx!+{I(Cb83?C?T7c+g4Y>mzhx-MIdXgSGWz3lw5}$L!&DVqCjDi3YT_cX zxy1xP%_;di`IX_RYJ54xGuj2q98k!HH)2N|NZM#%S~ERlFTH*GtFP~iit zyJ3)5i+}guVMp(Vhdo08ZyH|3lyd+aNNE9Togm);eFn zI__wdI<|71vf&Q0QNwg@bW<2BK;&oH<#0g$M}Ho+wuddbrkFI)Q8GQygLS%PGRDOb zGI%zc#wmJV_~VaaG;x@yq)3bynmbD-Wu#4o>eK`pBIDy6uuKzZV4T4sM`t)RL`ciH zyfQUJLvrb{^#n1^7q|_5IDbhe)601H-qYE&AP=Ry3Gst5ATHw55h!QcNLu44ZSFRfNhZj28M=QuNvtfPxOn(v2YU<9MFoEeOuJ;qFNQup)Ql;{gC|;k! zLuG!ja&&Nqhv=gct;T6j&Nv6lCS2)t$H5Z~a|(K7mPpVSBcD;oUY%w3pb~-Lg-^r* za@=#PhZawOgSmr1`30Y`JS}lrV$mM zgM$Qf`18$x0`@Z`(aXLNX;m`QlGtWj;`7b30HXUGJ$+%@1PQ}u*yE%hUvivsfTIvX zyyd|kh#@!jdAShiICNzG&oBFDo_|Qy|2a7pW<4l5f(vlHV>p^EjLJ(sRHR>(8&+d& zQzh2R;Vh7l_T(yIs0n&q?=j(*9NXp9wsMKl+P($Um`vV;st_7^m@|^C%1g5YwqU;s2KB$;Hr+M`JQYM z3v`twI++ShQ!%-XfP9;}rysOHr)Tkqwvppxm_d>AA0TyKliEz zvWnVGr>#QYIGF0iLbj8V5`PRjT*lU%OqHXY!oFwNwVb61Ly(tVO-e{3u5ZLS84#kdZnJ0@C9SQm1b|ZW#c2>bbsgiG<<`F+k=g& z6Wkwr+Yt4*^y1i7Hxhy(roS{M(v_oVy()rNSw&!TQ{ZX3FGRmMg@Q zF0l}NF&^Mpnf+3yRxJR@ju=m<7uL4keC`qvVftkFp;Qx;qxt8b(? z3rTq^&|wvfd6cve4S&}NepJS!W2CRdQwvdN0h)hlXDnL@EQJqd*F2*5xo&<)8lR-s zQGy2lyv7p5YGj+aN-?~4GUYi8Z71eGe<4-q%aeIGJ$Iyo-s<+ovt)WIpu_c*jRlqN zS58ppI>9xd*C~3 z7#B?K=oW*fN^Yhrk80GN@aXTA&^c}anxzA%nO9P5<~3OPZ98+P*#4NI&4HX8Y`21P zO}R>Ef24qMX2l?@NIR?>HrBS(XsHY*3+$%ufssyUSCsuCYk0fb&vr(%->dKNg+A|G zl?A-;kN8A?Q-Ae0$5a8~U5V1`+{cPoiL-Kzh5epUXuAiGNOdL&rUsB!kPoepyHW*8WzV zjz(FMSz9i#1s^@HH~C+>ii4Oo?&b(I@_zZkm{DX8HI#I6>BWoCB+7~=tGMnGA)cY@ z6*BqQ87Q{y@7N|m_1wS>cB27p?KF9nBx8Rn%kkbZ`>RPPj4S-`^(gocBWb;c7Fo3I zk{B;OVSjUd0otQ8XHC^@kmhK6dYfJ+1EYD(PM-8N)~TO)7tYw|UZ;;fMB+Q<%VML2 zsr$lSR68aTrlMD3;U2ugQOkE}ukfZ)R>=Cth|;4l8gjb%c$iL`bRksMnpe>~`ni5! z%=ED+wv}4<*x_(ByZKpqQXa3L0(+Y}!1=0@_J0bfl1U*n;${IiDUS!nd@V7RIFjR<6>w za(~m1f6Mq79cSP8|BB-K|3i!H60 zcMK~f;<^%jiR_vo!zw)e5AU%!+8!LZn83g3w}xWv?zd^MYC_}=iYPNx4rdw<=W zCzJIJqF>qkUUQ?YLAkGBp8Y&4{&b~H(_F7qnl-((Rj!cP^2(FUo!zgP?v|QV?akCI zCraJlMRs^k;FLP|hOxW9;Pm;gHO!gn)*A}F zC5nw;&!va=_$rbLyI1kVFrEGcBmaT$E{_dj(DpGTIX-L3$d5IK(cn2d8<__zr%5;3 z7e7PTGXTNxh8&a!NuEydE`MklX*5D45{eF=4qU`H{6GSG0K~&hkwUl*(i7Svrx7ky z@=}y|N~TviM}{Adhbcaspvw5*21DaZ3)?5rO?HV6+s2`qqO)r(!HC*qPYA}ZSjk{c zNBJ~~3FYz47~`kWQy?H8FtS`_(A?FTH#s=YV`;;WN&eVybg>YaG=IjBCqV7~@Dhk$ z1M~!BNe5TeEKq*vusn_j9g1LB7Z|3z4k-NZMSa8sJs0!M#c?)Vj`N#Qze52OG2Yy) z8vO8P`81h!va3r5sP)1d<{fc1tPHu+1yYElI4&k?BZ2`SamAR zn8CW$t>W9sPU_UbkUO{P8rnE()x;E}ztfCW1g6rY4_omy$$Ihka? zC!?Cc*qdZf6Ii+e`$e4!oD!%W>UxA*eB!5Bho#a?V52Hf9)IR~kjNPIAkX5wgF6yF z@tIkJOq&2YtpRlcd*y7n(dET4$Bs79JnMi1y-v_Aq$VuzXg@{XtOK8n^K@7b6uCGZ zrE}z#14ixTG?~sM#k;f;=BFHb|>&5G&qlN1%$OQE`>jFJK;(nH&)d0)WQ5`Vg z`Wj&U<4KLK^?!%IudUVqt2F>P5MA`5O92{y9AsHw2x+tbdFE4x&liKdS+H5s&L2B;SNu9lWSB4hq*?1CEWkwE;Vm^z^I_fyj@gQ)>o? zaX#%V0N>BXHza~qzKKSV>v8RaihyH!m^yIv z1cLydU=r3kfESnuyAB}i!NYhCBMK;-#3%KTl7CnB>_Z}(rRFGMvllQNw`Z1LCGmM@ z9ufkYhY8Q~17?}dF$FEI0gl%s9So~o0~VCAr!}NF17F?(x<8CB;8*QhP^tHLp*9u( z2k5ocg^(`*PG`?Ma-M74(9A#tWE-lZWMb-E$Gu^ zT7MVrRz_1@zqawrR62|ET5$DEgQf-!Wv)@y0550>HP!N(q%E~8GGLeQP5HjMh~)!X z_X+%7`(DG{4q<@b<>hE=^X_hTL3x5Rq5UrB{%6ztPZ@2b00vHVF&}eo4vh`Qf zAg1mM`%m92n*1yV)By;8bTG+uUn0`)$EP7IOrG82JJa~oR=Z3?yzs@AUY&;>gD<*t z>v~!QKo-Vr5Cn@yoXsSFi$@){dw(l@ zrGS7i0Gwu}fI!*;;C2;cS^#}-4q8QE{|rVRM|4y53OF}__GF#~{~&>0eOT^7N8NhS zQrmg|t~j9rdzy_$-o)PjY3Kc`O4xx1w^s?L7T&A(`w!E_P4k z;{fqPEA|797e2|b?dSV@B!sYp#D7eef16TFzu?O7mm#&y$$;$;*f-zsA1+;kz`ozz z+27g!>-#MLZCJ6|kkUVIzk0QWjld#lHa?uCgMnOCVd?(PhxfbNZ@2fif7voHiis3g zZ^6m|h(A8tx7geCEg^3P0pro_CZ}mWrTn)nSegx%#hry25r{B}B?g81k7>j^Qad`EPRIHB^71JhIWLbfEXnfk!z`U-{qtpWYn|r# zCG2y(Cu>#|bMEIQ)Ary0Zh!w)qpSE#=gduvB_~cs_;hP{9QV)Zl}9!lL>r^QB*Ro0 zrh8~l?Ve`YDeT7B$MN!~r>0*6*m2U~%XIMK@zW=^hfF?^BYKNOo~7-lm`l&3s+Rcm zgZIrpKDVPr+-MueFHoS?Bd?xy*m_T~9Su0UcdkcI@NsV}DI`C);D7IE=|%JeeNS4^ zONAfZoBT0FHN)#P}YmO(B&8NAQa(`-dIrl5UZ;cbQ&cvT0m=~Wpq<%WpHDvhJwE*1Q{<_A!4&P^G zq3j*CUsB{0dM(OP+`KspP&Td1^5@^E5!h+^fH~@3=zW{Bn4$+%P(yJLXrxUyoy?rp zUy_0kzA}d*kj=`IlFG0)j*EAOR?F}y|86U-pxGl=Nax&{PJa&=>WH}9f8+Bx@If^_ zRc$fHdpKGpNd4!fuN14k!sYIUwyrz7(l#*_ocE>+)2xJ4VO4%sg2gZU{Je}~__2RE z&p;XBcrRox%(%*FW|Y+Cd*T66^P2Bl4l=dx*6`QRB(vg|${HX2eFc&}iJHUc`zS5) zqzp}P9Hb8(9DhMSc@~~~3rLULDt&gmG8cN3QuBQw{Ne`-+=4}0AY)UNBR1V|nVzA$ zQC6<@&J$iHQak8}kr@RvQTEg_8KX!)>38}^w* zDHbf|Qvp5aIS^2_mhgkWcwPeLb+alhDPb$!xv~L8Uw_%7swQU@jA0ui0H+?W)|O-C zg7dZnwVeOT?AE52wy{?;ao3Sdtw@VeE$mGGyJ{MvyLnzsUMhAw7a|x*4Lm|LJpwyv zV1u7ZHpHTY2qXa^b#V<+f0rns4klv6IwT#4D)G6;8gwX-Ajy-{*J-Gau|0_il#t|H9I zxiy)9AZZ9bN&68;>IQ15VfJjYW02M9G95JI$$u#1UejWB8Ba9S;2Sc?koYdXG`!iWJdRLT6nw<}u^wLg=%3lQs4@S-&+>x=rpgE*!r=kjEltCz8`H?=BnxYyls$p$6#WqM> zSD_fEiD0;2VH)Ay@0DQ|?vg>4%;A!5QQqD(T8d;sc5hZ2WgP+9mv&I^(x15>Y>lP< zy5%#{L7p`ypw);99X}8rF@HDZ-|kP*1Ak)@@BXU(ejR-qDd~g!$Yfc!B1qT(Z5B;3 z@8*x)-qFNXjg(vMuC~ozYxb{)_OHkGuc!8}XZEk&iu<$Y{&XmN4rlKnw%dT^zAeJ9 zo#va_s2@-FDA_I%*BpA=bc5ZN>*+S%J-6j%zfBj+ZKXc7r_KQ1z8vNKY>epg#(&|c zB|*X(?FQ(~ztQfb2;v0gZ_iseHLmF3H{5i5N?s+y;a^7C)yUD4ETcH9T}ovFjhu5M zA*^fa{CUe+=bIti!MSZW|W!F$uXTHX9kb&ydu7q2Kw z*jcEgxV@s8=RwqP+bbJP+|Fv}97mjvf^oE{kz)xr68tO$C>&n?rBgM}P6qpa^X} zfT$h0tS^MhhY63qHv#IkQq*`r-qF1*Vup_;$Law4V}rf&jEAid@+ye+>TNe@>`8fJ zeB#+DX@pAFOSjwr_0w|H=8#Z^T*}rf_FcMDY6u9O7lj$$P3y=ZH2O0RK0CFqpE5|tHj%6}6=U5WGPkIz!& z*W~ywa4wx+1LIyvonM}^EGK3<&aUzOu3=AiQR3)xuy=&%2cyOTA~|Z{*i`W!Q4D(& zCqa%He|!$hWk&W|7JzO@V4H7X=L{>@3TpZt5;f&?Jw7=_&EX)O9;p);o}7E?x0z2+ zM9rU4DyQj^(;l3t5q~+Kd)=`w6^#NbTV!;bYyZS*2fd@`-VQ2*H(+A-DJDsbFUSs50;M!{G-g# zt9X<=&==N697RNV>ZAiWij|%~b-i{}gy_=ncTQT*bx$9a_ta|UpcMMPGNx^(y9&b9 z6;xZh&!V^S^lTmygaHirPs5$gjJ#YU88Q!t@+oi&+n~DFzBj|&%J~B|8>1L!q+__w zdHw*l*XF^c>3@izhK^!_M`b#d^p1G0Xh-HnjT3U@K#@%UQrjV;jt|Iqd#fCZ&g*3k zXC+sPo=s4?=-uR;8qn-|Cm%CDDqt}FU&Rj_B5k0K?{H(xuw`E|{1XUM=z~wCLU9GjibE-(Uje9$m_Y5tnx-YiDYS#&ZO zee#&E6;!d^C=w$awgJ_Di)Rv9ot@`Q<>=Sk==Ug)&s~n5F@~e(ua%>hZqyk)gX+H* z9DjY!jeg5MKe|f_IIJNRTuCJ*RF~>d!-0ptg(^r5L!3>aU9>IQ&v`8c$#kY)dr9 zR?VkCbChgfkLH$2wPzCpDk|ydikm*R{upP1)w;c$b1X{(jXsCnze6pQcj%ehv3!M7 z{GIQpTR!&n!gD5S3&gqgbtrvYCY^rlc7GO|gvEL?$h(>$%t98bz4FyP)=Bayy{LfS z`1e8KZB(7#l-UaQNyl}vd3i2u=9&LXV{h+(6|hV zOpYz=%uz#b2Cb>-vzqf&vi8&YbFKRj^f+rla|CpZnt~;MFi*chJR^= zcmeVI9Ka#Syz}&6#`7Wj8058iYEm49K%i5^E?S|M|LgED|JKQ~ga3+}N8h%V1@7I( zTY9`hAa}#&wo)L3!!z99iu-k0XX>K2Zi~l`HS(rYkFP6Y1WOAX|949n;vA_ z8=HC?<7Rh9y=0IZ26BR1@*Y2-E3(}(cgh@@{R?yz;$H)6D` z$Divd`~KPPh916VxStm@x3T}aBu)w6R(he~kYAqCnbzi6Vf#8}9T}w8t=Vo=bj@iS zT6*DHZQ zxA6K%-iA}KH;VaYHoBkR{03#)%K%8g*(-TBMbyAPW?uPL$ZNpr@f0zcksVX}A` zjCn}AyZsi&MPnxCDh}kOdqw?vf=XnxpK-74jkdKWT1q&HZDHJ>9V>c#>+LRyR)3wN86u{^yhI2bPLp2l&|heOUegyl%r9TjwLQAXu<+cDp-KS3xm;2pYU9m#` zUHp!&@?{Dd4_2;wpf%-Z+2wE$9VZCTrnj-bJjLX8-t)Gg%YRQ*7xSx>)E>W!y_T2C zppU%#`0+ab@$Bh3QwB!1`rJ?lems2k9GEtV *;F|-F<3BqjozgCV9R(eMd?k}eS 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]JL- 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