From 78057e100422bd9820231c45b47d7513fba3a522 Mon Sep 17 00:00:00 2001 From: Oliver Friedrich Date: Thu, 29 Sep 2022 22:26:44 +0200 Subject: [PATCH 01/11] Migrate to Node.js Extensions --- Lombiq.DataTables/Gulp/paths.js | 47 - Lombiq.DataTables/Gulp/tasks/copy-assets.js | 8 - Lombiq.DataTables/Gulpfile.js | 15 - Lombiq.DataTables/Lombiq.DataTables.csproj | 11 +- Lombiq.DataTables/package.json | 44 +- Lombiq.DataTables/pnpm-lock.yaml | 1487 +---------------- .../wwwroot/lombiq/icbin-datatable.js | 29 +- .../lombiq/jquery-datatables-autoinit.js | 3 +- .../wwwroot/lombiq/lombiq-datatables.js | 11 +- 9 files changed, 69 insertions(+), 1586 deletions(-) delete mode 100644 Lombiq.DataTables/Gulp/paths.js delete mode 100644 Lombiq.DataTables/Gulp/tasks/copy-assets.js delete mode 100644 Lombiq.DataTables/Gulpfile.js diff --git a/Lombiq.DataTables/Gulp/paths.js b/Lombiq.DataTables/Gulp/paths.js deleted file mode 100644 index 10b28795f..000000000 --- a/Lombiq.DataTables/Gulp/paths.js +++ /dev/null @@ -1,47 +0,0 @@ -const nodeModulesBasePath = './node_modules/'; -const distBasePath = './wwwroot/'; -const lombiqBasePath = './Assets/Scripts/'; - -module.exports = { - vendorAssets: [ - // We are using Nightly until the Chrome issue here is resolved: - // https://datatables.net/forums/discussion/68506/latest-google-chrome-91-0-4472-77-breaks-fixed-columns-with-complex-headings - // { - // name: 'datatables.net', - // path: nodeModulesBasePath + 'datatables.net/js/*', - // }, - { - name: 'datatables.net-buttons', - path: nodeModulesBasePath + 'datatables.net-buttons/js/*', - }, - // Same as above. - // { - // name: 'datatables.net-bs4-js', - // path: nodeModulesBasePath + 'datatables.net-bs4/js/*', - // }, - // { - // name: 'datatables.net-bs4-css', - // path: nodeModulesBasePath + 'datatables.net-bs4/css/*', - // }, - { - name: 'datatables.net-bs4-js', - path: nodeModulesBasePath + 'datatables.net-buttons-bs4/js/*', - }, - { - name: 'datatables.net-bs4-css', - path: nodeModulesBasePath + 'datatables.net-buttons-bs4/css/*', - }, - { - name: 'urijs', - path: nodeModulesBasePath + 'urijs/src/**', - }, - ], - lombiqAssets: { - base: lombiqBasePath, - all: lombiqBasePath + '**/*.js', - }, - dist: { - vendors: distBasePath + 'vendors/', - lombiq: distBasePath + 'lombiq/', - }, -}; diff --git a/Lombiq.DataTables/Gulp/tasks/copy-assets.js b/Lombiq.DataTables/Gulp/tasks/copy-assets.js deleted file mode 100644 index 2cedf631e..000000000 --- a/Lombiq.DataTables/Gulp/tasks/copy-assets.js +++ /dev/null @@ -1,8 +0,0 @@ -const gulp = require('gulp'); -const all = require('gulp-all'); - -const copyAssets = function (assets, destination) { - return all(assets.map((asset) => gulp.src(asset.path).pipe(gulp.dest(destination + '/' + asset.name)))); -}; - -module.exports = copyAssets; diff --git a/Lombiq.DataTables/Gulpfile.js b/Lombiq.DataTables/Gulpfile.js deleted file mode 100644 index 54659a55d..000000000 --- a/Lombiq.DataTables/Gulpfile.js +++ /dev/null @@ -1,15 +0,0 @@ -const gulp = require('gulp'); -const watch = require('gulp-watch'); -const babel = require('gulp-babel'); -const paths = require('./Gulp/paths'); -const jsTargets = require('../../../Utilities/Lombiq.Gulp.Extensions/Tasks/js-targets'); -const copyAssets = require('./Gulp/tasks/copy-assets'); - -gulp.task('copy:vendor-assets', () => copyAssets(paths.vendorAssets, paths.dist.vendors)); -gulp.task('build:lombiq-js', () => jsTargets.compile( - paths.lombiqAssets.base, - paths.dist.lombiq, - (pipeline) => pipeline.pipe(babel({ presets: ['@babel/env'] })))); - -gulp.task('default', gulp.parallel('copy:vendor-assets', 'build:lombiq-js')); -gulp.task('watch:lombiq-js', () => watch(paths.lombiqAssets.base, { verbose: true }, gulp.series('build:lombiq-js'))); diff --git a/Lombiq.DataTables/Lombiq.DataTables.csproj b/Lombiq.DataTables/Lombiq.DataTables.csproj index 2320d60f3..a064e2e1e 100644 --- a/Lombiq.DataTables/Lombiq.DataTables.csproj +++ b/Lombiq.DataTables/Lombiq.DataTables.csproj @@ -1,5 +1,7 @@ + + net6.0 true @@ -30,9 +32,6 @@ - - - @@ -50,13 +49,15 @@ - - + + + + diff --git a/Lombiq.DataTables/package.json b/Lombiq.DataTables/package.json index b7ec60b48..559bb4c2f 100644 --- a/Lombiq.DataTables/package.json +++ b/Lombiq.DataTables/package.json @@ -1,15 +1,45 @@ { "private": true, - "scripts": { - "dotnet-prebuild": "gulp" - }, "dependencies": { - "@babel/preset-env": "^7.14.8", - "datatables.net": "1.10.25", - "datatables.net-bs4": "3.2.2", "datatables.net-buttons": "1.7.1", "datatables.net-buttons-bs4": "1.7.1", - "gulp-babel": "^8.0.0", "urijs": "1.19.7" + }, + "scripts": { + "build": "npm explore nodejs-extensions -- pnpm build", + "clean": "npm explore nodejs-extensions -- pnpm clean", + "watch": "npm explore nodejs-extensions -- pnpm watch" + }, + "nodejsExtensions": { + "assetsToCopy": [ + { + "sources": [ "Assets/node_modules/datatables.net/js" ], + "pattern": "*", + "target": "wwwroot/vendors/datatables.net" + }, + { + "sources": [ "node_modules/datatables.net-buttons/js" ], + "pattern": "*", + "target": "wwwroot/vendors/datatables.net-buttons" + }, + { + "sources": [ "Assets/node_modules/datatables.net-bs4/js", "node_modules/datatables.net-buttons-bs4/js" ], + "pattern": "*", + "target": "wwwroot/vendors/datatables.net-bs4-js" + }, + { + "sources": [ "Assets/node_modules/datatables.net-bs4/css", "node_modules/datatables.net-buttons-bs4/css" ], + "pattern": "*", + "target": "wwwroot/vendors/datatables.net-bs4-css" + }, + { + "sources": [ "node_modules/urijs/src" ], + "target": "wwwroot/vendors/urijs" + } + ], + "scripts": { + "source": "Assets/Scripts", + "target": "wwwroot/lombiq" + } } } diff --git a/Lombiq.DataTables/pnpm-lock.yaml b/Lombiq.DataTables/pnpm-lock.yaml index 78f911f46..a0864053d 100644 --- a/Lombiq.DataTables/pnpm-lock.yaml +++ b/Lombiq.DataTables/pnpm-lock.yaml @@ -1,1155 +1,17 @@ lockfileVersion: 5.3 specifiers: - '@babel/preset-env': ^7.14.8 - datatables.net: 1.10.25 - datatables.net-bs4: 3.2.2 datatables.net-buttons: 1.7.1 datatables.net-buttons-bs4: 1.7.1 - gulp-babel: ^8.0.0 urijs: 1.19.7 dependencies: - '@babel/preset-env': 7.14.8 - datatables.net: 1.10.25 - datatables.net-bs4: 3.2.2 datatables.net-buttons: 1.7.1 datatables.net-buttons-bs4: 1.7.1 - gulp-babel: 8.0.0 urijs: 1.19.7 packages: - /@babel/code-frame/7.14.5: - resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.14.5 - dev: false - - /@babel/compat-data/7.14.7: - resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/generator/7.14.8: - resolution: {integrity: sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: false - - /@babel/helper-annotate-as-pure/7.14.5: - resolution: {integrity: sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor/7.14.5: - resolution: {integrity: sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-explode-assignable-expression': 7.14.5 - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-compilation-targets/7.14.5: - resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.14.7 - '@babel/helper-validator-option': 7.14.5 - browserslist: 4.16.6 - semver: 6.3.0 - dev: false - - /@babel/helper-create-class-features-plugin/7.14.8: - resolution: {integrity: sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-member-expression-to-functions': 7.14.7 - '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/helper-replace-supers': 7.14.5 - '@babel/helper-split-export-declaration': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-create-regexp-features-plugin/7.14.5: - resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - regexpu-core: 4.7.1 - dev: false - - /@babel/helper-define-polyfill-provider/0.2.3: - resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/helper-compilation-targets': 7.14.5 - '@babel/helper-module-imports': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/traverse': 7.14.8 - debug: 4.3.2 - lodash.debounce: 4.0.8 - resolve: 1.20.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-explode-assignable-expression/7.14.5: - resolution: {integrity: sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-function-name/7.14.5: - resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-get-function-arity': 7.14.5 - '@babel/template': 7.14.5 - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-get-function-arity/7.14.5: - resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-hoist-variables/7.14.5: - resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-member-expression-to-functions/7.14.7: - resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-module-imports/7.14.5: - resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-module-transforms/7.14.8: - resolution: {integrity: sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-module-imports': 7.14.5 - '@babel/helper-replace-supers': 7.14.5 - '@babel/helper-simple-access': 7.14.8 - '@babel/helper-split-export-declaration': 7.14.5 - '@babel/helper-validator-identifier': 7.14.8 - '@babel/template': 7.14.5 - '@babel/traverse': 7.14.8 - '@babel/types': 7.14.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-optimise-call-expression/7.14.5: - resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-plugin-utils/7.14.5: - resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator/7.14.5: - resolution: {integrity: sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-wrap-function': 7.14.5 - '@babel/types': 7.14.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-replace-supers/7.14.5: - resolution: {integrity: sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-member-expression-to-functions': 7.14.7 - '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/traverse': 7.14.8 - '@babel/types': 7.14.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-simple-access/7.14.8: - resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-skip-transparent-expression-wrappers/7.14.5: - resolution: {integrity: sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-split-export-declaration/7.14.5: - resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.8 - dev: false - - /@babel/helper-validator-identifier/7.14.8: - resolution: {integrity: sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-option/7.14.5: - resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-wrap-function/7.14.5: - resolution: {integrity: sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.14.5 - '@babel/template': 7.14.5 - '@babel/traverse': 7.14.8 - '@babel/types': 7.14.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/highlight/7.14.5: - resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.14.8 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - - /@babel/parser/7.14.8: - resolution: {integrity: sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==} - engines: {node: '>=6.0.0'} - hasBin: true - dev: false - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5: - resolution: {integrity: sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-proposal-optional-chaining': 7.14.5 - dev: false - - /@babel/plugin-proposal-async-generator-functions/7.14.7: - resolution: {integrity: sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-remap-async-to-generator': 7.14.5 - '@babel/plugin-syntax-async-generators': 7.8.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-class-properties/7.14.5: - resolution: {integrity: sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-create-class-features-plugin': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-class-static-block/7.14.5: - resolution: {integrity: sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/helper-create-class-features-plugin': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-class-static-block': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-dynamic-import/7.14.5: - resolution: {integrity: sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3 - dev: false - - /@babel/plugin-proposal-export-namespace-from/7.14.5: - resolution: {integrity: sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3 - dev: false - - /@babel/plugin-proposal-json-strings/7.14.5: - resolution: {integrity: sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-json-strings': 7.8.3 - dev: false - - /@babel/plugin-proposal-logical-assignment-operators/7.14.5: - resolution: {integrity: sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 - dev: false - - /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5: - resolution: {integrity: sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 - dev: false - - /@babel/plugin-proposal-numeric-separator/7.14.5: - resolution: {integrity: sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4 - dev: false - - /@babel/plugin-proposal-object-rest-spread/7.14.7: - resolution: {integrity: sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.7 - '@babel/helper-compilation-targets': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3 - '@babel/plugin-transform-parameters': 7.14.5 - dev: false - - /@babel/plugin-proposal-optional-catch-binding/7.14.5: - resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3 - dev: false - - /@babel/plugin-proposal-optional-chaining/7.14.5: - resolution: {integrity: sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3 - dev: false - - /@babel/plugin-proposal-private-methods/7.14.5: - resolution: {integrity: sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-create-class-features-plugin': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-private-property-in-object/7.14.5: - resolution: {integrity: sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-create-class-features-plugin': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-unicode-property-regex/7.14.5: - resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-async-generators/7.8.4: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-class-properties/7.12.13: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-class-static-block/7.14.5: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-dynamic-import/7.8.3: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-export-namespace-from/7.8.3: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-json-strings/7.8.3: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-numeric-separator/7.10.4: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-object-rest-spread/7.8.3: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-optional-catch-binding/7.8.3: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-optional-chaining/7.8.3: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-private-property-in-object/7.14.5: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-syntax-top-level-await/7.14.5: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-arrow-functions/7.14.5: - resolution: {integrity: sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-async-to-generator/7.14.5: - resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-module-imports': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-remap-async-to-generator': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-block-scoped-functions/7.14.5: - resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-block-scoping/7.14.5: - resolution: {integrity: sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-classes/7.14.5: - resolution: {integrity: sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-replace-supers': 7.14.5 - '@babel/helper-split-export-declaration': 7.14.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-computed-properties/7.14.5: - resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-destructuring/7.14.7: - resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-dotall-regex/7.14.5: - resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-duplicate-keys/7.14.5: - resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-exponentiation-operator/7.14.5: - resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-builder-binary-assignment-operator-visitor': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-for-of/7.14.5: - resolution: {integrity: sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-function-name/7.14.5: - resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-function-name': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-literals/7.14.5: - resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-member-expression-literals/7.14.5: - resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-modules-amd/7.14.5: - resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-module-transforms': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-commonjs/7.14.5: - resolution: {integrity: sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-module-transforms': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-simple-access': 7.14.8 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-systemjs/7.14.5: - resolution: {integrity: sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-hoist-variables': 7.14.5 - '@babel/helper-module-transforms': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-validator-identifier': 7.14.8 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-umd/7.14.5: - resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-module-transforms': 7.14.8 - '@babel/helper-plugin-utils': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex/7.14.7: - resolution: {integrity: sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 - dev: false - - /@babel/plugin-transform-new-target/7.14.5: - resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-object-super/7.14.5: - resolution: {integrity: sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-replace-supers': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-parameters/7.14.5: - resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-property-literals/7.14.5: - resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-regenerator/7.14.5: - resolution: {integrity: sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - regenerator-transform: 0.14.5 - dev: false - - /@babel/plugin-transform-reserved-words/7.14.5: - resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-shorthand-properties/7.14.5: - resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-spread/7.14.6: - resolution: {integrity: sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - dev: false - - /@babel/plugin-transform-sticky-regex/7.14.5: - resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-template-literals/7.14.5: - resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-typeof-symbol/7.14.5: - resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-unicode-escapes/7.14.5: - resolution: {integrity: sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/plugin-transform-unicode-regex/7.14.5: - resolution: {integrity: sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - dev: false - - /@babel/preset-env/7.14.8: - resolution: {integrity: sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.7 - '@babel/helper-compilation-targets': 7.14.5 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.14.5 - '@babel/plugin-proposal-async-generator-functions': 7.14.7 - '@babel/plugin-proposal-class-properties': 7.14.5 - '@babel/plugin-proposal-class-static-block': 7.14.5 - '@babel/plugin-proposal-dynamic-import': 7.14.5 - '@babel/plugin-proposal-export-namespace-from': 7.14.5 - '@babel/plugin-proposal-json-strings': 7.14.5 - '@babel/plugin-proposal-logical-assignment-operators': 7.14.5 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5 - '@babel/plugin-proposal-numeric-separator': 7.14.5 - '@babel/plugin-proposal-object-rest-spread': 7.14.7 - '@babel/plugin-proposal-optional-catch-binding': 7.14.5 - '@babel/plugin-proposal-optional-chaining': 7.14.5 - '@babel/plugin-proposal-private-methods': 7.14.5 - '@babel/plugin-proposal-private-property-in-object': 7.14.5 - '@babel/plugin-proposal-unicode-property-regex': 7.14.5 - '@babel/plugin-syntax-async-generators': 7.8.4 - '@babel/plugin-syntax-class-properties': 7.12.13 - '@babel/plugin-syntax-class-static-block': 7.14.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3 - '@babel/plugin-syntax-export-namespace-from': 7.8.3 - '@babel/plugin-syntax-json-strings': 7.8.3 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 - '@babel/plugin-syntax-numeric-separator': 7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3 - '@babel/plugin-syntax-optional-chaining': 7.8.3 - '@babel/plugin-syntax-private-property-in-object': 7.14.5 - '@babel/plugin-syntax-top-level-await': 7.14.5 - '@babel/plugin-transform-arrow-functions': 7.14.5 - '@babel/plugin-transform-async-to-generator': 7.14.5 - '@babel/plugin-transform-block-scoped-functions': 7.14.5 - '@babel/plugin-transform-block-scoping': 7.14.5 - '@babel/plugin-transform-classes': 7.14.5 - '@babel/plugin-transform-computed-properties': 7.14.5 - '@babel/plugin-transform-destructuring': 7.14.7 - '@babel/plugin-transform-dotall-regex': 7.14.5 - '@babel/plugin-transform-duplicate-keys': 7.14.5 - '@babel/plugin-transform-exponentiation-operator': 7.14.5 - '@babel/plugin-transform-for-of': 7.14.5 - '@babel/plugin-transform-function-name': 7.14.5 - '@babel/plugin-transform-literals': 7.14.5 - '@babel/plugin-transform-member-expression-literals': 7.14.5 - '@babel/plugin-transform-modules-amd': 7.14.5 - '@babel/plugin-transform-modules-commonjs': 7.14.5 - '@babel/plugin-transform-modules-systemjs': 7.14.5 - '@babel/plugin-transform-modules-umd': 7.14.5 - '@babel/plugin-transform-named-capturing-groups-regex': 7.14.7 - '@babel/plugin-transform-new-target': 7.14.5 - '@babel/plugin-transform-object-super': 7.14.5 - '@babel/plugin-transform-parameters': 7.14.5 - '@babel/plugin-transform-property-literals': 7.14.5 - '@babel/plugin-transform-regenerator': 7.14.5 - '@babel/plugin-transform-reserved-words': 7.14.5 - '@babel/plugin-transform-shorthand-properties': 7.14.5 - '@babel/plugin-transform-spread': 7.14.6 - '@babel/plugin-transform-sticky-regex': 7.14.5 - '@babel/plugin-transform-template-literals': 7.14.5 - '@babel/plugin-transform-typeof-symbol': 7.14.5 - '@babel/plugin-transform-unicode-escapes': 7.14.5 - '@babel/plugin-transform-unicode-regex': 7.14.5 - '@babel/preset-modules': 0.1.4 - '@babel/types': 7.14.8 - babel-plugin-polyfill-corejs2: 0.2.2 - babel-plugin-polyfill-corejs3: 0.2.3 - babel-plugin-polyfill-regenerator: 0.2.2 - core-js-compat: 3.15.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules/0.1.4: - resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-proposal-unicode-property-regex': 7.14.5 - '@babel/plugin-transform-dotall-regex': 7.14.5 - '@babel/types': 7.14.8 - esutils: 2.0.3 - dev: false - - /@babel/runtime/7.14.8: - resolution: {integrity: sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.9 - dev: false - - /@babel/template/7.14.5: - resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.14.5 - '@babel/parser': 7.14.8 - '@babel/types': 7.14.8 - dev: false - - /@babel/traverse/7.14.8: - resolution: {integrity: sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.14.5 - '@babel/generator': 7.14.8 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-hoist-variables': 7.14.5 - '@babel/helper-split-export-declaration': 7.14.5 - '@babel/parser': 7.14.8 - '@babel/types': 7.14.8 - debug: 4.3.2 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/types/7.14.8: - resolution: {integrity: sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.14.8 - to-fast-properties: 2.0.0 - dev: false - - /ansi-colors/1.1.0: - resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-wrap: 0.1.0 - dev: false - - /ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - - /ansi-wrap/0.1.0: - resolution: {integrity: sha1-qCJQ3bABXponyoLoLqYDu/pF768=} - engines: {node: '>=0.10.0'} - dev: false - - /arr-diff/4.0.0: - resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=} - engines: {node: '>=0.10.0'} - dev: false - - /arr-union/3.1.0: - resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=} - engines: {node: '>=0.10.0'} - dev: false - - /assign-symbols/1.0.0: - resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=} - engines: {node: '>=0.10.0'} - dev: false - - /babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - dependencies: - object.assign: 4.1.2 - dev: false - - /babel-plugin-polyfill-corejs2/0.2.2: - resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.14.7 - '@babel/helper-define-polyfill-provider': 0.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3/0.2.3: - resolution: {integrity: sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-define-polyfill-provider': 0.2.3 - core-js-compat: 3.15.2 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator/0.2.2: - resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-define-polyfill-provider': 0.2.3 - transitivePeerDependencies: - - supports-color - dev: false - - /browserslist/4.16.6: - resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001247 - colorette: 1.2.2 - electron-to-chromium: 1.3.786 - escalade: 3.1.1 - node-releases: 1.1.73 - dev: false - - /call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.1 - dev: false - - /caniuse-lite/1.0.30001247: - resolution: {integrity: sha512-4rS7co+7+AoOSPRPOPUt5/GdaqZc0EsUpWk66ofE3HJTAajUK2Ss2VwoNzVN69ghg8lYYlh0an0Iy4LIHHo9UQ==} - dev: false - - /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - - /color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - - /color-name/1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - dev: false - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: false - - /core-js-compat/3.15.2: - resolution: {integrity: sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==} - dependencies: - browserslist: 4.16.6 - semver: 7.0.0 - dev: false - - /core-util-is/1.0.2: - resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} - dev: false - /datatables.net-bs4/1.10.20: resolution: {integrity: sha512-kQmMUMsHMOlAW96ztdoFqjSbLnlGZQ63iIM82kHbmldsfYdzuyhbb4hTx6YNBi481WCO3iPSvI6YodNec46ZAw==} dependencies: @@ -1157,14 +19,6 @@ packages: jquery: 3.6.0 dev: false - /datatables.net-bs4/3.2.2: - resolution: {integrity: sha1-R4YNjMskckMJ/jAN5y6v1yAbusY=} - deprecated: Incorrect version published. Please use the latest non-deprecated version - 1.10.13 at the time of writing - dependencies: - datatables.net: 1.10.25 - jquery: 3.6.0 - dev: false - /datatables.net-buttons-bs4/1.7.1: resolution: {integrity: sha512-s+fwsgAAWp7mOKwuztPH06kaw2JNAJ71VNTw/TqGQTL6BK9FshweDKZSRIB/ePcc/Psiy8fhNEj3XHxx4OO6BA==} dependencies: @@ -1176,7 +30,7 @@ packages: /datatables.net-buttons/1.7.1: resolution: {integrity: sha512-D2OxZeR18jhSx+l0xcfAJzfUH7l3LHCu0e606fV7+v3hMhphOfljjZYLaiRmGiR9lqO/f5xE/w2a+OtG/QMavw==} dependencies: - datatables.net: 1.10.25 + datatables.net: 1.11.5 jquery: 3.6.0 dev: false @@ -1186,351 +40,16 @@ packages: jquery: 3.6.0 dev: false - /datatables.net/1.10.25: - resolution: {integrity: sha512-y0+C7all+MC/h1acwnjErhaJPjYGKpWTvbXrfEUbR8+P+nnhgjNn5nL1udgsTwBObMhlj1KITNBRrM/ZLSoj+Q==} + /datatables.net/1.11.5: + resolution: {integrity: sha512-nlFst2xfwSWaQgaOg5sXVG3cxYC0tH8E8d65289w9ROgF2TmLULOOpcdMpyxxUim/qEwVSEem42RjkTWEpr3eA==} dependencies: jquery: 3.6.0 dev: false - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /define-properties/1.1.3: - resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} - engines: {node: '>= 0.4'} - dependencies: - object-keys: 1.1.1 - dev: false - - /electron-to-chromium/1.3.786: - resolution: {integrity: sha512-AmvbLBj3hepRk8v/DHrFF8gINxOFfDbrn6Ts3PcK46/FBdQb5OMmpamSpZQXSkfi77FfBzYtQtAk+00LCLYMVw==} - dev: false - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} - dev: false - - /esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: false - - /extend-shallow/3.0.2: - resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=} - engines: {node: '>=0.10.0'} - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: false - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false - - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.2 - dev: false - - /globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false - - /gulp-babel/8.0.0: - resolution: {integrity: sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ==} - engines: {node: '>=6'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - plugin-error: 1.0.1 - replace-ext: 1.0.1 - through2: 2.0.5 - vinyl-sourcemaps-apply: 0.2.1 - dev: false - - /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} - dev: false - - /has-symbols/1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} - engines: {node: '>= 0.4'} - dev: false - - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: false - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /is-core-module/2.5.0: - resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==} - dependencies: - has: 1.0.3 - dev: false - - /is-extendable/1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-object: 2.0.4 - dev: false - - /is-plain-object/2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: false - - /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: false - - /isobject/3.0.1: - resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} - engines: {node: '>=0.10.0'} - dev: false - /jquery/3.6.0: resolution: {integrity: sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==} dev: false - /js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /jsesc/0.5.0: - resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} - hasBin: true - dev: false - - /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /lodash.debounce/4.0.8: - resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} - dev: false - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /node-releases/1.1.73: - resolution: {integrity: sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==} - dev: false - - /object-keys/1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: false - - /object.assign/4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.3 - has-symbols: 1.0.2 - object-keys: 1.1.1 - dev: false - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false - - /plugin-error/1.0.1: - resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==} - engines: {node: '>= 0.10'} - dependencies: - ansi-colors: 1.1.0 - arr-diff: 4.0.0 - arr-union: 3.1.0 - extend-shallow: 3.0.2 - dev: false - - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.2 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /regenerate-unicode-properties/8.2.0: - resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate/1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime/0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} - dev: false - - /regenerator-transform/0.14.5: - resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} - dependencies: - '@babel/runtime': 7.14.8 - dev: false - - /regexpu-core/4.7.1: - resolution: {integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 8.2.0 - regjsgen: 0.5.2 - regjsparser: 0.6.9 - unicode-match-property-ecmascript: 1.0.4 - unicode-match-property-value-ecmascript: 1.2.0 - dev: false - - /regjsgen/0.5.2: - resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} - dev: false - - /regjsparser/0.6.9: - resolution: {integrity: sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - - /replace-ext/1.0.1: - resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} - engines: {node: '>= 0.10'} - dev: false - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.5.0 - path-parse: 1.0.7 - dev: false - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: false - - /semver/7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true - dev: false - - /source-map/0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} - engines: {node: '>=0.10.0'} - dev: false - - /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /through2/2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: false - - /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} - dev: false - - /unicode-canonical-property-names-ecmascript/1.0.4: - resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript/1.0.4: - resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 1.0.4 - unicode-property-aliases-ecmascript: 1.1.0 - dev: false - - /unicode-match-property-value-ecmascript/1.2.0: - resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript/1.1.0: - resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} - engines: {node: '>=4'} - dev: false - /urijs/1.19.7: resolution: {integrity: sha512-Id+IKjdU0Hx+7Zx717jwLPsPeUqz7rAtuVBRLLs+qn+J2nf9NGITWVCxcijgYxBqe83C7sqsQPs6H1pyz3x9gA==} dev: false - - /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: false - - /vinyl-sourcemaps-apply/0.2.1: - resolution: {integrity: sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=} - dependencies: - source-map: 0.5.7 - dev: false - - /xtend/4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: false diff --git a/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js b/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js index 741853fb8..3531c921f 100644 --- a/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js +++ b/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js @@ -1,12 +1,12 @@ "use strict"; -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 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 _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 _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } @@ -91,23 +91,23 @@ window.icbinDataTable.table = { }, defaultSort: { // { name: "columnName", ascending: true } - "default": null + default: null }, defaultLength: { type: Number, - "default": 10 + default: 10 }, lengths: { type: Array, - "default": function _default() { + default: function _default() { return [10, 25, 50, 100]; } }, paging: { - "default": true + default: true }, filter: { - "default": function _default() { + default: function _default() { return function (collection) { return collection; }; @@ -330,7 +330,7 @@ window.icbinDataTable.remove = { }, disabled: { type: Boolean, - "default": false + default: false } }, template: "\n \n \n {{ text.remove }}\n " @@ -351,17 +351,17 @@ window.icbinDataTable.checkbox = { required: true }, label: { - "default": '' + default: '' }, checked: { - "default": undefined + default: undefined }, disabled: { type: Boolean, - "default": false + default: false }, classes: { - "default": '' + default: '' } }, methods: { @@ -382,4 +382,5 @@ window.icbinDataTable.checkbox = { this.$emit('component', 'checked'); }, template: "\n " -}; \ No newline at end of file +}; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJpY2JpbkRhdGFUYWJsZSIsInRhYmxlIiwibmFtZSIsIm1vZGVsIiwicHJvcCIsImV2ZW50IiwicHJvcHMiLCJkYXRhIiwidHlwZSIsIkFycmF5IiwicmVxdWlyZWQiLCJjb2x1bW5zIiwidGV4dCIsIk9iamVjdCIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdCIsImRlZmF1bHRMZW5ndGgiLCJOdW1iZXIiLCJsZW5ndGhzIiwicGFnaW5nIiwiZmlsdGVyIiwiY29sbGVjdGlvbiIsInBhZ2VJbmRleCIsImxlbmd0aCIsInNvcnQiLCJhc2NlbmRpbmciLCJjb21wdXRlZCIsInRvdGFsIiwic2VsZiIsImxlbmd0aFBpY2tlckJlZm9yZSIsImxlbmd0aFBpY2tlciIsInNwbGl0IiwibGVuZ3RoUGlja2VyQWZ0ZXIiLCJwYXJ0cyIsImRpc3BsYXlDb3VudFRleHQiLCJpdGVtSW5kZXgiLCJtYXRoTWluIiwiTWF0aCIsIm1pbiIsImRpc3BsYXlDb3VudCIsInJlcGxhY2UiLCJwYWdpbmF0aW9uIiwicGFnZUNvdW50IiwiY2VpbCIsInJhbmdlIiwia2V5cyIsImNvbmNhdCIsInNsaWNlIiwic29ydGVkRGF0YSIsImxvd2VyIiwic29ydGVkIiwicm93MSIsInJvdzIiLCJzb3J0YWJsZTEiLCJ0b0xvd2VyQ2FzZSIsInNvcnRhYmxlMiIsInBhZ2UiLCJzdGFydEluZGV4IiwibWFwIiwicm93IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiY2VsbFBhaXIiLCJjZWxsIiwic3BlY2lhbCIsInVuZGVmaW5lZCIsIiRlbWl0IiwiaGlkZGVuSW5wdXRzIiwiaW5wdXRzIiwiZm9yRWFjaCIsInZhbHVlcyIsImlzQXJyYXkiLCJoaWRkZW5JbnB1dCIsInB1c2giLCJyZWdleCIsImluZGV4IiwiaW5wdXQiLCJ2YWx1ZSIsIm1ldGhvZHMiLCJjaGFuZ2VQYWdlIiwiZGVsZXRlUm93Iiwicm93SW5kZXgiLCJwcm9tcHRUZXh0IiwiY29uZmlybSIsInVwZGF0ZURhdGEiLCIkcm93SW5kZXgiLCJuZXdEYXRhIiwidXBkYXRlU29ydCIsImNvbHVtbiIsIm9yZGVyYWJsZSIsInRvQXNjZW5kaW5nIiwidXBkYXRlQ29sdW1uIiwiY29sdW1uSW5kZXgiLCJuZXdDb2x1bW5zIiwic3BsaWNlIiwicm93Q2xhc3NlcyIsImNsYXNzZXMiLCJqb2luIiwiY3JlYXRlZCIsImNoYW5nZWQiLCJjb2x1bW5OYW1lIiwibmV3Q2VsbCIsIm5ld1JvdyIsIlZ1ZSIsInNldCIsImNsb25lQ2VsbCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb21wb25lbnQiLCJsYWJlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm1vdW50ZWQiLCJ0ZW1wbGF0ZSIsInJlbW92ZSIsIkJvb2xlYW4iLCJjaGVja2JveCIsIlN0cmluZyIsInVwZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL0Fzc2V0cy9TY3JpcHRzL2ljYmluLWRhdGF0YWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIFZ1ZSAqL1xyXG5cclxud2luZG93LmljYmluRGF0YVRhYmxlID0ge307XHJcblxyXG4vLyBldmVudHMgZW1pdHRlZDpcclxuLy8gLSBzcGVjaWFsKGNlbGwpOiBJZiB0aGUgY2VsbCBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgXCJzcGVjaWFsXCIgKHZhbHVlIGlzIG5vdCBudWxsIG9yXHJcbi8vICAgdW5kZWZpbmVkKSB0aGlzIGV2ZW50IGlzIGNhbGxlZCBpbnNpZGUgdGhlIHNvcnRlZERhdGEuIFRoaXMgZ2l2ZXMgYW4gb3Bwb3J0dW5pdHkgZm9yIHRoZVxyXG4vLyAgIGNsaWVudCBjb2RlIHRvIHVwZGF0ZSB0aGUgY2VsbCBkYXRhIChlLmcuIGJ5IHNldHRpbmcgdGhlIFwiY29tcG9uZW50XCIgYW5kIFwiaGlkZGVuSW5wdXRcIlxyXG4vLyAgIHByb3BlcnRpZXMpIHdpdGggZG9tYWluLXNwZWNpZmljIGJlaGF2aW9yIHdpdGhvdXQgaGF2aW5nIHRvIGVkaXQgdGhpcyBjb21wb25lbnQuXHJcbi8vIC0gdXBkYXRlKGRhdGEpOiBTZW5kcyB0aGUgbmV3IGRlc2lyZWQgdmFsdWUgb2YgdGhlIFwiZGF0YVwiIHByb3BlcnR5IHRvIHRoZSBwYXJlbnQuIEFsdGVybmF0aXZlbHlcclxuLy8gICB2LW1vZGVsIGNhbiBhbHNvIGJlIHVzZWQuXHJcbi8vIC0gY29sdW1uKGNvbHVtbnMpOiBTZW5kcyBhbiB1cGRhdGVkIGNvbHVtbnMgYXJyYXkgdG8gdGhlIHBhcmVudCBzbyBpdCBjYW4gcmVwbGFjZSB0aGUgY29sdW1ucyBwYXJhbWV0ZXIgd2l0aCBpdC5cclxuLy8gLSBjb21wb25lbnQocm93SW5kZXgsIGNvbHVtbk5hbWUsIHVzZXJEYXRhKTogUGFzc2VkIG9uIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudC4gSWYgaXQncyBhIGNvbHVtbiBoZWFkZXIgY29tcG9uZW50XHJcbi8vICAgdGhlbiBjb2x1bW5OYW1lIGlzIC0xLlxyXG4vL1xyXG4vLyBldmVudHMgcmVjZWl2ZWQ6XHJcbi8vIC0gZGVsZXRlKHByb21wdFRleHQpOiBjZWxsIGNvbXBvbmVudHMgbWF5IGVtaXQgdGhpcyBldmVudCB0byBzaWduYWwgYSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUgcm93XHJcbi8vICAgZnJvbSB0aGUgdGFibGUncyBkYXRhLiBPcHRpb25hbGx5IGEgbm9uLWVtcHR5IFN0cmluZyBtYXkgYmUgcGFzc2VkIGFzIGV2ZW50IGFyZ3VtZW50LiBJZiB0aGF0XHJcbi8vICAgaGFwcGVucywgYSBwcm9tcHQgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCB0byBjb25maXJtIHdpdGggdGhlIHVzZXIgdGhhdCB0aGV5XHJcbi8vICAgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSByb3cuXHJcbi8vIC0gdXBkYXRlKGRhdGEpOiBTYW1lIGFzIGFib3ZlLiBUaGUgY29tcG9uZW50IG1heSBoYXZlIGEgXCJkYXRhXCIgcHJvcGVydHkgZm9yIHRoaXMgcHVycG9zZS5cclxuLy8gLSBjb21wb25lbnQodXNlckRhdGEpOiBBIGNoaWxkIGNvbXBvbmVudCBtYXkgcmFpc2UgdGhpcyB0byBiZSBidWJibGVkIHVwIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG5cclxud2luZG93LmljYmluRGF0YVRhYmxlLnRhYmxlID0ge1xyXG4gICAgbmFtZTogJ2ljYmluLWRhdGF0YWJsZScsXHJcbiAgICBtb2RlbDoge1xyXG4gICAgICAgIHByb3A6ICdkYXRhJyxcclxuICAgICAgICBldmVudDogJ3VwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIC8vIFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICAkcm93SW5kZXg6IE51bWJlcixcclxuICAgICAgICAgICAgLy8gICAgIGNvbHVtbk5hbWU6IHtcclxuICAgICAgICAgICAgLy8gICAgICAgLy8gVGhlc2UgY2FuIGNvbWUgZnJvbSB0aGUgc2VydmVyOlxyXG4gICAgICAgICAgICAvLyAgICAgICB0ZXh0OiBTdHJpbmcsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGh0bWw6IFN0cmluZz8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGJhZGdlOiBTdHJpbmc/XHJcbiAgICAgICAgICAgIC8vICAgICAgIHNvcnQ6IEFueT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGhyZWY6IFN0cmluZz8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIG11bHRpcGxlTGlua3M6IHsgbGluazogU3RyaW5nLCB0ZXh0OiBTdHJpbmcgfT8gb3IgWyB7IGxpbms6IFN0cmluZywgdGV4dDogU3RyaW5nIH0gXT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHNwZWNpYWw6IEFueT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGhpZGRlbklucHV0OiB7IG5hbWU6IFN0cmluZywgdmFsdWU6IFN0cmluZyB9PyBvciBbIHsgbmFtZTogU3RyaW5nLCB2YWx1ZTogU3RyaW5nIH0gXT9cclxuICAgICAgICAgICAgLy8gICAgICAgLy8gVGhlc2UgY2FuIGJlIHNldCBpbiBKUyBjb2RlIChlLmcuIHdpdGggdGhlIFwic3BlY2lhbFwiIGV2ZW50KTpcclxuICAgICAgICAgICAgLy8gICAgICAgY29tcG9uZW50OiB7IG5hbWU6IFN0cmluZz8sIHZhbHVlOiBPYmplY3QgfT9cclxuICAgICAgICAgICAgLy8gICAgICAgcm93Q2xhc3NlczogU3RyaW5nP1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gXVxyXG4gICAgICAgICAgICAvLyBub3RlOiBUaGUgbmFtZSBhbmQgdmFsdWUgaW4gdGhlIGhpZGRlbklucHV0IHByb3BlcnRpZXMgbWF5IGNvbnRhaW4gdGhlIHt7IGluZGV4IH19IGV4cHJlc3Npb24gd2hpY2ggaXNcclxuICAgICAgICAgICAgLy8gICAgICAgc3Vic3RpdHV0ZWQgd2l0aCBhIHplcm8tYmFzZWQgaW5kZXggd2hlbiBnZW5lcmF0aW5nIHRoZSBoaWRkZW5JbnB1dHMgY29tcHV0ZWQgcHJvcGVydHkuXHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbnM6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGV4dDoge1xyXG4gICAgICAgICAgICAvLyBFeHBlY3RlZCBwcm9wZXJ0aWVzOiBsZW5ndGhQaWNrZXIsIGRpc3BsYXlDb3VudCwgcHJldmlvdXMsIG5leHQsIGFsbC5cclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTb3J0OiB7XHJcbiAgICAgICAgICAgIC8vIHsgbmFtZTogXCJjb2x1bW5OYW1lXCIsIGFzY2VuZGluZzogdHJ1ZSB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZhdWx0TGVuZ3RoOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgZGVmYXVsdDogMTAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZW5ndGhzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBbMTAsIDI1LCA1MCwgMTAwXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2luZzoge1xyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLFxyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgICAgICAgbGVuZ3RoOiAxMCxcclxuICAgICAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWwoc2VsZikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmxlbmd0aDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxlbmd0aFBpY2tlckJlZm9yZShzZWxmKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQubGVuZ3RoUGlja2VyLnNwbGl0KCd7eyBjb3VudCB9fScpWzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGVuZ3RoUGlja2VyQWZ0ZXIoc2VsZikge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHNlbGYudGV4dC5sZW5ndGhQaWNrZXIuc3BsaXQoJ3t7IGNvdW50IH19Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiAnJztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpc3BsYXlDb3VudFRleHQoc2VsZikge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBzZWxmLnBhZ2VJbmRleCAqIHNlbGYubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRoTWluID0gTWF0aC5taW4oaXRlbUluZGV4ICsgc2VsZi5sZW5ndGgsIHNlbGYudG90YWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0LmRpc3BsYXlDb3VudFxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmZyb21cXHMqfX0vLCBpdGVtSW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRvXFxzKn19LywgbWF0aE1pbiA9PT0gLTEgPyBzZWxmLnRvdGFsIDogbWF0aE1pbilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0b3RhbFxccyp9fS8sIHNlbGYudG90YWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnaW5hdGlvbihzZWxmKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnRvdGFsIDwgMSkgcmV0dXJuIFswXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHNlbGYubGVuZ3RoID4gMCA/IE1hdGguY2VpbChzZWxmLnRvdGFsIC8gc2VsZi5sZW5ndGgpIDogMTtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gWy4uLkFycmF5KHBhZ2VDb3VudCkua2V5cygpXTtcclxuICAgICAgICAgICAgaWYgKHNlbGYucGFnZUluZGV4ID4gMykge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBbMCwgJy4uLiddLmNvbmNhdChyYW5nZS5zbGljZShzZWxmLnBhZ2VJbmRleCAtIDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFnZUNvdW50IC0gc2VsZi5wYWdlSW5kZXggPiAzKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlLnNsaWNlKDAsIDUpLmNvbmNhdChbJy4uLicsIHBhZ2VDb3VudCAtIDFdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc29ydGVkRGF0YShzZWxmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvd2VyID0gc2VsZi5zb3J0LmFzY2VuZGluZyA/IC0xIDogMTtcclxuICAgICAgICAgICAgY29uc3Qgc29ydGVkID0gc2VsZi5maWx0ZXIoc2VsZi5kYXRhLmNvbmNhdCgpKSAvLyBUaGUgY29uY2F0IGVuc3VyZXMgdGhlIHNvcnQgY2FuJ3QgYWx0ZXIgdGhlIG9yaWdpbmFsLlxyXG4gICAgICAgICAgICAgICAgLnNvcnQoKHJvdzEsIHJvdzIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0YWJsZTEgPSByb3cxW3NlbGYuc29ydC5uYW1lXT8uc29ydCA/PyByb3cxW3NlbGYuc29ydC5uYW1lXT8udGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRhYmxlMiA9IHJvdzJbc2VsZi5zb3J0Lm5hbWVdPy5zb3J0ID8/IHJvdzJbc2VsZi5zb3J0Lm5hbWVdPy50ZXh0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0YWJsZTEgPCBzb3J0YWJsZTIpIHJldHVybiBsb3dlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUxID4gc29ydGFibGUyKSByZXR1cm4gLWxvd2VyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBzb3J0ZWQ7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnBhZ2luZyAmJiBzZWxmLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzZWxmLnBhZ2VJbmRleCAqIHNlbGYubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcGFnZSA9IHNvcnRlZC5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgc2VsZi5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFnZS5tYXAoKHJvdykgPT4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgLmVudHJpZXMocm93KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNlbGxQYWlyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCBjZWxsXSA9IGNlbGxQYWlyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwuc3BlY2lhbCAhPT0gbnVsbCAmJiBjZWxsLnNwZWNpYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsZXRzIHRoZSBjbGllbnQgY29kZSBhbHRlciB0aGUgY2VsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuJGVtaXQoJ3NwZWNpYWwnLCBjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuYW1lLCBjZWxsXTtcclxuICAgICAgICAgICAgICAgICAgICB9KSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGlkZGVuSW5wdXRzKHNlbGYpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXRzID0gW107XHJcblxyXG4gICAgICAgICAgICBzZWxmLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJvdylcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjZWxsKSA9PiB0eXBlb2YgY2VsbCA9PT0gJ29iamVjdCcgJiYgJ2hpZGRlbklucHV0JyBpbiBjZWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjZWxsKSA9PiAoQXJyYXkuaXNBcnJheShjZWxsLmhpZGRlbklucHV0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlucHV0cy5wdXNoKC4uLmNlbGwuaGlkZGVuSW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRzLnB1c2goY2VsbC5oaWRkZW5JbnB1dCkpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaW5kZXhcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSAve3tcXHMqaW5kZXhcXHMqfX0vO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dC5uYW1lLnJlcGxhY2UocmVnZXgsIGluZGV4KSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKHR5cGVvZiBpbnB1dC52YWx1ZSA9PT0gJ3N0cmluZycpID8gaW5wdXQudmFsdWUucmVwbGFjZShyZWdleCwgaW5kZXgpIDogaW5wdXQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRzO1xyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGNoYW5nZVBhZ2UocGFnZSkge1xyXG4gICAgICAgICAgICBpZiAocGFnZSA+PSAwICYmIHBhZ2UgPCB0aGlzLnRvdGFsKSB0aGlzLnBhZ2VJbmRleCA9IHBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVSb3cocm93SW5kZXgsIHByb21wdFRleHQpIHtcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuY29uZmlybShwcm9tcHRUZXh0KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEodGhpcy5kYXRhLmZpbHRlcigocm93KSA9PiByb3cuJHJvd0luZGV4ICE9PSByb3dJbmRleCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlRGF0YShuZXdEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIG5ld0RhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlU29ydChjb2x1bW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4ub3JkZXJhYmxlKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnNvcnQ7XHJcblxyXG4gICAgICAgICAgICAvLyBJdCBvbmx5IGdvZXMgdG8gZGVzY2VuZGluZyBvbiB0aGUgc2Vjb25kIGNsaWNrIG9mIHRoZSBzYW1lIGNvbHVtbiBoZWFkZXIuXHJcbiAgICAgICAgICAgIGNvbnN0IHRvQXNjZW5kaW5nID0gIShzb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHNvcnQuYXNjZW5kaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHNvcnQubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgICAgICBzb3J0LmFzY2VuZGluZyA9IHRvQXNjZW5kaW5nO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlQ29sdW1uKGNvbHVtbkluZGV4LCBjb2x1bW4pIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5jb25jYXQoKTtcclxuICAgICAgICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoY29sdW1uSW5kZXgsIDEsIGNvbHVtbik7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvbHVtbicsIG5ld0NvbHVtbnMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm93Q2xhc3Nlcyhyb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyb3cpLmZvckVhY2goKGNlbGwpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2VsbC5yb3dDbGFzc2VzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjZWxsLnJvd0NsYXNzZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKHJvd0luZGV4LCBjb2x1bW5OYW1lLCBuZXdDZWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4uc2VsZi5kYXRhW3Jvd0luZGV4XSB9O1xyXG4gICAgICAgICAgICBuZXdSb3dbY29sdW1uTmFtZV0gPSB7IC4uLm5ld0NlbGwgfTtcclxuICAgICAgICAgICAgVnVlLnNldChzZWxmLmRhdGEsIHJvd0luZGV4LCBuZXdSb3cpOyAvLyBSZWdlbmVyYXRlIHRoaXMgcm93IGZvciByZWFjdGl2aXR5LlxyXG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsb25lQ2VsbChjZWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSB7IC4uLmNlbGwgfTtcclxuICAgICAgICAgICAgZGVsZXRlIG5ld0NlbGwuc3BlY2lhbDtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLmRhdGEuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3cpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleVswXSAhPT0gJyQnKVxyXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2VsbD8uc3BlY2lhbD8udHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpYWwgPSBjZWxsLnNwZWNpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gY2xvbmVDZWxsKGNlbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuaGlkZGVuSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3BlY2lhbC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSghIXNwZWNpYWwudmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmNvbXBvbmVudCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLWNoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3BlY2lhbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFzcGVjaWFsLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogc3BlY2lhbC52YWx1ZSA9PT0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlczogc3BlY2lhbC5jbGFzc2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5zb3J0ID0gc3BlY2lhbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEocm93SW5kZXgsIGNvbHVtbk5hbWUsIG5ld0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY2hhbmdlZCkgdGhpcy51cGRhdGVEYXRhKHRoaXMuZGF0YSk7XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoc2VsZi5kZWZhdWx0U29ydCkge1xyXG4gICAgICAgICAgICBzZWxmLnNvcnQubmFtZSA9IHNlbGYuZGVmYXVsdFNvcnQubmFtZTtcclxuICAgICAgICAgICAgc2VsZi5zb3J0LmFzY2VuZGluZyA9IHNlbGYuZGVmYXVsdFNvcnQuYXNjZW5kaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZi5zb3J0Lm5hbWUgPSBzZWxmLmNvbHVtbnNbMF0ubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLmRlZmF1bHRMZW5ndGgpIHNlbGYubGVuZ3RoID0gc2VsZi5kZWZhdWx0TGVuZ3RoO1xyXG4gICAgfSxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNiaW5EYXRhdGFibGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNiaW5EYXRhdGFibGVfX2xlbmd0aFBpY2tlclwiIHYtaWY9XCJwYWdpbmdcIj5cclxuICAgICAgICAgICAge3sgbGVuZ3RoUGlja2VyQmVmb3JlIH19XHJcbiAgICAgICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cImxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImxlbmd0aE9wdGlvbiBpbiBsZW5ndGhzXCIgOnZhbHVlPVwibGVuZ3RoT3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgbGVuZ3RoT3B0aW9uID4gMCA/IGxlbmd0aE9wdGlvbiA6IHRleHQuYWxsIH19XHJcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIHt7IGxlbmd0aFBpY2tlckFmdGVyIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljYmluRGF0YXRhYmxlX19hYm92ZUhlYWRlclwiPjxzbG90Pjwvc2xvdD48L2Rpdj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVfX3RhYmxlIGRhdGFUYWJsZSByb3ctYm9yZGVyIHN0cmlwZSB0YWJsZSBkYXRhLXRhYmxlIG5vLWZvb3RlclwiIHJvbGU9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJkYXRhVGFibGVfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZGF0YVRhYmxlX19oZWFkZXJSb3dcIiByb2xlPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHYtZm9yPVwiKGNvbHVtbiwgY29sdW1uSW5kZXgpIGluIGNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGFUYWJsZV9faGVhZGVyQ2VsbCBkYXRhVGFibGVfX2NlbGwgc29ydGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jbGFzcy1uYW1lPVwiZGF0YVRhYmxlX19jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwic29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSA/IChzb3J0LmFzY2VuZGluZyA/ICdzb3J0aW5nX2FzYycgOiAnc29ydGluZ19kZXNjJykgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCInaWNiaW5EYXRhdGFibGVfX2NvbHVtbl8nICsgY29sdW1uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1vcmRlcmFibGU9XCIoISFjb2x1bW4ub3JkZXJhYmxlKS50b1N0cmluZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbmFtZT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtZGF0YT1cImNvbHVtbi50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiY29sdW1uLm9yZGVyYWJsZSAmJiB1cGRhdGVTb3J0KGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudCB2LWlmPVwiY29sdW1uLmNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlzPVwiY29sdW1uLmNvbXBvbmVudC5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjb2x1bW49XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZD1cImNvbHVtbi5jb21wb25lbnQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGU9XCJ1cGRhdGVDb2x1bW4oY29sdW1uSW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb21wb25lbnQ9XCIkZW1pdCgnY29tcG9uZW50JywgLTEsIGNvbHVtbiwgJGV2ZW50KVwiICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVRhYmxlc19zaXppbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImRhdGFUYWJsZV9fYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwiKHJvdywgcm93SW5kZXgpIGluIHNvcnRlZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YVRhYmxlX19yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCInaWNiaW5EYXRhdGFibGVfX3Jvd18nICsgcm93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIihyb3dJbmRleCAlIDIgPyAnZXZlbiAnIDogJ29kZCAnKSArIHJvd0NsYXNzZXMocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCB2LWZvcj1cIihjb2x1bW4sIGNvbHVtbkluZGV4KSBpbiBjb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cIidpY2JpbkRhdGF0YWJsZV9fY2VsbF8nICsgcm93SW5kZXggKyAneCcgKyBjb2x1bW5JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YVRhYmxlX19jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBzb3J0aW5nXzE6IHNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJjZWxsIGluIFtjb2x1bW4ubmFtZSBpbiByb3cgPyByb3dbY29sdW1uLm5hbWVdIDogeyB0ZXh0IDogJycgfV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wb25lbnQgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlzPVwiY2VsbC5jb21wb25lbnQubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpyb3ctaW5kZXg9XCJyb3cuJHJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbHVtbi1uYW1lPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWJpbmQ9XCJjZWxsLmNvbXBvbmVudC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVSb3cocm93LiRyb3dJbmRleCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGU9XCJ1cGRhdGVEYXRhKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29tcG9uZW50PVwiJGVtaXQoJ2NvbXBvbmVudCcsIHJvd0luZGV4LCBjb2x1bW4ubmFtZSwgJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWVsc2UtaWY9XCJjZWxsLmhyZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9XCJjZWxsLmhyZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwiY2VsbC5iYWRnZSA/ICgnYmFkZ2UgYmFkZ2UtJyArIGNlbGwuYmFkZ2UpIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiY2VsbC5tdWx0aXBsZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1mb3I9XCIobGluaywgaW5kZXgpIGluIGNlbGwubXVsdGlwbGVMaW5rc1wiIDpocmVmPVwibGluay51cmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjZWxsLm11bHRpcGxlTGlua3MubGVuZ3RoID4gMSAmJiBjZWxsLm11bHRpcGxlTGlua3MubGVuZ3RoICE9IGluZGV4ICsgMVwiPiwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJjZWxsLmh0bWxcIiB2LWh0bWw9XCJjZWxsLmh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZSA6Y2xhc3M9XCJjZWxsLmJhZGdlID8gKCdiYWRnZSBiYWRnZS0nICsgY2VsbC5iYWRnZSkgOiAnJ1wiPnt7IGNlbGwudGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY2JpbkRhdGF0YWJsZV9fZm9vdGVyXCIgdi1pZj1cInBhZ2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljYmluRGF0YXRhYmxlX19kaXNwbGF5Q291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5Q291bnRUZXh0IH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY2JpbkRhdGF0YWJsZV9fcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVRhYmxlc19wYWdpbmF0ZSBwYWdpbmdfc2ltcGxlX251bWJlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnaW5hdGVfYnV0dG9uIHBhZ2UtaXRlbSBwcmV2aW91c1wiIDpjbGFzcz1cInsgZGlzYWJsZWQ6IHBhZ2VJbmRleCA8IDEgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgQGNsaWNrPVwiY2hhbmdlUGFnZShwYWdlSW5kZXggLSAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0LnByZXZpb3VzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSB2LWZvcj1cInBhZ2UgaW4gcGFnaW5hdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdpbmF0ZV9idXR0b24gcGFnZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogcGFnZSA9PT0gcGFnZUluZGV4IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWlmPVwicGFnZSAhPT0gJy4uLidcIiBjbGFzcz1cInBhZ2UtbGlua1wiIEBjbGljaz1cImNoYW5nZVBhZ2UocGFnZSlcIj57eyBwYWdlICsgMSB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWVsc2UgY2xhc3M9XCJwYWdlLWxpbmtcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnaW5hdGVfYnV0dG9uIHBhZ2UtaXRlbSBuZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGRpc2FibGVkOiAoKHBhZ2VJbmRleCArIDEpICogbGVuZ3RoKSA+PSB0b3RhbCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBAY2xpY2s9XCJjaGFuZ2VQYWdlKHBhZ2VJbmRleCArIDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBoaWRkZW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCB2LWZvcj1cImhpZGRlbklucHV0IGluIGhpZGRlbklucHV0c1wiXHJcbiAgICAgICAgICAgICAgICAgICA6a2V5PVwiaGlkZGVuSW5wdXQubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICA6bmFtZT1cImhpZGRlbklucHV0Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgOnZhbHVlPVwiaGlkZGVuSW5wdXQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YCxcclxufTtcclxuXHJcbndpbmRvdy5pY2JpbkRhdGFUYWJsZS5yZW1vdmUgPSB7XHJcbiAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLXJlbW92ZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRleHQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXHJcbiAgICB9LFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgOmNsYXNzPVwieyAnaWNiaW5EYXRhdGFibGVSZW1vdmUnOiB0cnVlLCBkaXNhYmxlZDogZGlzYWJsZWQgfVwiXHJcbiAgICAgICBAY2xpY2s9XCIhZGlzYWJsZWQgJiYgJGVtaXQoJ2RlbGV0ZScsIHRleHQucHJvbXB0KVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiPjwvaT5cclxuICAgICAgICB7eyB0ZXh0LnJlbW92ZSB9fVxyXG4gICAgPC9hPmAsXHJcbn07XHJcblxyXG53aW5kb3cuaWNiaW5EYXRhVGFibGUuY2hlY2tib3ggPSB7XHJcbiAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLWNoZWNrYm94JyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgZGF0YTogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgICByb3dJbmRleDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgY29sdW1uTmFtZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgbGFiZWw6IHsgZGVmYXVsdDogJycgfSxcclxuICAgICAgICBjaGVja2VkOiB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9LFxyXG4gICAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXHJcbiAgICAgICAgY2xhc3NlczogeyBkZWZhdWx0OiAnJyB9LFxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGUoY2hlY2tlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5kYXRhLmZpbHRlcigocm93KSA9PiByb3cuJHJvd0luZGV4ID09PSB0aGlzLnJvd0luZGV4KVswXVt0aGlzLmNvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICBjZWxsLmNvbXBvbmVudC52YWx1ZS5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgY2VsbC5oaWRkZW5JbnB1dC52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCEhY2hlY2tlZCk7XHJcbiAgICAgICAgICAgIGNlbGwuc29ydCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvbmVudCcsICdjaGVja2VkJyk7XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy4kZW1pdCgnY29tcG9uZW50JywgJ2NoZWNrZWQnKTtcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGxhYmVsIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVDaGVja2JveF9fY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIDpjaGVja2VkPVwiY2hlY2tlZFwiXHJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgOmNsYXNzPVwiY2xhc3Nlc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVDaGVja2JveFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIEBjaGFuZ2U9XCJ1cGRhdGUoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPlxyXG4gICAgICAgIDxzcGFuIHYtaWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5gLFxyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUFBLE1BQU0sQ0FBQ0MsY0FBUCxHQUF3QixFQUF4QixDLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBRCxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLEtBQXRCLEdBQThCO0VBQzFCQyxJQUFJLEVBQUUsaUJBRG9CO0VBRTFCQyxLQUFLLEVBQUU7SUFDSEMsSUFBSSxFQUFFLE1BREg7SUFFSEMsS0FBSyxFQUFFO0VBRkosQ0FGbUI7RUFNMUJDLEtBQUssRUFBRTtJQUNIQyxJQUFJLEVBQUU7TUFDRjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQUMsSUFBSSxFQUFFQyxLQXRCSjtNQXVCRkMsUUFBUSxFQUFFO0lBdkJSLENBREg7SUEwQkhDLE9BQU8sRUFBRTtNQUNMSCxJQUFJLEVBQUVDLEtBREQ7TUFFTEMsUUFBUSxFQUFFO0lBRkwsQ0ExQk47SUE4QkhFLElBQUksRUFBRTtNQUNGO01BQ0FKLElBQUksRUFBRUssTUFGSjtNQUdGSCxRQUFRLEVBQUU7SUFIUixDQTlCSDtJQW1DSEksV0FBVyxFQUFFO01BQ1Q7TUFDQUMsT0FBTyxFQUFFO0lBRkEsQ0FuQ1Y7SUF1Q0hDLGFBQWEsRUFBRTtNQUNYUixJQUFJLEVBQUVTLE1BREs7TUFF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 \ No newline at end of file diff --git a/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js b/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js index 74332ad29..1dcd5e6a4 100644 --- a/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js +++ b/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js @@ -5,4 +5,5 @@ jQuery(function ($) { var options = this.getAttribute('data-options'); $(this).dataTable(options ? JSON.parse(options) : undefined); }); -}); \ No newline at end of file +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqUXVlcnkiLCIkIiwiZWFjaCIsImRhdGFUYWJsZUVhY2giLCJvcHRpb25zIiwiZ2V0QXR0cmlidXRlIiwiZGF0YVRhYmxlIiwiSlNPTiIsInBhcnNlIiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vQXNzZXRzL1NjcmlwdHMvanF1ZXJ5LWRhdGF0YWJsZXMtYXV0b2luaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsialF1ZXJ5KCgkKSA9PiB7XHJcbiAgICAkKCd0YWJsZS5kYXRhLXRhYmxlJykuZWFjaChmdW5jdGlvbiBkYXRhVGFibGVFYWNoKCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1vcHRpb25zJyk7XHJcbiAgICAgICAgJCh0aGlzKS5kYXRhVGFibGUob3B0aW9ucyA/IEpTT04ucGFyc2Uob3B0aW9ucykgOiB1bmRlZmluZWQpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUFBLE1BQU0sQ0FBQyxVQUFDQyxDQUFELEVBQU87RUFDVkEsQ0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0JDLElBQXRCLENBQTJCLFNBQVNDLGFBQVQsR0FBeUI7SUFDaEQsSUFBTUMsT0FBTyxHQUFHLEtBQUtDLFlBQUwsQ0FBa0IsY0FBbEIsQ0FBaEI7SUFDQUosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRSyxTQUFSLENBQWtCRixPQUFPLEdBQUdHLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixPQUFYLENBQUgsR0FBeUJLLFNBQWxEO0VBQ0gsQ0FIRDtBQUlILENBTEssQ0FBTiJ9 \ No newline at end of file diff --git a/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js b/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js index a48227def..9c4f65e09 100644 --- a/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js +++ b/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js @@ -1,6 +1,6 @@ "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 _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } /** * @summary Lombiq - Data Tables @@ -291,7 +291,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi function exportAction(exportAll) { return function getExports() { - window.location.href = URI(plugin.settings["export"].api).search({ + window.location.href = URI(plugin.settings.export.api).search({ requestJson: stateJson, exportAll: exportAll }); @@ -300,10 +300,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi function getExportButtons() { return [{ - text: plugin.settings["export"].textAll, + text: plugin.settings.export.textAll, action: exportAction(true) }, { - text: plugin.settings["export"].textVisible, + text: plugin.settings.export.textVisible, action: exportAction(false) }]; } @@ -560,4 +560,5 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi return $.data(this, 'plugin_' + pluginName); }); }; -})(jQuery, window, document, window.history); \ No newline at end of file +})(jQuery, window, document, window.history); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb21iaXFEYXRhdGFibGVzIiwiJCIsIndpbmRvdyIsImRvY3VtZW50IiwiaGlzdG9yeSIsInBsdWdpbk5hbWUiLCJ1c2VEZWZhdWx0QnV0dG9ucyIsImRlZmF1bHRzIiwiZGF0YVRhYmxlc09wdGlvbnMiLCJzZWFyY2hpbmciLCJwYWdpbmciLCJwcm9jZXNzaW5nIiwiaW5mbyIsImxlbmd0aENoYW5nZSIsInNjcm9sbFgiLCJkb20iLCJidXR0b25zIiwicm93Q2xhc3NOYW1lIiwicXVlcnlJZCIsImRhdGFQcm92aWRlciIsInJvd3NBcGlVcmwiLCJzZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCIsInF1ZXJ5U3RyaW5nUGFyYW1ldGVyc0xvY2FsU3RvcmFnZUtleSIsInRlbXBsYXRlcyIsImVycm9yc1NlbGVjdG9yIiwiY2hpbGRSb3dPcHRpb25zIiwiY2hpbGRSb3dzRW5hYmxlZCIsImFzeW5jTG9hZGluZyIsImFwaVVybCIsImNoaWxkUm93RGlzcGxheVR5cGUiLCJhZGRpdGlvbmFsRGF0YVRhYmxlc09wdGlvbnMiLCJjb2x1bW5EZWZzIiwib3JkZXJhYmxlIiwidGFyZ2V0cyIsIm9yZGVyIiwiY2hpbGRSb3dDbGFzc05hbWUiLCJ0b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZSIsImNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSIsInByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMiLCJwcm9ncmVzc2l2ZUxvYWRpbmdFbmFibGVkIiwic2tpcCIsImJhdGNoU2l6ZSIsImZpbmlzaGVkQ2FsbGJhY2siLCJiYXRjaENhbGxiYWNrIiwiaXRlbUNhbGxiYWNrIiwiY2FsbGJhY2tzIiwiYWpheERhdGFMb2FkZWRDYWxsYmFjayIsIlBsdWdpbiIsImVsZW1lbnQiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJleHRlbmQiLCJfZGVmYXVsdHMiLCJfbmFtZSIsImluaXQiLCJwcm90b3R5cGUiLCJkYXRhVGFibGVFbGVtZW50IiwiZGF0YVRhYmxlQXBpIiwib3JpZ2luYWxRdWVyeVN0cmluZ1BhcmFtZXRlcnMiLCJwbHVnaW4iLCJzdGF0ZUpzb24iLCJjdXN0b21pemVBamF4UGFyYW1ldGVycyIsImN1c3RvbWl6ZVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiVVJJIiwic2VhcmNoIiwicm93Q2FsbGJhY2siLCJkYXRhVGFibGVzUm93Q2FsbGJhY2siLCJyb3ciLCJkYXRhIiwiaWQiLCJhZGRDbGFzcyIsImF0dHIiLCJjb252ZXJ0RGF0ZSIsImRhdGUiLCJsb2NhbGUiLCJjdWx0dXJlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwicmVuZGVyIiwidGV4dHMiLCJ5ZXMiLCJubyIsImlzQXJyYXkiLCJqb2luIiwiaXNTdHJpbmciLCJtYXRjaCIsIkRhdGUiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInRlbXBsYXRlRGF0YSIsInJlcGxhY2UiLCJUeXBlIiwiVXJsIiwiVGV4dCIsIlllYXIiLCJNb250aCIsIkRheSIsIm9yaWdpbmFsSW5pdENvbXBsZXRlSGFuZGxlciIsImluaXRDb21wbGV0ZSIsImVtcHR5RnVuY3Rpb24iLCJkYXRhVGFibGVzSW5pdENvbXBsZXRlIiwiYWRqdXN0Q29sdW1ucyIsImFwcGx5IiwicHVzaCIsImRlZmF1bHRDb250ZW50IiwicHJvdmlkZXJOYW1lIiwibG9jYXRpb24iLCJocmVmIiwiaW5jbHVkZXMiLCIkZWxlbWVudCIsImxhdGVzdERyYXciLCJzZXJ2ZXJTaWRlIiwiaXNIaXN0b3J5IiwiaXNSZWRyYXciLCJpc0ZpcnN0IiwiZ2V0SnNvblBhcmFtZXRlcnMiLCJwYXJhbXMiLCJpbnRlcm5hbFBhcmFtZXRlcnMiLCJjbGVhblVwRGF0YVRhYmxlc0FqYXhQYXJhbWV0ZXJzIiwiZXh0ZW5kZWRQYXJhbWV0ZXJzIiwib3JpZ2luYWxVcmwiLCJqc29uUGFyYW1ldGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJrZXkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiZXhjZXB0aW9uIiwiaW5uZXJFeGNlcHRpb24iLCJoaWRlIiwiYWxlcnQiLCJjcmVhdGVIaXN0b3J5U3RhdGUiLCJzdGF0ZSIsIkRhdGFUYWJsZSIsInVzZXJFdmVudCIsInRyaWdnZXIiLCJvbiIsInB1c2hTdGF0ZSIsInRpdGxlIiwiZXZlbnQiLCJvcmlnaW5hbEV2ZW50IiwiY2FuY2VsIiwiYWpheCIsInJlbG9hZCIsInBhZ2VBY2Nlc3NlZEJ5UmVsb2FkIiwicGVyZm9ybWFuY2UiLCJuYXZpZ2F0aW9uIiwidHlwZSIsImdldEVudHJpZXNCeVR5cGUiLCJtYXAiLCJuYXYiLCJkYXRhVGFibGVzT3B0aW9uc0FqYXgiLCJjYWxsYmFjayIsImlzTmV3UmVxdWVzdCIsInBhcnNlIiwicmVwbGFjZVN0YXRlIiwicmVxdWVzdERhdGEiLCJkcmF3IiwiJHdyYXBwZXIiLCJjbG9zZXN0IiwiaW5zdGFuY2UiLCJmaW5kIiwidmFsIiwidmFsdWUiLCJsZW5ndGgiLCJtZXRob2QiLCJ1cmwiLCJidWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyIsInJlcXVlc3RKc29uIiwic3VjY2VzcyIsInJlc3BvbnNlIiwicGFnZSIsInN0YXJ0IiwibGVuIiwiZXhwb3J0QWN0aW9uIiwiZXhwb3J0QWxsIiwiZ2V0RXhwb3J0cyIsImV4cG9ydCIsImFwaSIsImdldEV4cG9ydEJ1dHRvbnMiLCJ0ZXh0IiwidGV4dEFsbCIsImFjdGlvbiIsInRleHRWaXNpYmxlIiwiZm9yRWFjaCIsImJ1dHRvbiIsImZuIiwiZGF0YVRhYmxlIiwiZXh0IiwiZXJyTW9kZSIsImUiLCJ0ZWNoTm90ZSIsIm1lc3NhZ2UiLCJzaG93IiwiZGF0YVRhYmxlRWxlbWVudE9uQ2xpY2siLCJwYXJlbnRSb3dFbGVtZW50IiwiY29udGVudEl0ZW1JZCIsImVycm9yIiwidG9nZ2xlQ2hpbGRSb3ciLCJjb250ZW50IiwiY2hpbGRSb3dDb250ZW50IiwiaHRtbCIsImZldGNoUm93c1Byb2dyZXNzaXZlbHkiLCJpIiwib3JkZXJEYXRhIiwiY29sdW1uSW5kZXgiLCJjb2x1bW4iLCJjb2x1bW5zIiwibmFtZSIsImRpcmVjdGlvbiIsImRpciIsImNvbHVtbkZpbHRlcnMiLCJqIiwiZGF0YVRhYmxlUm93IiwiY2hpbGQiLCJpc1Nob3duIiwicmVtb3ZlQ2xhc3MiLCJhZGQiLCJ0b3RhbCIsInByb2dyZXNzaXZlTG9hZCIsIm9yaWdpbmFsUXVlcnlTdHJpbmdFbmNvZGVkIiwicGFyYW0iLCJsb2FkUm93cyIsImZhaWwiLCJzZXRUaW1lb3V0IiwiYWRqdXN0IiwiY291bnQiLCJlYWNoIiwiaW5kZXgiLCJwbHVnaW5OYW1lRnVuY3Rpb24iLCJwbHVnaW5NYXBGdW5jdGlvbiIsImpRdWVyeSJdLCJzb3VyY2VzIjpbIi4uLy4uL0Fzc2V0cy9TY3JpcHRzL2xvbWJpcS1kYXRhdGFibGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAc3VtbWFyeSAgICAgTG9tYmlxIC0gRGF0YSBUYWJsZXNcclxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0aW9uIG92ZXIgdGhlIGpRdWVyeS5EYXRhVGFibGVzIHBsdWdpbiB0byBkaXNwbGF5IFF1ZXJ5IHJlc3VsdHMgaW4gYSBkYXRhIHRhYmxlLlxyXG4gKiBAdmVyc2lvbiAgICAgMS4wXHJcbiAqIEBmaWxlICAgICAgICBsb21iaXEtZGF0YXRhYmxlcy5qc1xyXG4gKiBAYXV0aG9yICAgICAgTG9tYmlxIFRlY2hub2xvZ2llcyBMdGQuXHJcbiAqL1xyXG5cclxuLyogZ2xvYmFsIFVSSSAqL1xyXG5cclxuKGZ1bmN0aW9uIGxvbWJpcURhdGF0YWJsZXMoJCwgd2luZG93LCBkb2N1bWVudCwgaGlzdG9yeSkge1xyXG4gICAgY29uc3QgcGx1Z2luTmFtZSA9ICdsb21iaXFfRGF0YVRhYmxlcyc7XHJcbiAgICBjb25zdCB1c2VEZWZhdWx0QnV0dG9ucyA9ICd1c2VEZWZhdWx0QnV0dG9ucyc7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgZGF0YVRhYmxlc09wdGlvbnM6IHtcclxuICAgICAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBwYWdpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGluZm86IHRydWUsXHJcbiAgICAgICAgICAgIGxlbmd0aENoYW5nZTogdHJ1ZSxcclxuICAgICAgICAgICAgc2Nyb2xsWDogdHJ1ZSxcclxuICAgICAgICAgICAgZG9tOiBcIjwncm93IGRhdGFUYWJsZXNfYnV0dG9ucyc8J2NvbC1tZC0xMidCPj5cIiArXHJcbiAgICAgICAgICAgICAgICBcIjwncm93IGRhdGFUYWJsZXNfY29udHJvbHMnPCdjb2wtbWQtNiBkYXRhVGFibGVzX2xlbmd0aCdsPjwnY29sLW1kLTYgZGF0YVRhYmxlc19zZWFyY2gnZj4+XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8J3JvdyBkYXRhVGFibGVzX2NvbnRlbnQnPCdjb2wtbWQtMTIndD4+XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8J3JvdyBkYXRhVGFibGVzX2Zvb3Rlcic8J2NvbC1tZC0xMidpcD4+XCIsXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6IHVzZURlZmF1bHRCdXR0b25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm93Q2xhc3NOYW1lOiAnJyxcclxuICAgICAgICBxdWVyeUlkOiAnJyxcclxuICAgICAgICBkYXRhUHJvdmlkZXI6ICcnLFxyXG4gICAgICAgIHJvd3NBcGlVcmw6ICcnLFxyXG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmdFbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnNMb2NhbFN0b3JhZ2VLZXk6ICcnLFxyXG4gICAgICAgIHRlbXBsYXRlczoge30sXHJcbiAgICAgICAgZXJyb3JzU2VsZWN0b3I6IG51bGwsXHJcbiAgICAgICAgY2hpbGRSb3dPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGNoaWxkUm93c0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhc3luY0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBhcGlVcmw6ICcnLFxyXG4gICAgICAgICAgICBjaGlsZFJvd0Rpc3BsYXlUeXBlOiAnJyxcclxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGFUYWJsZXNPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5EZWZzOiBbeyBvcmRlcmFibGU6IGZhbHNlLCB0YXJnZXRzOiAwIH1dLFxyXG4gICAgICAgICAgICAgICAgb3JkZXI6IFtbMSwgJ2FzYyddXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2hpbGRSb3dDbGFzc05hbWU6ICcnLFxyXG4gICAgICAgICAgICB0b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZTogJycsXHJcbiAgICAgICAgICAgIGNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBza2lwOiAwLFxyXG4gICAgICAgICAgICBiYXRjaFNpemU6IDAsXHJcbiAgICAgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgICAgYmF0Y2hDYWxsYmFjazogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgICBpdGVtQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbGxiYWNrczoge1xyXG4gICAgICAgICAgICBhamF4RGF0YUxvYWRlZENhbGxiYWNrOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gUGx1Z2luKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRzID0gZGVmYXVsdHM7XHJcbiAgICAgICAgdGhpcy5fbmFtZSA9IHBsdWdpbk5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgICQuZXh0ZW5kKFBsdWdpbi5wcm90b3R5cGUsIHtcclxuICAgICAgICBkYXRhVGFibGVFbGVtZW50OiBudWxsLFxyXG4gICAgICAgIGRhdGFUYWJsZUFwaTogbnVsbCxcclxuICAgICAgICBvcmlnaW5hbFF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogSW5pdGlhbGl6ZXMgdGhlIExvbWJpcSBEYXRhVGFibGUgcGx1Z2luIHdoZXJlIHRoZSBqUXVlcnkgRGF0YVRhYmxlcyBwbHVnaW4gd2lsbCBiZSBhbHNvIGluaXRpYWxpemVkLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG4gICAgICAgICAgICBsZXQgc3RhdGVKc29uID0gJ3t9JztcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5jdXN0b21pemVBamF4UGFyYW1ldGVycyA9IGZ1bmN0aW9uIGN1c3RvbWl6ZVBhcmFtZXRlcnMocGFyYW1ldGVycykgeyByZXR1cm4gcGFyYW1ldGVyczsgfTtcclxuICAgICAgICAgICAgcGx1Z2luLm9yaWdpbmFsUXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gbmV3IFVSSSgpLnNlYXJjaCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWJsZXNPcHRpb25zID0gJC5leHRlbmQoe30sIHBsdWdpbi5zZXR0aW5ncy5kYXRhVGFibGVzT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5yb3dDYWxsYmFjayA9IGZ1bmN0aW9uIGRhdGFUYWJsZXNSb3dDYWxsYmFjayhyb3csIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhwbHVnaW4uc2V0dGluZ3Mucm93Q2xhc3NOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1jb250ZW50aXRlbWlkJywgZGF0YS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxlID0gJ2VuLVVTJztcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuY3VsdHVyZSkgbG9jYWxlID0gcGx1Z2luLnNldHRpbmdzLmN1bHR1cmU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ29uZGl0aW9uYWwgcmVuZGVyZXIuXHJcbiAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLmNvbHVtbkRlZnMgPSBbe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0czogJ19hbGwnLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGF0YSBpcyBCb29sZWFuLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSAhIWRhdGEpIHJldHVybiBkYXRhID8gcGx1Z2luLnNldHRpbmdzLnRleHRzLnllcyA6IHBsdWdpbi5zZXR0aW5ncy50ZXh0cy5ubztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgSVNPIGRhdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWF0Y2goL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuP1xcZCooWystXVswLTJdXFxkOlswLTVdXFxkfFopLykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnREYXRlKG5ldyBEYXRlKGRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYSB0ZW1wbGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGlzU3RyaW5nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tYXRjaCgvXlxccyp7e1xccyooW146XSspXFxzKjpcXHMqKFtefV0qW14gXFx0fV0pXFxzKn19XFxzKiQvKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlWzFdICYmIHRlbXBsYXRlWzJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZVsyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFUYWJsZXNPcHRpb25zLnRlbXBsYXRlc1t0ZW1wbGF0ZU5hbWVdLnJlcGxhY2UoL3t7XFxzKmRhdGFcXHMqfX0vZywgdGVtcGxhdGVEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0V4cG9ydExpbmsnOiByZXR1cm4gJzxhIGhyZWY9XCInICsgZGF0YS5VcmwgKyAnXCI+JyArIGRhdGEuVGV4dCArICc8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRXhwb3J0RGF0ZSc6IHJldHVybiBjb252ZXJ0RGF0ZShuZXcgRGF0ZShkYXRhLlllYXIsIGRhdGEuTW9udGggLSAxLCBkYXRhLkRheSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9XTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIHByb3Blcmx5IGFkanVzdCBjb2x1bW4gd2lkdGhzLlxyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEluaXRDb21wbGV0ZUhhbmRsZXIgPSBkYXRhVGFibGVzT3B0aW9ucy5pbml0Q29tcGxldGVcclxuICAgICAgICAgICAgICAgID8gZGF0YVRhYmxlc09wdGlvbnMuaW5pdENvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7IH07XHJcbiAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLmluaXRDb21wbGV0ZSA9IGZ1bmN0aW9uIGRhdGFUYWJsZXNJbml0Q29tcGxldGUoKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uYWRqdXN0Q29sdW1ucygpO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxJbml0Q29tcGxldGVIYW5kbGVyLmFwcGx5KHRoaXMpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5zZXR0aW5ncy5jaGlsZFJvd09wdGlvbnMuY2hpbGRSb3dzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMub3JkZXIgPSBbWzEsICdhc2MnXV07XHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5jb2x1bW5EZWZzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICc8ZGl2IGNsYXNzPVwiYnRuIGJ1dHRvbiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy50b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZSArICdcIj48L2Rpdj4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IDAsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJOYW1lID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9BZG1pbi9EYXRhVGFibGUvJylcclxuICAgICAgICAgICAgICAgID8gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvLipcXC9BZG1pblxcL0RhdGFUYWJsZVxcLyhbXi8/XSspWy8/XS4qLywgJyQxJylcclxuICAgICAgICAgICAgICAgIDogVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2godHJ1ZSkucHJvdmlkZXJOYW1lO1xyXG4gICAgICAgICAgICBwbHVnaW4ucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xyXG5cclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzZXJ2ZXItc2lkZSBwYWdpbmcgdW5sZXNzIHByb2dyZXNzaXZlIGxvYWRpbmcgaXMgZW5hYmxlZC5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5zZXR0aW5ncy5zZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgIXBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLnByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChwbHVnaW4uZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGxhdGVzdERyYXcgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLnNlcnZlclNpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNIaXN0b3J5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc1JlZHJhdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0SnNvblBhcmFtZXRlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxQYXJhbWV0ZXJzID0gcGx1Z2luLmNsZWFuVXBEYXRhVGFibGVzQWpheFBhcmFtZXRlcnMocGFyYW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRQYXJhbWV0ZXJzID0gcGx1Z2luLmN1c3RvbWl6ZUFqYXhQYXJhbWV0ZXJzKCQuZXh0ZW5kKHt9LCBpbnRlcm5hbFBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlJZDogcGx1Z2luLnNldHRpbmdzLnF1ZXJ5SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uUGFyYW1ldGVycyA9IEpTT04uc3RyaW5naWZ5KGV4dGVuZGVkUGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVKc29uID0ganNvblBhcmFtZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MucXVlcnlTdHJpbmdQYXJhbWV0ZXJzTG9jYWxTdG9yYWdlS2V5ICYmICdsb2NhbFN0b3JhZ2UnIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwbHVnaW4uc2V0dGluZ3MucXVlcnlTdHJpbmdQYXJhbWV0ZXJzTG9jYWxTdG9yYWdlS2V5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwganNvblBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlW2tleV0gPSBqc29uUGFyYW1ldGVycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChpbm5lckV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGxvY2FsU3RvcmFnZSB3b24ndCB3b3JrIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuZXJyb3JzU2VsZWN0b3IpICQocGx1Z2luLnNldHRpbmdzLmVycm9yc1NlbGVjdG9yKS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghanNvblBhcmFtZXRlcnMgfHwgIWpzb25QYXJhbWV0ZXJzLm1hdGNoIHx8IGpzb25QYXJhbWV0ZXJzLm1hdGNoKC9eXFxzKiQvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnanNvblBhcmFtZXRlcnMgaXMgbnVsbCBvciBlbXB0eSFcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJhbXM6XFxuJyArIEpTT04uc3RyaW5naWZ5KHBhcmFtcykgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZXJuYWxQYXJhbWV0ZXJzOlxcbicgKyBKU09OLnN0cmluZ2lmeShpbnRlcm5hbFBhcmFtZXRlcnMpICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVuZGVkUGFyYW1ldGVyczpcXG4nICsgSlNPTi5zdHJpbmdpZnkoZXh0ZW5kZWRQYXJhbWV0ZXJzKSArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqc29uUGFyYW1ldGVyczpcXG4nICsgSlNPTi5zdHJpbmdpZnkoanNvblBhcmFtZXRlcnMpICsgJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvblBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUhpc3RvcnlTdGF0ZSA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyTmFtZTogcHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogJGVsZW1lbnQuRGF0YVRhYmxlKCkub3JkZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyRXZlbnQgPSB7IHBsdWdpbiwgc3RhdGUgfTtcclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC50cmlnZ2VyKCdjcmVhdGVzdGF0ZS5sb21iaXFkdCcsIHVzZXJFdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyRXZlbnQuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICRlbGVtZW50Lm9uKCdwcmVYaHIuZHQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5oaXN0b3J5LmlzRmlyc3QgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkuaXNIaXN0b3J5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzUmVkcmF3IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnN0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoY3JlYXRlSGlzdG9yeVN0YXRlKCksIGRvY3VtZW50LnRpdGxlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQod2luZG93KS5vbigncG9wc3RhdGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUucHJvdmlkZXJOYW1lIHx8IHN0YXRlLnByb3ZpZGVyTmFtZSAhPT0gcHJvdmlkZXJOYW1lKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzSGlzdG9yeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckV2ZW50ID0geyBwbHVnaW46IHBsdWdpbiwgc3RhdGU6IHN0YXRlLCBjYW5jZWw6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQudHJpZ2dlcigncG9wc3RhdGUubG9tYmlxZHQnLCB1c2VyRXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXNlckV2ZW50LmNhbmNlbCkgJGVsZW1lbnQuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaGlzdG9yeS5pc0hpc3RvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTAwNDk3OC9jaGVjay1pZi1wYWdlLWdldHMtcmVsb2FkZWQtb3ItcmVmcmVzaGVkLWluLWphdmFzY3JpcHQvNTMzMDc1ODgjNTMzMDc1ODhcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VBY2Nlc3NlZEJ5UmVsb2FkID0gd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24/LnR5cGUgPT09IDEgfHxcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbnRyaWVzQnlUeXBlKCduYXZpZ2F0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgobmF2KSA9PiBuYXYudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCdyZWxvYWQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5hamF4ID0gZnVuY3Rpb24gZGF0YVRhYmxlc09wdGlvbnNBamF4KHBhcmFtcywgY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc05ld1JlcXVlc3QgPSBwYWdlQWNjZXNzZWRCeVJlbG9hZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaGlzdG9yeS5zdGF0ZSAhPT0gJ29iamVjdCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWhpc3Rvcnkuc3RhdGU/LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmV3UmVxdWVzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShnZXRKc29uUGFyYW1ldGVycyhwYXJhbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY3JlYXRlSGlzdG9yeVN0YXRlKGRhdGEpLCBkb2N1bWVudC50aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9ICQuZXh0ZW5kKHt9LCBoaXN0b3J5LnN0YXRlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOZXdSZXF1ZXN0KSByZXF1ZXN0RGF0YS5kcmF3ID0gKGxhdGVzdERyYXcgPz8gMCkgKyAzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkd3JhcHBlciA9ICRlbGVtZW50LmNsb3Nlc3QoJy5kYXRhVGFibGVzX3dyYXBwZXInKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9ICRlbGVtZW50LkRhdGFUYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICR3cmFwcGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCcuZGF0YVRhYmxlc19maWx0ZXIgaW5wdXRbdHlwZT1cInNlYXJjaFwiXVthcmlhLWNvbnRyb2xzPVwiZGF0YVRhYmxlXCJdJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChyZXF1ZXN0RGF0YS5zZWFyY2g/LnZhbHVlID8/ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmRhdGFUYWJsZXNfbGVuZ3RoIHNlbGVjdFthcmlhLWNvbnRyb2xzPVwiZGF0YVRhYmxlXCJdJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChyZXF1ZXN0RGF0YS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLm9yZGVyKGhpc3Rvcnkuc3RhdGUub3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlYXJjaChoaXN0b3J5LnN0YXRlPy5kYXRhPy5zZWFyY2g/LnZhbHVlID8/ICcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckV2ZW50ID0geyBwbHVnaW46IHBsdWdpbiwgcmVxdWVzdERhdGE6IHJlcXVlc3REYXRhLCBpc0hpc3Rvcnk6IHBsdWdpbi5oaXN0b3J5LmlzSGlzdG9yeSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnRyaWdnZXIoJ3ByZVhoci5sb21iaXFkdCcsIHVzZXJFdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGx1Z2luLnNldHRpbmdzLnJvd3NBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBsdWdpbi5idWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyh7IHJlcXVlc3RKc29uOiBKU09OLnN0cmluZ2lmeSh1c2VyRXZlbnQucmVxdWVzdERhdGEpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zZXR0aW5ncy5jYWxsYmFja3MuYWpheERhdGFMb2FkZWRDYWxsYmFjayhyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0RHJhdyA9IHJlc3BvbnNlLmRyYXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd3JhcHBlci5hdHRyKCdkYXRhLWRyYXcnLCBsYXRlc3REcmF3KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGhpc3Rvcnkuc3RhdGUuZGF0YS5zdGFydCAvIGhpc3Rvcnkuc3RhdGUuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaGlzdG9yeS5pc1JlZHJhdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucGFnZSgpICE9PSBwYWdlKSBpbnN0YW5jZS5wYWdlKHBhZ2UpLmRyYXcoJ3BhZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wYWdlLmxlbigpICE9PSBoaXN0b3J5LnN0YXRlLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UucGFnZS5sZW4oaGlzdG9yeS5zdGF0ZS5kYXRhLmxlbmd0aCkuZHJhdygncGFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkuaXNSZWRyYXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGV4cG9ydEFjdGlvbihleHBvcnRBbGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRFeHBvcnRzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gVVJJKHBsdWdpbi5zZXR0aW5ncy5leHBvcnQuYXBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VhcmNoKHsgcmVxdWVzdEpzb246IHN0YXRlSnNvbiwgZXhwb3J0QWxsOiBleHBvcnRBbGwgfSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEV4cG9ydEJ1dHRvbnMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcGx1Z2luLnNldHRpbmdzLmV4cG9ydC50ZXh0QWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGV4cG9ydEFjdGlvbih0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcGx1Z2luLnNldHRpbmdzLmV4cG9ydC50ZXh0VmlzaWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBleHBvcnRBY3Rpb24oZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVzT3B0aW9ucy5idXR0b25zID09PSB1c2VEZWZhdWx0QnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMuYnV0dG9ucyA9IGdldEV4cG9ydEJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhVGFibGVzT3B0aW9ucy5idXR0b25zICYmIGRhdGFUYWJsZXNPcHRpb25zLmJ1dHRvbnMuZm9yRWFjaCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmJ1dHRvbnMgPT09IHVzZURlZmF1bHRCdXR0b25zKSBidXR0b24uYnV0dG9ucyA9IGdldEV4cG9ydEJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmVycm9yc1NlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuZXJyTW9kZSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICQocGx1Z2luLmVsZW1lbnQpLm9uKCdlcnJvci5kdCcsIChlLCBzZXR0aW5ncywgdGVjaE5vdGUsIG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAkKHBsdWdpbi5zZXR0aW5ncy5lcnJvcnNTZWxlY3RvcikudGV4dChtZXNzYWdlKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUVsZW1lbnQgPSAkKHBsdWdpbi5lbGVtZW50KS5kYXRhVGFibGUoZGF0YVRhYmxlc09wdGlvbnMpO1xyXG4gICAgICAgICAgICBwbHVnaW4uZGF0YVRhYmxlQXBpID0gcGx1Z2luLmRhdGFUYWJsZUVsZW1lbnQuYXBpKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0b2dnbGUgYnV0dG9uIGNsaWNrIGxpc3RlbmVycyBpZiBjaGlsZCByb3dzIGFyZSBlbmFibGVkLlxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy5jaGlsZFJvd3NFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uZGF0YVRhYmxlRWxlbWVudC5vbihcclxuICAgICAgICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgICAgICcuJyArIHBsdWdpbi5zZXR0aW5ncy5jaGlsZFJvd09wdGlvbnMudG9nZ2xlQ2hpbGRSb3dCdXR0b25DbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0YVRhYmxlRWxlbWVudE9uQ2xpY2soKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd0VsZW1lbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy5hc3luY0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRJdGVtSWQgPSBwYXJlbnRSb3dFbGVtZW50LmF0dHIoJ2RhdGEtY29udGVudGl0ZW1pZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmFwaVVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRJdGVtSWQ6IGNvbnRlbnRJdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4udG9nZ2xlQ2hpbGRSb3cocGFyZW50Um93RWxlbWVudCwgZGF0YS5jb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGRhdGEuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSb3dDb250ZW50ID0gJCgnW2RhdGEtcGFyZW50PVwiJyArIHBhcmVudFJvd0VsZW1lbnQuYXR0cignaWQnKSArICdcIl0nKS5odG1sKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnRvZ2dsZUNoaWxkUm93KHBhcmVudFJvd0VsZW1lbnQsIGNoaWxkUm93Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRmV0Y2ggaXRlbXMgaWYgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpcyBlbmFibGVkLlxyXG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5zZXR0aW5ncy5zZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgcGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMucHJvZ3Jlc3NpdmVMb2FkaW5nRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmZldGNoUm93c1Byb2dyZXNzaXZlbHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogUmVtb3ZlcyB1bm5lY2Vzc2FyeSBEYXRhVGFibGVzIGFqYXggcGFyYW1ldGVycyBhbmQgdXBkYXRlcyBwcm9wZXJ0eSBuYW1lcyBhbmQgdmFsdWVzIHRvIG1hdGNoIHNlcnZlciBkYXRhXHJcbiAgICAgICAgKiBtb2RlbC5cclxuICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgZ2VuZXJhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIHBsdWdpbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDbGVhbmVkLXVwIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgY2xlYW5VcERhdGFUYWJsZXNBamF4UGFyYW1ldGVyczogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgLy8gUmVwbGFjaW5nIGNvbHVtbiBpbmRleCB0byBjb2x1bW4gbmFtZS5cclxuICAgICAgICAgICAgLy8gQWxzbyByZW5hbWUgcHJvcGVydGllcyBhbmQgdmFsdWVzIHRvIG1hdGNoIGJhY2stZW5kIGRhdGEgbW9kZWwuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5vcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJEYXRhID0gcGFyYW1ldGVycy5vcmRlcltpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gb3JkZXJEYXRhLmNvbHVtbjtcclxuICAgICAgICAgICAgICAgIG9yZGVyRGF0YS5jb2x1bW4gPSBwYXJhbWV0ZXJzLmNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBvcmRlckRhdGEuZGlyZWN0aW9uID0gb3JkZXJEYXRhLmRpciA9PT0gJ2FzYycgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJztcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmRlckRhdGEuZGlyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZW5kIG9ubHkgZmlsdGVyZWQgY29sdW1uIGRhdGEuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJhbWV0ZXJzLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHBhcmFtZXRlcnMuY29sdW1uc1tqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VhcmNoLnZhbHVlKSBjb2x1bW5GaWx0ZXJzLnB1c2goY29sdW1uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyYW1ldGVycy5jb2x1bW5GaWx0ZXJzID0gY29sdW1uRmlsdGVycztcclxuICAgICAgICAgICAgZGVsZXRlIHBhcmFtZXRlcnMuY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBnbG9iYWwgc2VhcmNoIHBhcmFtZXRlcnMgaWYgdGhlcmUgaXMgbm8gc2VhcmNoIHZhbHVlIGdpdmVuLlxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtZXRlcnMuc2VhcmNoLnZhbHVlKSBkZWxldGUgcGFyYW1ldGVycy5zZWFyY2g7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogU2hvd3Mgb3IgaGlkZXMgY2hpbGQgcm93IGZpbGxlZCB3aXRoIHRoZSBnaXZlbiBjb250ZW50LlxyXG4gICAgICAgICogQHBhcmFtIHtqUXVlcnl9IHBhcmVudFJvd0VsZW1lbnQgUGFyZW50IHJvdyBlbGVtZW50IHdoZXJlIHRoZSBjaGlsZCByb3cgd2lsbCBiZSBkaXNwbGF5ZWQuXHJcbiAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gY2hpbGRSb3dDb250ZW50IENvbnRlbnQgb2YgdGhlIGNoaWxkIHJvdy4gQSA8dHI+IHdyYXBwZXIgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdG9nZ2xlQ2hpbGRSb3c6IGZ1bmN0aW9uIChwYXJlbnRSb3dFbGVtZW50LCBjaGlsZFJvd0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWJsZVJvdyA9IHBsdWdpbi5kYXRhVGFibGVBcGkucm93KHBhcmVudFJvd0VsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFUYWJsZVJvdy5jaGlsZC5pc1Nob3duKCkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUYWJsZVJvdy5jaGlsZC5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFyZW50Um93RWxlbWVudC5yZW1vdmVDbGFzcyhwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVSb3cuY2hpbGQoY2hpbGRSb3dDb250ZW50LCBwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93Q2xhc3NOYW1lKS5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFyZW50Um93RWxlbWVudC5hZGRDbGFzcyhwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIEZldGNoZXMgdGhlIHJvd3MgZnJvbSB0aGUgQVBJIHVzaW5nIHByb2dyZXNzaXZlIGxvYWRpbmcuXHJcbiAgICAgICAgKi9cclxuICAgICAgICBmZXRjaFJvd3NQcm9ncmVzc2l2ZWx5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLnByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5kYXRhVGFibGVBcGkucHJvY2Vzc2luZyh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiBwbHVnaW4uc2V0dGluZ3MucXVlcnlJZCxcclxuICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgIGFwaVVybDogcGx1Z2luLnNldHRpbmdzLnJvd3NBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICBpdGVtQ2FsbGJhY2s6IGZ1bmN0aW9uIChpZCwgZGF0YSwgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMuaXRlbUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLml0ZW1DYWxsYmFjayhpZCwgZGF0YSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUFwaS5yb3cuYWRkKGRhdGEpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmaW5pc2hlZENhbGxiYWNrOiBmdW5jdGlvbiAoc3VjY2VzcywgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMuZmluaXNoZWRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVMb2FkaW5nT3B0aW9ucy5maW5pc2hlZENhbGxiYWNrKHN1Y2Nlc3MsIHRvdGFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5kYXRhVGFibGVBcGkucHJvY2Vzc2luZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcGx1Z2luLnByb2dyZXNzaXZlTG9hZCgkLmV4dGVuZCh7fSwgcGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIEJ1aWxkcyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0aGF0IGluY2x1ZGVzIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBzdHJpbmdcclxuICAgICAgICAqIHBhcmFtZXRlcnMuXHJcbiAgICAgICAgKiBUaGUgb3JpZ2luYWwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYXJlIHRyYWRpdGlvbmFsbHkgZW5jb2RlZCB0byBwcmVzZXJ2ZSB0aGVpciBxdWVyeSBzdHJpbmcga2V5cyxcclxuICAgICAgICAqIHdoaWxlIHRoZSBvbmVzIHVzZWQgYnkgRGF0YVRhYmxlcyBhcmVuJ3QuXHJcbiAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBEYXRhIHRoYXQgbmVlZHMgdG8gYmUgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgVVJMIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICogQHJldHVybnMge29iamVjdH0gTWVyZ2VkIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgYnVpbGRRdWVyeVN0cmluZ1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgb2YgdGhlIGluaXRpYWwgcXVlcnkgc3RyaW5nOlxyXG4gICAgICAgICAgICAvLyBUcmFkaXRpb25hbCBlbmNvZGluZyBlbnN1cmVzIHRoYXQgaWYgYSBrZXkgaGFzIG11bHRpcGxlIHZhbHVlcyAoZS5nLiBcIj9uYW1lPXZhbHVlMSZuYW1lPXZhbHVlMlwiKSxcclxuICAgICAgICAgICAgLy8gdGhlbiB0aGUga2V5IHdvbid0IGJlIGNoYW5nZWQgdG8gXCJuYW1lW11cIi5cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxRdWVyeVN0cmluZ0VuY29kZWQgPSAkLnBhcmFtKHRoaXMub3JpZ2luYWxRdWVyeVN0cmluZ1BhcmFtZXRlcnMsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChvcmlnaW5hbFF1ZXJ5U3RyaW5nRW5jb2RlZCA/IChvcmlnaW5hbFF1ZXJ5U3RyaW5nRW5jb2RlZCArICcmJykgOiAnJykgKyAkLnBhcmFtKGRhdGEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogTG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgZm9yIGxvYWRpbmcgcm93cyBmcm9tIHRoZSBBUEkuIFRoZSByZXN1bHQgaXMgYWNjZXNzaWJsZSB1c2luZyB0aGUgY2FsbGJhY2suXHJcbiAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2tpcCBOdW1iZXIgb2YgaXRlbXMgdG8gYmUgc2tpcHBlZCBieSB0aGUgQVBJLlxyXG4gICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlIEFQSSBjYWxsIChlLmcuIEFQSSBVUkwsIGRhdGEgcHJvdmlkZXIpLlxyXG4gICAgICAgICogQHBhcmFtIHtjYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZm9yIHJldHVybmluZyByb3dzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgbG9hZFJvd3M6IGZ1bmN0aW9uIChza2lwLCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBvcHRpb25zLmFwaVVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHBsdWdpbi5idWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlJZDogb3B0aW9ucy5xdWVyeUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogb3B0aW9ucy5iYXRjaFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBvcHRpb25zLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayghcmVzcG9uc2UuZXJyb3IsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBBZGp1c3RzIGRhdGF0YWJsZSBjb2x1bW5zLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgYWRqdXN0Q29sdW1uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gcHJvcGVybHkgYWRqdXN0IGNvbHVtbiB3aWR0aHMuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUFwaS5jb2x1bW5zLmFkanVzdCgpO1xyXG4gICAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBMb3ctbGV2ZWwgZnVuY3Rpb25hbGl0eSBvZiBwcm9ncmVzc2l2ZSBsb2FkaW5nLiBJdCB3aWxsIGZldGNoIGNvbnRlbnQgc2hhcGVzIGZyb20gdGhlIGdpdmVuIEFQSS5cclxuICAgICAgICAqIFRoZSBzaGFwZXMgd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgY2FsbGJhY2tzLlxyXG4gICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgUHJvZ3Jlc3NpdmUgbG9hZGluZyBvcHRpb25zIGluY2x1ZGluZyBBUEkgVVJMIGFuZCBjYWxsYmFja3MuXHJcbiAgICAgICAgKi9cclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBza2lwID0gb3B0aW9ucy5za2lwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3VjY2VzcywgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSByZXNwb25zZS5kYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmF0Y2hDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJhdGNoQ2FsbGJhY2socmVzcG9uc2UsIHRvdGFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgb3B0aW9ucy5pdGVtQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3BvbnNlLmRhdGEsIChpbmRleCwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaXRlbUNhbGxiYWNrKGluZGV4LCB2YWx1ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY291bnQgPj0gb3B0aW9ucy5iYXRjaFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCArPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkUm93cyhza2lwLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZmluaXNoZWRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbmlzaGVkQ2FsbGJhY2sodHJ1ZSwgdG90YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5maW5pc2hlZENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZmluaXNoZWRDYWxsYmFjayhmYWxzZSwgdG90YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5sb2FkUm93cyhza2lwLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgICQuZm5bcGx1Z2luTmFtZV0gPSBmdW5jdGlvbiBwbHVnaW5OYW1lRnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIC8vIFJldHVybiBudWxsIGlmIHRoZSBlbGVtZW50IHF1ZXJ5IGlzIGludmFsaWQuXHJcbiAgICAgICAgaWYgKCF0aGlzIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gXCJtYXBcIiBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXR1cm4gdGhlIGFscmVhZHkgZXhpc3Rpbmcgb3IgY3VycmVudGx5IGluaXRpYWxpemVkIHBsdWdpbiBpbnN0YW5jZXMuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIHBsdWdpbk1hcEZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvLyBJZiBcIm9wdGlvbnNcIiBpcyBkZWZpbmVkLCBidXQgdGhlIHBsdWdpbiBpcyBub3QgaW5zdGFudGlhdGVkIG9uIHRoaXMgZWxlbWVudCAuLi5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgISQuZGF0YSh0aGlzLCAncGx1Z2luXycgKyBwbHVnaW5OYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gLi4uIHRoZW4gY3JlYXRlIGEgcGx1Z2luIGluc3RhbmNlIC4uLlxyXG4gICAgICAgICAgICAgICAgJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHBsdWdpbk5hbWUsIG5ldyBQbHVnaW4oJCh0aGlzKSwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAuLi4gYW5kIHRoZW4gcmV0dXJuIHRoZSBwbHVnaW4gaW5zdGFuY2UsIHdoaWNoIG1pZ2h0IGJlIG51bGxcclxuICAgICAgICAgICAgLy8gaWYgdGhlIHBsdWdpbiBpcyBub3QgaW5zdGFudGlhdGVkIG9uIHRoaXMgZWxlbWVudCBhbmQgJ29wdGlvbnMnIGlzIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgcmV0dXJuICQuZGF0YSh0aGlzLCAncGx1Z2luXycgKyBwbHVnaW5OYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn0pKGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCwgd2luZG93Lmhpc3RvcnkpO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBLENBQUMsU0FBU0EsZ0JBQVQsQ0FBMEJDLENBQTFCLEVBQTZCQyxNQUE3QixFQUFxQ0MsUUFBckMsRUFBK0NDLE9BQS9DLEVBQXdEO0VBQ3JELElBQU1DLFVBQVUsR0FBRyxtQkFBbkI7RUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxtQkFBMUI7RUFFQSxJQUFNQyxRQUFRLEdBQUc7SUFDYkMsaUJBQWlCLEVBQUU7TUFDZkMsU0FBUyxFQUFFLElBREk7TUFFZkMsTUFBTSxFQUFFLElBRk87TUFHZkMsVUFBVSxFQUFFLElBSEc7TUFJZkMsSUFBSSxFQUFFLElBSlM7TUFLZkMsWUFBWSxFQUFFLElBTEM7TUFNZkMsT0FBTyxFQUFFLElBTk07TUFPZkMsR0FBRyxFQUFFLDZDQUNELDJGQURDLEdBRUQsMENBRkMsR0FHRCwwQ0FWVztNQVdmQyxPQUFP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 \ No newline at end of file From 464b52a10a505f54bcd622b73067374f2c22a66e Mon Sep 17 00:00:00 2001 From: Oliver Friedrich Date: Thu, 29 Sep 2022 23:57:31 +0200 Subject: [PATCH 02/11] Remove wwwroot --- Lombiq.DataTables/wwwroot/.placeholder | 0 .../wwwroot/lombiq/icbin-datatable.js | 386 - .../lombiq/jquery-datatables-autoinit.js | 9 - .../wwwroot/lombiq/lombiq-datatables.js | 564 - .../buttons.bootstrap4.css | 195 - .../buttons.bootstrap4.min.css | 1 - .../dataTables.bootstrap4.css | 291 - .../dataTables.bootstrap4.min.css | 1 - .../buttons.bootstrap4.js | 68 - .../buttons.bootstrap4.min.js | 6 - .../dataTables.bootstrap4.js | 184 - .../dataTables.bootstrap4.min.js | 14 - .../datatables.net-buttons/buttons.colVis.js | 212 - .../buttons.colVis.min.js | 6 - .../datatables.net-buttons/buttons.flash.js | 1458 -- .../buttons.flash.min.js | 32 - .../datatables.net-buttons/buttons.html5.js | 1463 -- .../buttons.html5.min.js | 29 - .../datatables.net-buttons/buttons.print.js | 221 - .../buttons.print.min.js | 5 - .../dataTables.buttons.js | 2127 --- .../dataTables.buttons.min.js | 43 - .../datatables.net/jquery.dataTables.js | 15261 ---------------- .../datatables.net/jquery.dataTables.min.js | 185 - .../wwwroot/vendors/urijs/IPv6.js | 185 - .../vendors/urijs/SecondLevelDomains.js | 245 - .../vendors/urijs/URI.fragmentQuery.js | 121 - .../wwwroot/vendors/urijs/URI.fragmentURI.js | 97 - .../wwwroot/vendors/urijs/URI.js | 2354 --- .../wwwroot/vendors/urijs/URI.min.js | 93 - .../wwwroot/vendors/urijs/URITemplate.js | 516 - .../wwwroot/vendors/urijs/jquery.URI.js | 234 - .../wwwroot/vendors/urijs/jquery.URI.min.js | 7 - .../wwwroot/vendors/urijs/punycode.js | 533 - 34 files changed, 27146 deletions(-) delete mode 100644 Lombiq.DataTables/wwwroot/.placeholder delete mode 100644 Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js delete mode 100644 Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js delete mode 100644 Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.css delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.min.css delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.css delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.min.css delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/dataTables.bootstrap4.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/dataTables.bootstrap4.min.js delete mode 100755 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.colVis.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.colVis.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.flash.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.flash.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.html5.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.html5.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.print.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/buttons.print.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/dataTables.buttons.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net-buttons/dataTables.buttons.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net/jquery.dataTables.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/datatables.net/jquery.dataTables.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/IPv6.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/SecondLevelDomains.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/URI.fragmentQuery.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/URI.fragmentURI.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/URI.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/URI.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/URITemplate.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/jquery.URI.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/jquery.URI.min.js delete mode 100644 Lombiq.DataTables/wwwroot/vendors/urijs/punycode.js diff --git a/Lombiq.DataTables/wwwroot/.placeholder b/Lombiq.DataTables/wwwroot/.placeholder deleted file mode 100644 index e69de29bb..000000000 diff --git a/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js b/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js deleted file mode 100644 index 3531c921f..000000000 --- a/Lombiq.DataTables/wwwroot/lombiq/icbin-datatable.js +++ /dev/null @@ -1,386 +0,0 @@ -"use strict"; - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } - -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 _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -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; } - -/* globals Vue */ -window.icbinDataTable = {}; // events emitted: -// - special(cell): If the cell has a property called "special" (value is not null or -// undefined) this event is called inside the sortedData. This gives an opportunity for the -// client code to update the cell data (e.g. by setting the "component" and "hiddenInput" -// properties) with domain-specific behavior without having to edit this component. -// - update(data): Sends the new desired value of the "data" property to the parent. Alternatively -// v-model can also be used. -// - column(columns): Sends an updated columns array to the parent so it can replace the columns parameter with it. -// - component(rowIndex, columnName, userData): Passed on from the child component. If it's a column header component -// then columnName is -1. -// -// events received: -// - delete(promptText): cell components may emit this event to signal a request to delete the row -// from the table's data. Optionally a non-empty String may be passed as event argument. If that -// happens, a prompt will be displayed with the given text to confirm with the user that they -// really want to remove the row. -// - update(data): Same as above. The component may have a "data" property for this purpose. -// - component(userData): A child component may raise this to be bubbled up to the parent component. - -window.icbinDataTable.table = { - name: 'icbin-datatable', - model: { - prop: 'data', - event: 'update' - }, - props: { - data: { - // [ - // { - // $rowIndex: Number, - // columnName: { - // // These can come from the server: - // text: String, - // html: String?, - // badge: String? - // sort: Any?, - // href: String?, - // multipleLinks: { link: String, text: String }? or [ { link: String, text: String } ]?, - // special: Any?, - // hiddenInput: { name: String, value: String }? or [ { name: String, value: String } ]? - // // These can be set in JS code (e.g. with the "special" event): - // component: { name: String?, value: Object }? - // rowClasses: String? - // } - // } - // ] - // note: The name and value in the hiddenInput properties may contain the {{ index }} expression which is - // substituted with a zero-based index when generating the hiddenInputs computed property. - type: Array, - required: true - }, - columns: { - type: Array, - required: true - }, - text: { - // Expected properties: lengthPicker, displayCount, previous, next, all. - type: Object, - required: true - }, - defaultSort: { - // { name: "columnName", ascending: true } - default: null - }, - defaultLength: { - type: Number, - default: 10 - }, - lengths: { - type: Array, - default: function _default() { - return [10, 25, 50, 100]; - } - }, - paging: { - default: true - }, - filter: { - default: function _default() { - return function (collection) { - return collection; - }; - } - } - }, - data: function data() { - return { - pageIndex: 0, - length: 10, - sort: { - name: null, - ascending: true - } - }; - }, - computed: { - total: function total(self) { - return self.data.length; - }, - lengthPickerBefore: function lengthPickerBefore(self) { - return self.text.lengthPicker.split('{{ count }}')[0]; - }, - lengthPickerAfter: function lengthPickerAfter(self) { - var parts = self.text.lengthPicker.split('{{ count }}'); - return parts.length > 1 ? parts[1] : ''; - }, - displayCountText: function displayCountText(self) { - var itemIndex = self.pageIndex * self.length; - var mathMin = Math.min(itemIndex + self.length, self.total); - return self.text.displayCount.replace(/{{\s*from\s*}}/, itemIndex + 1).replace(/{{\s*to\s*}}/, mathMin === -1 ? self.total : mathMin).replace(/{{\s*total\s*}}/, self.total); - }, - pagination: function pagination(self) { - if (self.total < 1) return [0]; - var pageCount = self.length > 0 ? Math.ceil(self.total / self.length) : 1; - - var range = _toConsumableArray(Array(pageCount).keys()); - - if (self.pageIndex > 3) { - range = [0, '...'].concat(range.slice(self.pageIndex - 1)); - } - - if (pageCount - self.pageIndex > 3) { - range = range.slice(0, 5).concat(['...', pageCount - 1]); - } - - return range; - }, - sortedData: function sortedData(self) { - var lower = self.sort.ascending ? -1 : 1; - var sorted = self.filter(self.data.concat()) // The concat ensures the sort can't alter the original. - .sort(function (row1, row2) { - var _row1$self$sort$name$, _row1$self$sort$name, _row1$self$sort$name2, _row2$self$sort$name$, _row2$self$sort$name, _row2$self$sort$name2; - - var sortable1 = (_row1$self$sort$name$ = (_row1$self$sort$name = row1[self.sort.name]) === null || _row1$self$sort$name === void 0 ? void 0 : _row1$self$sort$name.sort) !== null && _row1$self$sort$name$ !== void 0 ? _row1$self$sort$name$ : (_row1$self$sort$name2 = row1[self.sort.name]) === null || _row1$self$sort$name2 === void 0 ? void 0 : _row1$self$sort$name2.text.toLowerCase(); - var sortable2 = (_row2$self$sort$name$ = (_row2$self$sort$name = row2[self.sort.name]) === null || _row2$self$sort$name === void 0 ? void 0 : _row2$self$sort$name.sort) !== null && _row2$self$sort$name$ !== void 0 ? _row2$self$sort$name$ : (_row2$self$sort$name2 = row2[self.sort.name]) === null || _row2$self$sort$name2 === void 0 ? void 0 : _row2$self$sort$name2.text.toLowerCase(); - if (sortable1 < sortable2) return lower; - if (sortable1 > sortable2) return -lower; - return 0; - }); - var page = sorted; - - if (self.paging && self.length > 0) { - var startIndex = self.pageIndex * self.length; - page = sorted.slice(startIndex, startIndex + self.length); - } - - return page.map(function (row) { - return Object.fromEntries(Object.entries(row).map(function (cellPair) { - var _cellPair = _slicedToArray(cellPair, 2), - name = _cellPair[0], - cell = _cellPair[1]; - - if (cell.special !== null && cell.special !== undefined) { - // This lets the client code alter the cell. - self.$emit('special', cell); - } - - return [name, cell]; - })); - }); - }, - hiddenInputs: function hiddenInputs(self) { - var inputs = []; - self.data.forEach(function (row) { - Object.values(row).filter(function (cell) { - return _typeof(cell) === 'object' && 'hiddenInput' in cell; - }).forEach(function (cell) { - return Array.isArray(cell.hiddenInput) ? inputs.push.apply(inputs, _toConsumableArray(cell.hiddenInput)) : inputs.push(cell.hiddenInput); - }); - }); // Calculate index - - var regex = /{{\s*index\s*}}/; - - for (var index = 0; index < inputs.length; index++) { - var input = inputs[index]; - inputs[index] = { - name: input.name.replace(regex, index), - value: typeof input.value === 'string' ? input.value.replace(regex, index) : input.value - }; - } - - return inputs; - } - }, - methods: { - changePage: function changePage(page) { - if (page >= 0 && page < this.total) this.pageIndex = page; - }, - deleteRow: function deleteRow(rowIndex, promptText) { - if (!window.confirm(promptText)) return; - this.updateData(this.data.filter(function (row) { - return row.$rowIndex !== rowIndex; - })); - }, - updateData: function updateData(newData) { - this.$emit('update', newData); - }, - updateSort: function updateSort(column) { - if (!column.orderable) return; - var sort = this.sort; // It only goes to descending on the second click of the same column header. - - var toAscending = !(sort.name === column.name && sort.ascending); - sort.name = column.name; - sort.ascending = toAscending; - }, - updateColumn: function updateColumn(columnIndex, column) { - var newColumns = this.columns.concat(); - newColumns.splice(columnIndex, 1, column); - this.$emit('column', newColumns); - }, - rowClasses: function rowClasses(row) { - var classes = []; - Object.values(row).forEach(function (cell) { - if (typeof cell.rowClasses === 'string') { - classes.push(cell.rowClasses); - } - }); - return classes.join(' '); - } - }, - created: function created() { - var self = this; - var changed = false; - - function updateData(rowIndex, columnName, newCell) { - var newRow = _objectSpread({}, self.data[rowIndex]); - - newRow[columnName] = _objectSpread({}, newCell); - Vue.set(self.data, rowIndex, newRow); // Regenerate this row for reactivity. - - changed = true; - } - - function cloneCell(cell) { - var newCell = _objectSpread({}, cell); - - delete newCell.special; - return newCell; - } - - self.data.forEach(function (row, rowIndex) { - Object.keys(row).filter(function (key) { - return key[0] !== '$'; - }).forEach(function (columnName) { - var _cell$special; - - var cell = row[columnName]; - - switch (cell === null || cell === void 0 ? void 0 : (_cell$special = cell.special) === null || _cell$special === void 0 ? void 0 : _cell$special.type) { - case 'checkbox': - { - var special = cell.special; - var newCell = cloneCell(cell); - newCell.hiddenInput = { - name: special.name, - value: JSON.stringify(!!special.value) - }; - newCell.component = { - name: 'icbin-datatable-checkbox', - value: { - label: special.label, - checked: !!special.value, - disabled: special.value === null, - classes: special.classes - } - }; - newCell.sort = special.value; - updateData(rowIndex, columnName, newCell); - break; - } - - default: - break; - } - }); - }); - if (changed) this.updateData(this.data); - }, - mounted: function mounted() { - var self = this; - - if (self.defaultSort) { - self.sort.name = self.defaultSort.name; - self.sort.ascending = self.defaultSort.ascending; - } else { - self.sort.name = self.columns[0].name; - } - - if (self.defaultLength) self.length = self.defaultLength; - }, - template: "\n
\n
\n {{ lengthPickerBefore }}\n \n {{ lengthPickerAfter }}\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n {{ column.text }}\n
\n
\n \n
\n
\n
\n {{ displayCountText }}\n
\n
\n
\n \n
\n
\n
\n
\n \n
" -}; -window.icbinDataTable.remove = { - name: 'icbin-datatable-remove', - props: { - text: { - type: Object, - required: true - }, - disabled: { - type: Boolean, - default: false - } - }, - template: "\n \n \n {{ text.remove }}\n " -}; -window.icbinDataTable.checkbox = { - name: 'icbin-datatable-checkbox', - props: { - data: { - type: Array, - required: true - }, - rowIndex: { - type: Number, - required: true - }, - columnName: { - type: String, - required: true - }, - label: { - default: '' - }, - checked: { - default: undefined - }, - disabled: { - type: Boolean, - default: false - }, - classes: { - default: '' - } - }, - methods: { - update: function update(checked) { - var _this = this; - - var cell = this.data.filter(function (row) { - return row.$rowIndex === _this.rowIndex; - })[0][this.columnName]; - cell.component.value.checked = checked; - cell.hiddenInput.value = JSON.stringify(!!checked); - cell.sort = checked; - this.$emit('update', this.data); - this.$emit('component', 'checked'); - } - }, - mounted: function mounted() { - this.$emit('component', 'checked'); - }, - template: "\n " -}; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJpY2JpbkRhdGFUYWJsZSIsInRhYmxlIiwibmFtZSIsIm1vZGVsIiwicHJvcCIsImV2ZW50IiwicHJvcHMiLCJkYXRhIiwidHlwZSIsIkFycmF5IiwicmVxdWlyZWQiLCJjb2x1bW5zIiwidGV4dCIsIk9iamVjdCIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdCIsImRlZmF1bHRMZW5ndGgiLCJOdW1iZXIiLCJsZW5ndGhzIiwicGFnaW5nIiwiZmlsdGVyIiwiY29sbGVjdGlvbiIsInBhZ2VJbmRleCIsImxlbmd0aCIsInNvcnQiLCJhc2NlbmRpbmciLCJjb21wdXRlZCIsInRvdGFsIiwic2VsZiIsImxlbmd0aFBpY2tlckJlZm9yZSIsImxlbmd0aFBpY2tlciIsInNwbGl0IiwibGVuZ3RoUGlja2VyQWZ0ZXIiLCJwYXJ0cyIsImRpc3BsYXlDb3VudFRleHQiLCJpdGVtSW5kZXgiLCJtYXRoTWluIiwiTWF0aCIsIm1pbiIsImRpc3BsYXlDb3VudCIsInJlcGxhY2UiLCJwYWdpbmF0aW9uIiwicGFnZUNvdW50IiwiY2VpbCIsInJhbmdlIiwia2V5cyIsImNvbmNhdCIsInNsaWNlIiwic29ydGVkRGF0YSIsImxvd2VyIiwic29ydGVkIiwicm93MSIsInJvdzIiLCJzb3J0YWJsZTEiLCJ0b0xvd2VyQ2FzZSIsInNvcnRhYmxlMiIsInBhZ2UiLCJzdGFydEluZGV4IiwibWFwIiwicm93IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiY2VsbFBhaXIiLCJjZWxsIiwic3BlY2lhbCIsInVuZGVmaW5lZCIsIiRlbWl0IiwiaGlkZGVuSW5wdXRzIiwiaW5wdXRzIiwiZm9yRWFjaCIsInZhbHVlcyIsImlzQXJyYXkiLCJoaWRkZW5JbnB1dCIsInB1c2giLCJyZWdleCIsImluZGV4IiwiaW5wdXQiLCJ2YWx1ZSIsIm1ldGhvZHMiLCJjaGFuZ2VQYWdlIiwiZGVsZXRlUm93Iiwicm93SW5kZXgiLCJwcm9tcHRUZXh0IiwiY29uZmlybSIsInVwZGF0ZURhdGEiLCIkcm93SW5kZXgiLCJuZXdEYXRhIiwidXBkYXRlU29ydCIsImNvbHVtbiIsIm9yZGVyYWJsZSIsInRvQXNjZW5kaW5nIiwidXBkYXRlQ29sdW1uIiwiY29sdW1uSW5kZXgiLCJuZXdDb2x1bW5zIiwic3BsaWNlIiwicm93Q2xhc3NlcyIsImNsYXNzZXMiLCJqb2luIiwiY3JlYXRlZCIsImNoYW5nZWQiLCJjb2x1bW5OYW1lIiwibmV3Q2VsbCIsIm5ld1JvdyIsIlZ1ZSIsInNldCIsImNsb25lQ2VsbCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb21wb25lbnQiLCJsYWJlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm1vdW50ZWQiLCJ0ZW1wbGF0ZSIsInJlbW92ZSIsIkJvb2xlYW4iLCJjaGVja2JveCIsIlN0cmluZyIsInVwZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL0Fzc2V0cy9TY3JpcHRzL2ljYmluLWRhdGF0YWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIFZ1ZSAqL1xyXG5cclxud2luZG93LmljYmluRGF0YVRhYmxlID0ge307XHJcblxyXG4vLyBldmVudHMgZW1pdHRlZDpcclxuLy8gLSBzcGVjaWFsKGNlbGwpOiBJZiB0aGUgY2VsbCBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgXCJzcGVjaWFsXCIgKHZhbHVlIGlzIG5vdCBudWxsIG9yXHJcbi8vICAgdW5kZWZpbmVkKSB0aGlzIGV2ZW50IGlzIGNhbGxlZCBpbnNpZGUgdGhlIHNvcnRlZERhdGEuIFRoaXMgZ2l2ZXMgYW4gb3Bwb3J0dW5pdHkgZm9yIHRoZVxyXG4vLyAgIGNsaWVudCBjb2RlIHRvIHVwZGF0ZSB0aGUgY2VsbCBkYXRhIChlLmcuIGJ5IHNldHRpbmcgdGhlIFwiY29tcG9uZW50XCIgYW5kIFwiaGlkZGVuSW5wdXRcIlxyXG4vLyAgIHByb3BlcnRpZXMpIHdpdGggZG9tYWluLXNwZWNpZmljIGJlaGF2aW9yIHdpdGhvdXQgaGF2aW5nIHRvIGVkaXQgdGhpcyBjb21wb25lbnQuXHJcbi8vIC0gdXBkYXRlKGRhdGEpOiBTZW5kcyB0aGUgbmV3IGRlc2lyZWQgdmFsdWUgb2YgdGhlIFwiZGF0YVwiIHByb3BlcnR5IHRvIHRoZSBwYXJlbnQuIEFsdGVybmF0aXZlbHlcclxuLy8gICB2LW1vZGVsIGNhbiBhbHNvIGJlIHVzZWQuXHJcbi8vIC0gY29sdW1uKGNvbHVtbnMpOiBTZW5kcyBhbiB1cGRhdGVkIGNvbHVtbnMgYXJyYXkgdG8gdGhlIHBhcmVudCBzbyBpdCBjYW4gcmVwbGFjZSB0aGUgY29sdW1ucyBwYXJhbWV0ZXIgd2l0aCBpdC5cclxuLy8gLSBjb21wb25lbnQocm93SW5kZXgsIGNvbHVtbk5hbWUsIHVzZXJEYXRhKTogUGFzc2VkIG9uIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudC4gSWYgaXQncyBhIGNvbHVtbiBoZWFkZXIgY29tcG9uZW50XHJcbi8vICAgdGhlbiBjb2x1bW5OYW1lIGlzIC0xLlxyXG4vL1xyXG4vLyBldmVudHMgcmVjZWl2ZWQ6XHJcbi8vIC0gZGVsZXRlKHByb21wdFRleHQpOiBjZWxsIGNvbXBvbmVudHMgbWF5IGVtaXQgdGhpcyBldmVudCB0byBzaWduYWwgYSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUgcm93XHJcbi8vICAgZnJvbSB0aGUgdGFibGUncyBkYXRhLiBPcHRpb25hbGx5IGEgbm9uLWVtcHR5IFN0cmluZyBtYXkgYmUgcGFzc2VkIGFzIGV2ZW50IGFyZ3VtZW50LiBJZiB0aGF0XHJcbi8vICAgaGFwcGVucywgYSBwcm9tcHQgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCB0byBjb25maXJtIHdpdGggdGhlIHVzZXIgdGhhdCB0aGV5XHJcbi8vICAgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSByb3cuXHJcbi8vIC0gdXBkYXRlKGRhdGEpOiBTYW1lIGFzIGFib3ZlLiBUaGUgY29tcG9uZW50IG1heSBoYXZlIGEgXCJkYXRhXCIgcHJvcGVydHkgZm9yIHRoaXMgcHVycG9zZS5cclxuLy8gLSBjb21wb25lbnQodXNlckRhdGEpOiBBIGNoaWxkIGNvbXBvbmVudCBtYXkgcmFpc2UgdGhpcyB0byBiZSBidWJibGVkIHVwIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG5cclxud2luZG93LmljYmluRGF0YVRhYmxlLnRhYmxlID0ge1xyXG4gICAgbmFtZTogJ2ljYmluLWRhdGF0YWJsZScsXHJcbiAgICBtb2RlbDoge1xyXG4gICAgICAgIHByb3A6ICdkYXRhJyxcclxuICAgICAgICBldmVudDogJ3VwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIC8vIFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICAkcm93SW5kZXg6IE51bWJlcixcclxuICAgICAgICAgICAgLy8gICAgIGNvbHVtbk5hbWU6IHtcclxuICAgICAgICAgICAgLy8gICAgICAgLy8gVGhlc2UgY2FuIGNvbWUgZnJvbSB0aGUgc2VydmVyOlxyXG4gICAgICAgICAgICAvLyAgICAgICB0ZXh0OiBTdHJpbmcsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGh0bWw6IFN0cmluZz8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGJhZGdlOiBTdHJpbmc/XHJcbiAgICAgICAgICAgIC8vICAgICAgIHNvcnQ6IEFueT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGhyZWY6IFN0cmluZz8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIG11bHRpcGxlTGlua3M6IHsgbGluazogU3RyaW5nLCB0ZXh0OiBTdHJpbmcgfT8gb3IgWyB7IGxpbms6IFN0cmluZywgdGV4dDogU3RyaW5nIH0gXT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHNwZWNpYWw6IEFueT8sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGhpZGRlbklucHV0OiB7IG5hbWU6IFN0cmluZywgdmFsdWU6IFN0cmluZyB9PyBvciBbIHsgbmFtZTogU3RyaW5nLCB2YWx1ZTogU3RyaW5nIH0gXT9cclxuICAgICAgICAgICAgLy8gICAgICAgLy8gVGhlc2UgY2FuIGJlIHNldCBpbiBKUyBjb2RlIChlLmcuIHdpdGggdGhlIFwic3BlY2lhbFwiIGV2ZW50KTpcclxuICAgICAgICAgICAgLy8gICAgICAgY29tcG9uZW50OiB7IG5hbWU6IFN0cmluZz8sIHZhbHVlOiBPYmplY3QgfT9cclxuICAgICAgICAgICAgLy8gICAgICAgcm93Q2xhc3NlczogU3RyaW5nP1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gXVxyXG4gICAgICAgICAgICAvLyBub3RlOiBUaGUgbmFtZSBhbmQgdmFsdWUgaW4gdGhlIGhpZGRlbklucHV0IHByb3BlcnRpZXMgbWF5IGNvbnRhaW4gdGhlIHt7IGluZGV4IH19IGV4cHJlc3Npb24gd2hpY2ggaXNcclxuICAgICAgICAgICAgLy8gICAgICAgc3Vic3RpdHV0ZWQgd2l0aCBhIHplcm8tYmFzZWQgaW5kZXggd2hlbiBnZW5lcmF0aW5nIHRoZSBoaWRkZW5JbnB1dHMgY29tcHV0ZWQgcHJvcGVydHkuXHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbnM6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGV4dDoge1xyXG4gICAgICAgICAgICAvLyBFeHBlY3RlZCBwcm9wZXJ0aWVzOiBsZW5ndGhQaWNrZXIsIGRpc3BsYXlDb3VudCwgcHJldmlvdXMsIG5leHQsIGFsbC5cclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTb3J0OiB7XHJcbiAgICAgICAgICAgIC8vIHsgbmFtZTogXCJjb2x1bW5OYW1lXCIsIGFzY2VuZGluZzogdHJ1ZSB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZhdWx0TGVuZ3RoOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgZGVmYXVsdDogMTAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZW5ndGhzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBbMTAsIDI1LCA1MCwgMTAwXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2luZzoge1xyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLFxyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgICAgICAgbGVuZ3RoOiAxMCxcclxuICAgICAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWwoc2VsZikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmxlbmd0aDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxlbmd0aFBpY2tlckJlZm9yZShzZWxmKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQubGVuZ3RoUGlja2VyLnNwbGl0KCd7eyBjb3VudCB9fScpWzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGVuZ3RoUGlja2VyQWZ0ZXIoc2VsZikge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHNlbGYudGV4dC5sZW5ndGhQaWNrZXIuc3BsaXQoJ3t7IGNvdW50IH19Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiAnJztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpc3BsYXlDb3VudFRleHQoc2VsZikge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBzZWxmLnBhZ2VJbmRleCAqIHNlbGYubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRoTWluID0gTWF0aC5taW4oaXRlbUluZGV4ICsgc2VsZi5sZW5ndGgsIHNlbGYudG90YWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0LmRpc3BsYXlDb3VudFxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmZyb21cXHMqfX0vLCBpdGVtSW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRvXFxzKn19LywgbWF0aE1pbiA9PT0gLTEgPyBzZWxmLnRvdGFsIDogbWF0aE1pbilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0b3RhbFxccyp9fS8sIHNlbGYudG90YWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnaW5hdGlvbihzZWxmKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnRvdGFsIDwgMSkgcmV0dXJuIFswXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHNlbGYubGVuZ3RoID4gMCA/IE1hdGguY2VpbChzZWxmLnRvdGFsIC8gc2VsZi5sZW5ndGgpIDogMTtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gWy4uLkFycmF5KHBhZ2VDb3VudCkua2V5cygpXTtcclxuICAgICAgICAgICAgaWYgKHNlbGYucGFnZUluZGV4ID4gMykge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBbMCwgJy4uLiddLmNvbmNhdChyYW5nZS5zbGljZShzZWxmLnBhZ2VJbmRleCAtIDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFnZUNvdW50IC0gc2VsZi5wYWdlSW5kZXggPiAzKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlLnNsaWNlKDAsIDUpLmNvbmNhdChbJy4uLicsIHBhZ2VDb3VudCAtIDFdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc29ydGVkRGF0YShzZWxmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvd2VyID0gc2VsZi5zb3J0LmFzY2VuZGluZyA/IC0xIDogMTtcclxuICAgICAgICAgICAgY29uc3Qgc29ydGVkID0gc2VsZi5maWx0ZXIoc2VsZi5kYXRhLmNvbmNhdCgpKSAvLyBUaGUgY29uY2F0IGVuc3VyZXMgdGhlIHNvcnQgY2FuJ3QgYWx0ZXIgdGhlIG9yaWdpbmFsLlxyXG4gICAgICAgICAgICAgICAgLnNvcnQoKHJvdzEsIHJvdzIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0YWJsZTEgPSByb3cxW3NlbGYuc29ydC5uYW1lXT8uc29ydCA/PyByb3cxW3NlbGYuc29ydC5uYW1lXT8udGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRhYmxlMiA9IHJvdzJbc2VsZi5zb3J0Lm5hbWVdPy5zb3J0ID8/IHJvdzJbc2VsZi5zb3J0Lm5hbWVdPy50ZXh0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0YWJsZTEgPCBzb3J0YWJsZTIpIHJldHVybiBsb3dlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUxID4gc29ydGFibGUyKSByZXR1cm4gLWxvd2VyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBzb3J0ZWQ7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnBhZ2luZyAmJiBzZWxmLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzZWxmLnBhZ2VJbmRleCAqIHNlbGYubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcGFnZSA9IHNvcnRlZC5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgc2VsZi5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFnZS5tYXAoKHJvdykgPT4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgLmVudHJpZXMocm93KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNlbGxQYWlyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCBjZWxsXSA9IGNlbGxQYWlyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwuc3BlY2lhbCAhPT0gbnVsbCAmJiBjZWxsLnNwZWNpYWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsZXRzIHRoZSBjbGllbnQgY29kZSBhbHRlciB0aGUgY2VsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuJGVtaXQoJ3NwZWNpYWwnLCBjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuYW1lLCBjZWxsXTtcclxuICAgICAgICAgICAgICAgICAgICB9KSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGlkZGVuSW5wdXRzKHNlbGYpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXRzID0gW107XHJcblxyXG4gICAgICAgICAgICBzZWxmLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJvdylcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjZWxsKSA9PiB0eXBlb2YgY2VsbCA9PT0gJ29iamVjdCcgJiYgJ2hpZGRlbklucHV0JyBpbiBjZWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjZWxsKSA9PiAoQXJyYXkuaXNBcnJheShjZWxsLmhpZGRlbklucHV0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlucHV0cy5wdXNoKC4uLmNlbGwuaGlkZGVuSW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRzLnB1c2goY2VsbC5oaWRkZW5JbnB1dCkpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaW5kZXhcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSAve3tcXHMqaW5kZXhcXHMqfX0vO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dC5uYW1lLnJlcGxhY2UocmVnZXgsIGluZGV4KSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKHR5cGVvZiBpbnB1dC52YWx1ZSA9PT0gJ3N0cmluZycpID8gaW5wdXQudmFsdWUucmVwbGFjZShyZWdleCwgaW5kZXgpIDogaW5wdXQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRzO1xyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGNoYW5nZVBhZ2UocGFnZSkge1xyXG4gICAgICAgICAgICBpZiAocGFnZSA+PSAwICYmIHBhZ2UgPCB0aGlzLnRvdGFsKSB0aGlzLnBhZ2VJbmRleCA9IHBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVSb3cocm93SW5kZXgsIHByb21wdFRleHQpIHtcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuY29uZmlybShwcm9tcHRUZXh0KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEodGhpcy5kYXRhLmZpbHRlcigocm93KSA9PiByb3cuJHJvd0luZGV4ICE9PSByb3dJbmRleCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlRGF0YShuZXdEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIG5ld0RhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlU29ydChjb2x1bW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4ub3JkZXJhYmxlKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnNvcnQ7XHJcblxyXG4gICAgICAgICAgICAvLyBJdCBvbmx5IGdvZXMgdG8gZGVzY2VuZGluZyBvbiB0aGUgc2Vjb25kIGNsaWNrIG9mIHRoZSBzYW1lIGNvbHVtbiBoZWFkZXIuXHJcbiAgICAgICAgICAgIGNvbnN0IHRvQXNjZW5kaW5nID0gIShzb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHNvcnQuYXNjZW5kaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHNvcnQubmFtZSA9IGNvbHVtbi5uYW1lO1xyXG4gICAgICAgICAgICBzb3J0LmFzY2VuZGluZyA9IHRvQXNjZW5kaW5nO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXBkYXRlQ29sdW1uKGNvbHVtbkluZGV4LCBjb2x1bW4pIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5jb25jYXQoKTtcclxuICAgICAgICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoY29sdW1uSW5kZXgsIDEsIGNvbHVtbik7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvbHVtbicsIG5ld0NvbHVtbnMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm93Q2xhc3Nlcyhyb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyb3cpLmZvckVhY2goKGNlbGwpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2VsbC5yb3dDbGFzc2VzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjZWxsLnJvd0NsYXNzZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKHJvd0luZGV4LCBjb2x1bW5OYW1lLCBuZXdDZWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4uc2VsZi5kYXRhW3Jvd0luZGV4XSB9O1xyXG4gICAgICAgICAgICBuZXdSb3dbY29sdW1uTmFtZV0gPSB7IC4uLm5ld0NlbGwgfTtcclxuICAgICAgICAgICAgVnVlLnNldChzZWxmLmRhdGEsIHJvd0luZGV4LCBuZXdSb3cpOyAvLyBSZWdlbmVyYXRlIHRoaXMgcm93IGZvciByZWFjdGl2aXR5LlxyXG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsb25lQ2VsbChjZWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSB7IC4uLmNlbGwgfTtcclxuICAgICAgICAgICAgZGVsZXRlIG5ld0NlbGwuc3BlY2lhbDtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLmRhdGEuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3cpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleVswXSAhPT0gJyQnKVxyXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2VsbD8uc3BlY2lhbD8udHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpYWwgPSBjZWxsLnNwZWNpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gY2xvbmVDZWxsKGNlbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuaGlkZGVuSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3BlY2lhbC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSghIXNwZWNpYWwudmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmNvbXBvbmVudCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLWNoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3BlY2lhbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogISFzcGVjaWFsLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogc3BlY2lhbC52YWx1ZSA9PT0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlczogc3BlY2lhbC5jbGFzc2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5zb3J0ID0gc3BlY2lhbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEocm93SW5kZXgsIGNvbHVtbk5hbWUsIG5ld0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY2hhbmdlZCkgdGhpcy51cGRhdGVEYXRhKHRoaXMuZGF0YSk7XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoc2VsZi5kZWZhdWx0U29ydCkge1xyXG4gICAgICAgICAgICBzZWxmLnNvcnQubmFtZSA9IHNlbGYuZGVmYXVsdFNvcnQubmFtZTtcclxuICAgICAgICAgICAgc2VsZi5zb3J0LmFzY2VuZGluZyA9IHNlbGYuZGVmYXVsdFNvcnQuYXNjZW5kaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZi5zb3J0Lm5hbWUgPSBzZWxmLmNvbHVtbnNbMF0ubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLmRlZmF1bHRMZW5ndGgpIHNlbGYubGVuZ3RoID0gc2VsZi5kZWZhdWx0TGVuZ3RoO1xyXG4gICAgfSxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNiaW5EYXRhdGFibGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNiaW5EYXRhdGFibGVfX2xlbmd0aFBpY2tlclwiIHYtaWY9XCJwYWdpbmdcIj5cclxuICAgICAgICAgICAge3sgbGVuZ3RoUGlja2VyQmVmb3JlIH19XHJcbiAgICAgICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cImxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImxlbmd0aE9wdGlvbiBpbiBsZW5ndGhzXCIgOnZhbHVlPVwibGVuZ3RoT3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgbGVuZ3RoT3B0aW9uID4gMCA/IGxlbmd0aE9wdGlvbiA6IHRleHQuYWxsIH19XHJcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIHt7IGxlbmd0aFBpY2tlckFmdGVyIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljYmluRGF0YXRhYmxlX19hYm92ZUhlYWRlclwiPjxzbG90Pjwvc2xvdD48L2Rpdj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVfX3RhYmxlIGRhdGFUYWJsZSByb3ctYm9yZGVyIHN0cmlwZSB0YWJsZSBkYXRhLXRhYmxlIG5vLWZvb3RlclwiIHJvbGU9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJkYXRhVGFibGVfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZGF0YVRhYmxlX19oZWFkZXJSb3dcIiByb2xlPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHYtZm9yPVwiKGNvbHVtbiwgY29sdW1uSW5kZXgpIGluIGNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGFUYWJsZV9faGVhZGVyQ2VsbCBkYXRhVGFibGVfX2NlbGwgc29ydGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jbGFzcy1uYW1lPVwiZGF0YVRhYmxlX19jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwic29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSA/IChzb3J0LmFzY2VuZGluZyA/ICdzb3J0aW5nX2FzYycgOiAnc29ydGluZ19kZXNjJykgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCInaWNiaW5EYXRhdGFibGVfX2NvbHVtbl8nICsgY29sdW1uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1vcmRlcmFibGU9XCIoISFjb2x1bW4ub3JkZXJhYmxlKS50b1N0cmluZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbmFtZT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtZGF0YT1cImNvbHVtbi50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiY29sdW1uLm9yZGVyYWJsZSAmJiB1cGRhdGVTb3J0KGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudCB2LWlmPVwiY29sdW1uLmNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlzPVwiY29sdW1uLmNvbXBvbmVudC5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjb2x1bW49XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZD1cImNvbHVtbi5jb21wb25lbnQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGU9XCJ1cGRhdGVDb2x1bW4oY29sdW1uSW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb21wb25lbnQ9XCIkZW1pdCgnY29tcG9uZW50JywgLTEsIGNvbHVtbiwgJGV2ZW50KVwiICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVRhYmxlc19zaXppbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImRhdGFUYWJsZV9fYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwiKHJvdywgcm93SW5kZXgpIGluIHNvcnRlZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YVRhYmxlX19yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCInaWNiaW5EYXRhdGFibGVfX3Jvd18nICsgcm93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIihyb3dJbmRleCAlIDIgPyAnZXZlbiAnIDogJ29kZCAnKSArIHJvd0NsYXNzZXMocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCB2LWZvcj1cIihjb2x1bW4sIGNvbHVtbkluZGV4KSBpbiBjb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cIidpY2JpbkRhdGF0YWJsZV9fY2VsbF8nICsgcm93SW5kZXggKyAneCcgKyBjb2x1bW5JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YVRhYmxlX19jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBzb3J0aW5nXzE6IHNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJjZWxsIGluIFtjb2x1bW4ubmFtZSBpbiByb3cgPyByb3dbY29sdW1uLm5hbWVdIDogeyB0ZXh0IDogJycgfV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wb25lbnQgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlzPVwiY2VsbC5jb21wb25lbnQubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpyb3ctaW5kZXg9XCJyb3cuJHJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbHVtbi1uYW1lPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWJpbmQ9XCJjZWxsLmNvbXBvbmVudC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVSb3cocm93LiRyb3dJbmRleCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGU9XCJ1cGRhdGVEYXRhKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29tcG9uZW50PVwiJGVtaXQoJ2NvbXBvbmVudCcsIHJvd0luZGV4LCBjb2x1bW4ubmFtZSwgJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWVsc2UtaWY9XCJjZWxsLmhyZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9XCJjZWxsLmhyZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwiY2VsbC5iYWRnZSA/ICgnYmFkZ2UgYmFkZ2UtJyArIGNlbGwuYmFkZ2UpIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiY2VsbC5tdWx0aXBsZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1mb3I9XCIobGluaywgaW5kZXgpIGluIGNlbGwubXVsdGlwbGVMaW5rc1wiIDpocmVmPVwibGluay51cmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjZWxsLm11bHRpcGxlTGlua3MubGVuZ3RoID4gMSAmJiBjZWxsLm11bHRpcGxlTGlua3MubGVuZ3RoICE9IGluZGV4ICsgMVwiPiwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJjZWxsLmh0bWxcIiB2LWh0bWw9XCJjZWxsLmh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZSA6Y2xhc3M9XCJjZWxsLmJhZGdlID8gKCdiYWRnZSBiYWRnZS0nICsgY2VsbC5iYWRnZSkgOiAnJ1wiPnt7IGNlbGwudGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY2JpbkRhdGF0YWJsZV9fZm9vdGVyXCIgdi1pZj1cInBhZ2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljYmluRGF0YXRhYmxlX19kaXNwbGF5Q291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5Q291bnRUZXh0IH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY2JpbkRhdGF0YWJsZV9fcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVRhYmxlc19wYWdpbmF0ZSBwYWdpbmdfc2ltcGxlX251bWJlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnaW5hdGVfYnV0dG9uIHBhZ2UtaXRlbSBwcmV2aW91c1wiIDpjbGFzcz1cInsgZGlzYWJsZWQ6IHBhZ2VJbmRleCA8IDEgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgQGNsaWNrPVwiY2hhbmdlUGFnZShwYWdlSW5kZXggLSAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0LnByZXZpb3VzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSB2LWZvcj1cInBhZ2UgaW4gcGFnaW5hdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdpbmF0ZV9idXR0b24gcGFnZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogcGFnZSA9PT0gcGFnZUluZGV4IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWlmPVwicGFnZSAhPT0gJy4uLidcIiBjbGFzcz1cInBhZ2UtbGlua1wiIEBjbGljaz1cImNoYW5nZVBhZ2UocGFnZSlcIj57eyBwYWdlICsgMSB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWVsc2UgY2xhc3M9XCJwYWdlLWxpbmtcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnaW5hdGVfYnV0dG9uIHBhZ2UtaXRlbSBuZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGRpc2FibGVkOiAoKHBhZ2VJbmRleCArIDEpICogbGVuZ3RoKSA+PSB0b3RhbCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBAY2xpY2s9XCJjaGFuZ2VQYWdlKHBhZ2VJbmRleCArIDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBoaWRkZW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCB2LWZvcj1cImhpZGRlbklucHV0IGluIGhpZGRlbklucHV0c1wiXHJcbiAgICAgICAgICAgICAgICAgICA6a2V5PVwiaGlkZGVuSW5wdXQubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICA6bmFtZT1cImhpZGRlbklucHV0Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgOnZhbHVlPVwiaGlkZGVuSW5wdXQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YCxcclxufTtcclxuXHJcbndpbmRvdy5pY2JpbkRhdGFUYWJsZS5yZW1vdmUgPSB7XHJcbiAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLXJlbW92ZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRleHQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXHJcbiAgICB9LFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgOmNsYXNzPVwieyAnaWNiaW5EYXRhdGFibGVSZW1vdmUnOiB0cnVlLCBkaXNhYmxlZDogZGlzYWJsZWQgfVwiXHJcbiAgICAgICBAY2xpY2s9XCIhZGlzYWJsZWQgJiYgJGVtaXQoJ2RlbGV0ZScsIHRleHQucHJvbXB0KVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiPjwvaT5cclxuICAgICAgICB7eyB0ZXh0LnJlbW92ZSB9fVxyXG4gICAgPC9hPmAsXHJcbn07XHJcblxyXG53aW5kb3cuaWNiaW5EYXRhVGFibGUuY2hlY2tib3ggPSB7XHJcbiAgICBuYW1lOiAnaWNiaW4tZGF0YXRhYmxlLWNoZWNrYm94JyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgZGF0YTogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgICByb3dJbmRleDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgY29sdW1uTmFtZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgbGFiZWw6IHsgZGVmYXVsdDogJycgfSxcclxuICAgICAgICBjaGVja2VkOiB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9LFxyXG4gICAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXHJcbiAgICAgICAgY2xhc3NlczogeyBkZWZhdWx0OiAnJyB9LFxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGUoY2hlY2tlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5kYXRhLmZpbHRlcigocm93KSA9PiByb3cuJHJvd0luZGV4ID09PSB0aGlzLnJvd0luZGV4KVswXVt0aGlzLmNvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICBjZWxsLmNvbXBvbmVudC52YWx1ZS5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgY2VsbC5oaWRkZW5JbnB1dC52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCEhY2hlY2tlZCk7XHJcbiAgICAgICAgICAgIGNlbGwuc29ydCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvbmVudCcsICdjaGVja2VkJyk7XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy4kZW1pdCgnY29tcG9uZW50JywgJ2NoZWNrZWQnKTtcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGxhYmVsIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVDaGVja2JveF9fY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIDpjaGVja2VkPVwiY2hlY2tlZFwiXHJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgOmNsYXNzPVwiY2xhc3Nlc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWNiaW5EYXRhdGFibGVDaGVja2JveFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIEBjaGFuZ2U9XCJ1cGRhdGUoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPlxyXG4gICAgICAgIDxzcGFuIHYtaWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5gLFxyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBRUFBLE1BQU0sQ0FBQ0MsY0FBUCxHQUF3QixFQUF4QixDLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBRCxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLEtBQXRCLEdBQThCO0VBQzFCQyxJQUFJLEVBQUUsaUJBRG9CO0VBRTFCQyxLQUFLLEVBQUU7SUFDSEMsSUFBSSxFQUFFLE1BREg7SUFFSEMsS0FBSyxFQUFFO0VBRkosQ0FGbUI7RUFNMUJDLEtBQUssRUFBRTtJQUNIQyxJQUFJLEVBQUU7TUFDRjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQUMsSUFBSSxFQUFFQyxLQXRCSjtNQXVCRkMsUUFBUSxFQUFFO0lBdkJSLENBREg7SUEwQkhDLE9BQU8sRUFBRTtNQUNMSCxJQUFJLEVBQUVDLEtBREQ7TUFFTEMsUUFBUSxFQUFFO0lBRkwsQ0ExQk47SUE4QkhFLElBQUksRUFBRTtNQUNGO01BQ0FKLElBQUksRUFBRUssTUFGSjtNQUdGSCxRQUFRLEVBQUU7SUFIUixDQTlCSDtJQW1DSEksV0FBVyxFQUFFO01BQ1Q7TUFDQUMsT0FBTyxFQUFFO0lBRkEsQ0FuQ1Y7SUF1Q0hDLGFBQWEsRUFBRTtNQUNYUixJQUFJLEVBQUVTLE1BREs7TUFF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 \ No newline at end of file diff --git a/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js b/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js deleted file mode 100644 index 1dcd5e6a4..000000000 --- a/Lombiq.DataTables/wwwroot/lombiq/jquery-datatables-autoinit.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -jQuery(function ($) { - $('table.data-table').each(function dataTableEach() { - var options = this.getAttribute('data-options'); - $(this).dataTable(options ? JSON.parse(options) : undefined); - }); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqUXVlcnkiLCIkIiwiZWFjaCIsImRhdGFUYWJsZUVhY2giLCJvcHRpb25zIiwiZ2V0QXR0cmlidXRlIiwiZGF0YVRhYmxlIiwiSlNPTiIsInBhcnNlIiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vQXNzZXRzL1NjcmlwdHMvanF1ZXJ5LWRhdGF0YWJsZXMtYXV0b2luaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsialF1ZXJ5KCgkKSA9PiB7XHJcbiAgICAkKCd0YWJsZS5kYXRhLXRhYmxlJykuZWFjaChmdW5jdGlvbiBkYXRhVGFibGVFYWNoKCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1vcHRpb25zJyk7XHJcbiAgICAgICAgJCh0aGlzKS5kYXRhVGFibGUob3B0aW9ucyA/IEpTT04ucGFyc2Uob3B0aW9ucykgOiB1bmRlZmluZWQpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUFBLE1BQU0sQ0FBQyxVQUFDQyxDQUFELEVBQU87RUFDVkEsQ0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0JDLElBQXRCLENBQTJCLFNBQVNDLGFBQVQsR0FBeUI7SUFDaEQsSUFBTUMsT0FBTyxHQUFHLEtBQUtDLFlBQUwsQ0FBa0IsY0FBbEIsQ0FBaEI7SUFDQUosQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRSyxTQUFSLENBQWtCRixPQUFPLEdBQUdHLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixPQUFYLENBQUgsR0FBeUJLLFNBQWxEO0VBQ0gsQ0FIRDtBQUlILENBTEssQ0FBTiJ9 \ No newline at end of file diff --git a/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js b/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js deleted file mode 100644 index 9c4f65e09..000000000 --- a/Lombiq.DataTables/wwwroot/lombiq/lombiq-datatables.js +++ /dev/null @@ -1,564 +0,0 @@ -"use strict"; - -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -/** - * @summary Lombiq - Data Tables - * @description Abstraction over the jQuery.DataTables plugin to display Query results in a data table. - * @version 1.0 - * @file lombiq-datatables.js - * @author Lombiq Technologies Ltd. - */ - -/* global URI */ -(function lombiqDatatables($, window, document, history) { - var pluginName = 'lombiq_DataTables'; - var useDefaultButtons = 'useDefaultButtons'; - var defaults = { - dataTablesOptions: { - searching: true, - paging: true, - processing: true, - info: true, - lengthChange: true, - scrollX: true, - dom: "<'row dataTables_buttons'<'col-md-12'B>>" + "<'row dataTables_controls'<'col-md-6 dataTables_length'l><'col-md-6 dataTables_search'f>>" + "<'row dataTables_content'<'col-md-12't>>" + "<'row dataTables_footer'<'col-md-12'ip>>", - buttons: useDefaultButtons - }, - rowClassName: '', - queryId: '', - dataProvider: '', - rowsApiUrl: '', - serverSidePagingEnabled: false, - queryStringParametersLocalStorageKey: '', - templates: {}, - errorsSelector: null, - childRowOptions: { - childRowsEnabled: false, - asyncLoading: false, - apiUrl: '', - childRowDisplayType: '', - additionalDataTablesOptions: { - columnDefs: [{ - orderable: false, - targets: 0 - }], - order: [[1, 'asc']] - }, - childRowClassName: '', - toggleChildRowButtonClassName: '', - childRowVisibleClassName: '' - }, - progressiveLoadingOptions: { - progressiveLoadingEnabled: false, - skip: 0, - batchSize: 0, - finishedCallback: function finishedCallback() {}, - batchCallback: function batchCallback() {}, - itemCallback: function itemCallback() {} - }, - callbacks: { - ajaxDataLoadedCallback: function ajaxDataLoadedCallback() {} - } - }; - - function Plugin(element, options) { - this.element = element; - this.settings = $.extend(true, {}, defaults, options); - this._defaults = defaults; - this._name = pluginName; - this.init(); - } - - $.extend(Plugin.prototype, { - dataTableElement: null, - dataTableApi: null, - originalQueryStringParameters: '', - - /** - * Initializes the Lombiq DataTable plugin where the jQuery DataTables plugin will be also initialized. - */ - init: function init() { - var plugin = this; - var stateJson = '{}'; - - plugin.customizeAjaxParameters = function customizeParameters(parameters) { - return parameters; - }; - - plugin.originalQueryStringParameters = new URI().search(true); - var dataTablesOptions = $.extend({}, plugin.settings.dataTablesOptions); - - dataTablesOptions.rowCallback = function dataTablesRowCallback(row, data) { - if (data.id) { - $(row).addClass(plugin.settings.rowClassName).attr('data-contentitemid', data.id); - } - }; - - function convertDate(date) { - var locale = 'en-US'; - if (plugin.settings.culture) locale = plugin.settings.culture; - return date.toLocaleDateString(locale); - } // Conditional renderer. - - - dataTablesOptions.columnDefs = [{ - targets: '_all', - render: function render(data) { - if (data == null) return ''; // If data is Boolean. - - if (data === !!data) return data ? plugin.settings.texts.yes : plugin.settings.texts.no; - if ($.isArray(data)) return data.join(', '); - var isString = typeof data === 'string'; // If data is ISO date. - - if (isString && data.match(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.?\d*([+-][0-2]\d:[0-5]\d|Z)/)) { - return convertDate(new Date(data)); - } // If data is a template. - - - var template = isString ? data.match(/^\s*{{\s*([^:]+)\s*:\s*([^}]*[^ \t}])\s*}}\s*$/) : null; - - if (template && template[1] && template[2]) { - var templateName = template[1]; - var templateData = template[2]; - return dataTablesOptions.templates[templateName].replace(/{{\s*data\s*}}/g, templateData); - } - - switch (data.Type) { - case 'ExportLink': - return '' + data.Text + ''; - - case 'ExportDate': - return convertDate(new Date(data.Year, data.Month - 1, data.Day)); - - default: - return data; - } - } - }]; // This is a workaround to properly adjust column widths. - - var originalInitCompleteHandler = dataTablesOptions.initComplete ? dataTablesOptions.initComplete : function emptyFunction() {}; - - dataTablesOptions.initComplete = function dataTablesInitComplete() { - plugin.adjustColumns(); - originalInitCompleteHandler.apply(this); - }; - - if (plugin.settings.childRowOptions.childRowsEnabled) { - dataTablesOptions.order = [[1, 'asc']]; - dataTablesOptions.columnDefs.push({ - orderable: false, - defaultContent: '
', - targets: 0 - }); - } - - var providerName = window.location.href.includes('/Admin/DataTable/') ? window.location.href.replace(/.*\/Admin\/DataTable\/([^/?]+)[/?].*/, '$1') : URI(window.location.href).search(true).providerName; - plugin.providerName = providerName; // Initialize server-side paging unless progressive loading is enabled. - - if (plugin.settings.serverSidePagingEnabled && !plugin.settings.progressiveLoadingOptions.progressiveLoadingEnabled) { - var _window$performance$n; - - var $element = $(plugin.element); - var latestDraw = 0; - dataTablesOptions.serverSide = true; - plugin.history = { - isHistory: false, - isRedraw: false, - isFirst: true - }; - - var getJsonParameters = function getJsonParameters(params) { - var internalParameters = plugin.cleanUpDataTablesAjaxParameters(params); - var extendedParameters = plugin.customizeAjaxParameters($.extend({}, internalParameters, { - queryId: plugin.settings.queryId, - dataProvider: plugin.settings.dataProvider, - originalUrl: window.location.href - })); - var jsonParameters = JSON.stringify(extendedParameters); - stateJson = jsonParameters; - - if (plugin.settings.queryStringParametersLocalStorageKey && 'localStorage' in window) { - var key = plugin.settings.queryStringParametersLocalStorageKey; - - try { - localStorage.setItem(key, jsonParameters); - } catch (exception) { - try { - localStorage[key] = jsonParameters; - } catch (innerException) {// If localStorage won't work there is nothing to do. - } - } - } - - if (plugin.settings.errorsSelector) $(plugin.settings.errorsSelector).hide(); - - if (!jsonParameters || !jsonParameters.match || jsonParameters.match(/^\s*$/)) { - alert('jsonParameters is null or empty!\n' + 'params:\n' + JSON.stringify(params) + '\n' + 'internalParameters:\n' + JSON.stringify(internalParameters) + '\n' + 'extendedParameters:\n' + JSON.stringify(extendedParameters) + '\n' + 'jsonParameters:\n' + JSON.stringify(jsonParameters) + '\n'); - } - - return jsonParameters; - }; - - var createHistoryState = function createHistoryState(data) { - var state = { - data: data, - providerName: providerName, - order: $element.DataTable().order() - }; - var userEvent = { - plugin: plugin, - state: state - }; - $element.trigger('createstate.lombiqdt', userEvent); - return userEvent.state; - }; - - $element.on('preXhr.dt', function () { - if (plugin.history.isFirst || plugin.history.isHistory || plugin.history.isRedraw || window.history.state === null) { - plugin.history.isFirst = false; - return; - } - - history.pushState(createHistoryState(), document.title); - }); - $(window).on('popstate', function (event) { - var state = event.originalEvent.state; - if (!state || !state.providerName || state.providerName !== providerName) return; - plugin.history.isHistory = true; - var userEvent = { - plugin: plugin, - state: state, - cancel: false - }; - $element.trigger('popstate.lombiqdt', userEvent); - if (!userEvent.cancel) $element.DataTable().ajax.reload(); - plugin.history.isHistory = false; - }); // See: https://stackoverflow.com/questions/5004978/check-if-page-gets-reloaded-or-refreshed-in-javascript/53307588#53307588 - - var pageAccessedByReload = ((_window$performance$n = window.performance.navigation) === null || _window$performance$n === void 0 ? void 0 : _window$performance$n.type) === 1 || window.performance.getEntriesByType('navigation').map(function (nav) { - return nav.type; - }).includes('reload'); - - dataTablesOptions.ajax = function dataTablesOptionsAjax(params, callback) { - var _history$state, _latestDraw, _requestData$search$v, _requestData$search, _history$state$data$s, _history$state2, _history$state2$data, _history$state2$data$; - - var isNewRequest = pageAccessedByReload || _typeof(history.state) !== 'object' || !((_history$state = history.state) !== null && _history$state !== void 0 && _history$state.data); - - if (isNewRequest) { - var data = JSON.parse(getJsonParameters(params)); - history.replaceState(createHistoryState(data), document.title); - } - - var requestData = $.extend({}, history.state.data); - if (!isNewRequest) requestData.draw = ((_latestDraw = latestDraw) !== null && _latestDraw !== void 0 ? _latestDraw : 0) + 3; - var $wrapper = $element.closest('.dataTables_wrapper'); - var instance = $element.DataTable(); - $wrapper.find('.dataTables_filter input[type="search"][aria-controls="dataTable"]').val((_requestData$search$v = (_requestData$search = requestData.search) === null || _requestData$search === void 0 ? void 0 : _requestData$search.value) !== null && _requestData$search$v !== void 0 ? _requestData$search$v : ''); - $wrapper.find('.dataTables_length select[aria-controls="dataTable"]').val(requestData.length); - instance.order(history.state.order); - instance.search((_history$state$data$s = (_history$state2 = history.state) === null || _history$state2 === void 0 ? void 0 : (_history$state2$data = _history$state2.data) === null || _history$state2$data === void 0 ? void 0 : (_history$state2$data$ = _history$state2$data.search) === null || _history$state2$data$ === void 0 ? void 0 : _history$state2$data$.value) !== null && _history$state$data$s !== void 0 ? _history$state$data$s : ''); - var userEvent = { - plugin: plugin, - requestData: requestData, - isHistory: plugin.history.isHistory - }; - $element.trigger('preXhr.lombiqdt', userEvent); - $.ajax({ - method: 'GET', - url: plugin.settings.rowsApiUrl, - data: plugin.buildQueryStringParameters({ - requestJson: JSON.stringify(userEvent.requestData) - }), - success: function success(response) { - plugin.settings.callbacks.ajaxDataLoadedCallback(response); - latestDraw = response.draw; - $wrapper.attr('data-draw', latestDraw); - callback(response); - var page = history.state.data.start / history.state.data.length; - plugin.history.isRedraw = true; - if (instance.page() !== page) instance.page(page).draw('page'); - - if (instance.page.len() !== history.state.data.length) { - instance.page.len(history.state.data.length).draw('page'); - } - - plugin.history.isRedraw = false; - } - }); - }; - } - - function exportAction(exportAll) { - return function getExports() { - window.location.href = URI(plugin.settings.export.api).search({ - requestJson: stateJson, - exportAll: exportAll - }); - }; - } - - function getExportButtons() { - return [{ - text: plugin.settings.export.textAll, - action: exportAction(true) - }, { - text: plugin.settings.export.textVisible, - action: exportAction(false) - }]; - } - - if (dataTablesOptions.buttons === useDefaultButtons) { - dataTablesOptions.buttons = getExportButtons(); - } else if (dataTablesOptions.buttons && dataTablesOptions.buttons.forEach) { - dataTablesOptions.buttons.forEach(function (button) { - if (button.buttons === useDefaultButtons) button.buttons = getExportButtons(); - }); - } - - if (plugin.settings.errorsSelector) { - $.fn.dataTable.ext.errMode = 'none'; - $(plugin.element).on('error.dt', function (e, settings, techNote, message) { - $(plugin.settings.errorsSelector).text(message).show(); - }); - } - - plugin.dataTableElement = $(plugin.element).dataTable(dataTablesOptions); - plugin.dataTableApi = plugin.dataTableElement.api(); // Register toggle button click listeners if child rows are enabled. - - if (plugin.settings.childRowOptions.childRowsEnabled) { - plugin.dataTableElement.on('click', '.' + plugin.settings.childRowOptions.toggleChildRowButtonClassName, function dataTableElementOnClick() { - var parentRowElement = $(this).closest('tr'); - - if (plugin.settings.childRowOptions.asyncLoading) { - var contentItemId = parentRowElement.attr('data-contentitemid'); - $.ajax({ - type: 'GET', - url: plugin.settings.childRowOptions.apiUrl, - data: { - contentItemId: contentItemId, - dataProvider: plugin.settings.dataProvider, - originalUrl: window.location.href - }, - success: function success(data) { - if (!data.error) { - plugin.toggleChildRow(parentRowElement, data.content); - } else { - alert(data.error); - } - } - }); - } else { - var childRowContent = $('[data-parent="' + parentRowElement.attr('id') + '"]').html(); - plugin.toggleChildRow(parentRowElement, childRowContent); - } - }); - } // Fetch items if progressive loading is enabled. - - - if (!plugin.settings.serverSidePagingEnabled && plugin.settings.progressiveLoadingOptions.progressiveLoadingEnabled) { - plugin.fetchRowsProgressively(); - } - }, - - /** - * Removes unnecessary DataTables ajax parameters and updates property names and values to match server data - * model. - * @param {object} parameters Parameters generated by the DataTables plugin to be sent to the server. - * @returns {object} Cleaned-up query string parameters. - */ - cleanUpDataTablesAjaxParameters: function cleanUpDataTablesAjaxParameters(parameters) { - // Replacing column index to column name. - // Also rename properties and values to match back-end data model. - for (var i = 0; i < parameters.order.length; i++) { - var orderData = parameters.order[i]; - var columnIndex = orderData.column; - orderData.column = parameters.columns[columnIndex].name; - orderData.direction = orderData.dir === 'asc' ? 'ascending' : 'descending'; - delete orderData.dir; - } // Send only filtered column data. - - - var columnFilters = []; - - for (var j = 0; j < parameters.columns.length; j++) { - var column = parameters.columns[j]; - if (column.search.value) columnFilters.push(column); - } - - parameters.columnFilters = columnFilters; - delete parameters.columns; // Remove global search parameters if there is no search value given. - - if (!parameters.search.value) delete parameters.search; - return parameters; - }, - - /** - * Shows or hides child row filled with the given content. - * @param {jQuery} parentRowElement Parent row element where the child row will be displayed. - * @param {object} childRowContent Content of the child row. A wrapper will be added automatically. - */ - toggleChildRow: function toggleChildRow(parentRowElement, childRowContent) { - var plugin = this; - var dataTableRow = plugin.dataTableApi.row(parentRowElement); - - if (dataTableRow.child.isShown()) { - dataTableRow.child.hide(); - parentRowElement.removeClass(plugin.settings.childRowOptions.childRowVisibleClassName); - } else { - dataTableRow.child(childRowContent, plugin.settings.childRowOptions.childRowClassName).show(); - parentRowElement.addClass(plugin.settings.childRowOptions.childRowVisibleClassName); - } - }, - - /** - * Fetches the rows from the API using progressive loading. - */ - fetchRowsProgressively: function fetchRowsProgressively() { - var plugin = this; - if (!plugin.settings.progressiveLoadingOptions.progressiveLoadingEnabled) return; - plugin.dataTableApi.processing(true); - var options = { - queryId: plugin.settings.queryId, - dataProvider: plugin.settings.dataProvider, - apiUrl: plugin.settings.rowsApiUrl, - itemCallback: function itemCallback(id, data, response) { - if (plugin.settings.progressiveLoadingOptions.itemCallback) { - plugin.settings.progressiveLoadingOptions.itemCallback(id, data, response); - } - - plugin.dataTableApi.row.add(data).draw(); - }, - finishedCallback: function finishedCallback(success, total) { - if (plugin.settings.progressiveLoadingOptions.finishedCallback) { - plugin.settings.progressiveLoadingOptions.finishedCallback(success, total); - } - - plugin.dataTableApi.processing(false); - } - }; - plugin.progressiveLoad($.extend({}, plugin.settings.progressiveLoadingOptions, options)); - }, - - /** - * Builds query string parameters that includes the given parameters and the current URL's query string - * parameters. - * The original query string parameters are traditionally encoded to preserve their query string keys, - * while the ones used by DataTables aren't. - * @param {object} data Data that needs to be merged with the current URL query string parameters. - * @returns {object} Merged query string parameters. - */ - buildQueryStringParameters: function buildQueryStringParameters(data) { - // This is necessary to preserve the original structure of the initial query string: - // Traditional encoding ensures that if a key has multiple values (e.g. "?name=value1&name=value2"), - // then the key won't be changed to "name[]". - var originalQueryStringEncoded = $.param(this.originalQueryStringParameters, true); - return (originalQueryStringEncoded ? originalQueryStringEncoded + '&' : '') + $.param(data); - }, - - /** - * Low-level functionality for loading rows from the API. The result is accessible using the callback. - * @param {number} skip Number of items to be skipped by the API. - * @param {Object} options Options required for the API call (e.g. API URL, data provider). - * @param {callback} callback Callback for returning rows. - */ - loadRows: function loadRows(skip, options, callback) { - var plugin = this; - $.ajax({ - type: 'GET', - url: options.apiUrl, - data: plugin.buildQueryStringParameters({ - queryId: options.queryId, - start: skip, - length: options.batchSize, - dataProvider: options.dataProvider, - originalUrl: window.location.href - }), - success: function success(response) { - if (callback) { - callback(!response.error, response); - } - }, - fail: function fail() { - if (callback) { - callback(false); - } - } - }); - }, - - /** - * Adjusts datatable columns. - */ - adjustColumns: function adjustColumns() { - var plugin = this; // This is a workaround to properly adjust column widths. - - setTimeout(function () { - plugin.dataTableApi.columns.adjust(); - }, 10); - }, - - /** - * Low-level functionality of progressive loading. It will fetch content shapes from the given API. - * The shapes will be processed using callbacks. - * @param {Object} options Progressive loading options including API URL and callbacks. - */ - progressiveLoad: function progressiveLoad(options) { - var plugin = this; - var total = 0; - var skip = options.skip; - - var callback = function callback(success, response) { - if (success && response) { - var count = response.data.length; - total += count; - - if (options.batchCallback) { - options.batchCallback(response, total); - } - - if (count > 0 && options.itemCallback) { - $.each(response.data, function (index, value) { - options.itemCallback(index, value, response); - }); - } - - if (count > 0 && count >= options.batchSize) { - skip += count; - plugin.loadRows(skip, options, callback); - } else if (options.finishedCallback) { - options.finishedCallback(true, total); - } - } else { - if (response) { - alert(response.error); - } - - if (options.finishedCallback) { - options.finishedCallback(false, total); - } - } - }; - - plugin.loadRows(skip, options, callback); - } - }); - - $.fn[pluginName] = function pluginNameFunction(options) { - // Return null if the element query is invalid. - if (!this || this.length === 0) return null; // "map" makes it possible to return the already existing or currently initialized plugin instances. - - return this.map(function pluginMapFunction() { - // If "options" is defined, but the plugin is not instantiated on this element ... - if (options && !$.data(this, 'plugin_' + pluginName)) { - // ... then create a plugin instance ... - $.data(this, 'plugin_' + pluginName, new Plugin($(this), options)); - } // ... and then return the plugin instance, which might be null - // if the plugin is not instantiated on this element and 'options' is undefined. - - - return $.data(this, 'plugin_' + pluginName); - }); - }; -})(jQuery, window, document, window.history); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb21iaXFEYXRhdGFibGVzIiwiJCIsIndpbmRvdyIsImRvY3VtZW50IiwiaGlzdG9yeSIsInBsdWdpbk5hbWUiLCJ1c2VEZWZhdWx0QnV0dG9ucyIsImRlZmF1bHRzIiwiZGF0YVRhYmxlc09wdGlvbnMiLCJzZWFyY2hpbmciLCJwYWdpbmciLCJwcm9jZXNzaW5nIiwiaW5mbyIsImxlbmd0aENoYW5nZSIsInNjcm9sbFgiLCJkb20iLCJidXR0b25zIiwicm93Q2xhc3NOYW1lIiwicXVlcnlJZCIsImRhdGFQcm92aWRlciIsInJvd3NBcGlVcmwiLCJzZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCIsInF1ZXJ5U3RyaW5nUGFyYW1ldGVyc0xvY2FsU3RvcmFnZUtleSIsInRlbXBsYXRlcyIsImVycm9yc1NlbGVjdG9yIiwiY2hpbGRSb3dPcHRpb25zIiwiY2hpbGRSb3dzRW5hYmxlZCIsImFzeW5jTG9hZGluZyIsImFwaVVybCIsImNoaWxkUm93RGlzcGxheVR5cGUiLCJhZGRpdGlvbmFsRGF0YVRhYmxlc09wdGlvbnMiLCJjb2x1bW5EZWZzIiwib3JkZXJhYmxlIiwidGFyZ2V0cyIsIm9yZGVyIiwiY2hpbGRSb3dDbGFzc05hbWUiLCJ0b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZSIsImNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSIsInByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMiLCJwcm9ncmVzc2l2ZUxvYWRpbmdFbmFibGVkIiwic2tpcCIsImJhdGNoU2l6ZSIsImZpbmlzaGVkQ2FsbGJhY2siLCJiYXRjaENhbGxiYWNrIiwiaXRlbUNhbGxiYWNrIiwiY2FsbGJhY2tzIiwiYWpheERhdGFMb2FkZWRDYWxsYmFjayIsIlBsdWdpbiIsImVsZW1lbnQiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJleHRlbmQiLCJfZGVmYXVsdHMiLCJfbmFtZSIsImluaXQiLCJwcm90b3R5cGUiLCJkYXRhVGFibGVFbGVtZW50IiwiZGF0YVRhYmxlQXBpIiwib3JpZ2luYWxRdWVyeVN0cmluZ1BhcmFtZXRlcnMiLCJwbHVnaW4iLCJzdGF0ZUpzb24iLCJjdXN0b21pemVBamF4UGFyYW1ldGVycyIsImN1c3RvbWl6ZVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiVVJJIiwic2VhcmNoIiwicm93Q2FsbGJhY2siLCJkYXRhVGFibGVzUm93Q2FsbGJhY2siLCJyb3ciLCJkYXRhIiwiaWQiLCJhZGRDbGFzcyIsImF0dHIiLCJjb252ZXJ0RGF0ZSIsImRhdGUiLCJsb2NhbGUiLCJjdWx0dXJlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwicmVuZGVyIiwidGV4dHMiLCJ5ZXMiLCJubyIsImlzQXJyYXkiLCJqb2luIiwiaXNTdHJpbmciLCJtYXRjaCIsIkRhdGUiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInRlbXBsYXRlRGF0YSIsInJlcGxhY2UiLCJUeXBlIiwiVXJsIiwiVGV4dCIsIlllYXIiLCJNb250aCIsIkRheSIsIm9yaWdpbmFsSW5pdENvbXBsZXRlSGFuZGxlciIsImluaXRDb21wbGV0ZSIsImVtcHR5RnVuY3Rpb24iLCJkYXRhVGFibGVzSW5pdENvbXBsZXRlIiwiYWRqdXN0Q29sdW1ucyIsImFwcGx5IiwicHVzaCIsImRlZmF1bHRDb250ZW50IiwicHJvdmlkZXJOYW1lIiwibG9jYXRpb24iLCJocmVmIiwiaW5jbHVkZXMiLCIkZWxlbWVudCIsImxhdGVzdERyYXciLCJzZXJ2ZXJTaWRlIiwiaXNIaXN0b3J5IiwiaXNSZWRyYXciLCJpc0ZpcnN0IiwiZ2V0SnNvblBhcmFtZXRlcnMiLCJwYXJhbXMiLCJpbnRlcm5hbFBhcmFtZXRlcnMiLCJjbGVhblVwRGF0YVRhYmxlc0FqYXhQYXJhbWV0ZXJzIiwiZXh0ZW5kZWRQYXJhbWV0ZXJzIiwib3JpZ2luYWxVcmwiLCJqc29uUGFyYW1ldGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJrZXkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiZXhjZXB0aW9uIiwiaW5uZXJFeGNlcHRpb24iLCJoaWRlIiwiYWxlcnQiLCJjcmVhdGVIaXN0b3J5U3RhdGUiLCJzdGF0ZSIsIkRhdGFUYWJsZSIsInVzZXJFdmVudCIsInRyaWdnZXIiLCJvbiIsInB1c2hTdGF0ZSIsInRpdGxlIiwiZXZlbnQiLCJvcmlnaW5hbEV2ZW50IiwiY2FuY2VsIiwiYWpheCIsInJlbG9hZCIsInBhZ2VBY2Nlc3NlZEJ5UmVsb2FkIiwicGVyZm9ybWFuY2UiLCJuYXZpZ2F0aW9uIiwidHlwZSIsImdldEVudHJpZXNCeVR5cGUiLCJtYXAiLCJuYXYiLCJkYXRhVGFibGVzT3B0aW9uc0FqYXgiLCJjYWxsYmFjayIsImlzTmV3UmVxdWVzdCIsInBhcnNlIiwicmVwbGFjZVN0YXRlIiwicmVxdWVzdERhdGEiLCJkcmF3IiwiJHdyYXBwZXIiLCJjbG9zZXN0IiwiaW5zdGFuY2UiLCJmaW5kIiwidmFsIiwidmFsdWUiLCJsZW5ndGgiLCJtZXRob2QiLCJ1cmwiLCJidWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyIsInJlcXVlc3RKc29uIiwic3VjY2VzcyIsInJlc3BvbnNlIiwicGFnZSIsInN0YXJ0IiwibGVuIiwiZXhwb3J0QWN0aW9uIiwiZXhwb3J0QWxsIiwiZ2V0RXhwb3J0cyIsImV4cG9ydCIsImFwaSIsImdldEV4cG9ydEJ1dHRvbnMiLCJ0ZXh0IiwidGV4dEFsbCIsImFjdGlvbiIsInRleHRWaXNpYmxlIiwiZm9yRWFjaCIsImJ1dHRvbiIsImZuIiwiZGF0YVRhYmxlIiwiZXh0IiwiZXJyTW9kZSIsImUiLCJ0ZWNoTm90ZSIsIm1lc3NhZ2UiLCJzaG93IiwiZGF0YVRhYmxlRWxlbWVudE9uQ2xpY2siLCJwYXJlbnRSb3dFbGVtZW50IiwiY29udGVudEl0ZW1JZCIsImVycm9yIiwidG9nZ2xlQ2hpbGRSb3ciLCJjb250ZW50IiwiY2hpbGRSb3dDb250ZW50IiwiaHRtbCIsImZldGNoUm93c1Byb2dyZXNzaXZlbHkiLCJpIiwib3JkZXJEYXRhIiwiY29sdW1uSW5kZXgiLCJjb2x1bW4iLCJjb2x1bW5zIiwibmFtZSIsImRpcmVjdGlvbiIsImRpciIsImNvbHVtbkZpbHRlcnMiLCJqIiwiZGF0YVRhYmxlUm93IiwiY2hpbGQiLCJpc1Nob3duIiwicmVtb3ZlQ2xhc3MiLCJhZGQiLCJ0b3RhbCIsInByb2dyZXNzaXZlTG9hZCIsIm9yaWdpbmFsUXVlcnlTdHJpbmdFbmNvZGVkIiwicGFyYW0iLCJsb2FkUm93cyIsImZhaWwiLCJzZXRUaW1lb3V0IiwiYWRqdXN0IiwiY291bnQiLCJlYWNoIiwiaW5kZXgiLCJwbHVnaW5OYW1lRnVuY3Rpb24iLCJwbHVnaW5NYXBGdW5jdGlvbiIsImpRdWVyeSJdLCJzb3VyY2VzIjpbIi4uLy4uL0Fzc2V0cy9TY3JpcHRzL2xvbWJpcS1kYXRhdGFibGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAc3VtbWFyeSAgICAgTG9tYmlxIC0gRGF0YSBUYWJsZXNcclxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0aW9uIG92ZXIgdGhlIGpRdWVyeS5EYXRhVGFibGVzIHBsdWdpbiB0byBkaXNwbGF5IFF1ZXJ5IHJlc3VsdHMgaW4gYSBkYXRhIHRhYmxlLlxyXG4gKiBAdmVyc2lvbiAgICAgMS4wXHJcbiAqIEBmaWxlICAgICAgICBsb21iaXEtZGF0YXRhYmxlcy5qc1xyXG4gKiBAYXV0aG9yICAgICAgTG9tYmlxIFRlY2hub2xvZ2llcyBMdGQuXHJcbiAqL1xyXG5cclxuLyogZ2xvYmFsIFVSSSAqL1xyXG5cclxuKGZ1bmN0aW9uIGxvbWJpcURhdGF0YWJsZXMoJCwgd2luZG93LCBkb2N1bWVudCwgaGlzdG9yeSkge1xyXG4gICAgY29uc3QgcGx1Z2luTmFtZSA9ICdsb21iaXFfRGF0YVRhYmxlcyc7XHJcbiAgICBjb25zdCB1c2VEZWZhdWx0QnV0dG9ucyA9ICd1c2VEZWZhdWx0QnV0dG9ucyc7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgZGF0YVRhYmxlc09wdGlvbnM6IHtcclxuICAgICAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBwYWdpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGluZm86IHRydWUsXHJcbiAgICAgICAgICAgIGxlbmd0aENoYW5nZTogdHJ1ZSxcclxuICAgICAgICAgICAgc2Nyb2xsWDogdHJ1ZSxcclxuICAgICAgICAgICAgZG9tOiBcIjwncm93IGRhdGFUYWJsZXNfYnV0dG9ucyc8J2NvbC1tZC0xMidCPj5cIiArXHJcbiAgICAgICAgICAgICAgICBcIjwncm93IGRhdGFUYWJsZXNfY29udHJvbHMnPCdjb2wtbWQtNiBkYXRhVGFibGVzX2xlbmd0aCdsPjwnY29sLW1kLTYgZGF0YVRhYmxlc19zZWFyY2gnZj4+XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8J3JvdyBkYXRhVGFibGVzX2NvbnRlbnQnPCdjb2wtbWQtMTIndD4+XCIgK1xyXG4gICAgICAgICAgICAgICAgXCI8J3JvdyBkYXRhVGFibGVzX2Zvb3Rlcic8J2NvbC1tZC0xMidpcD4+XCIsXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6IHVzZURlZmF1bHRCdXR0b25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm93Q2xhc3NOYW1lOiAnJyxcclxuICAgICAgICBxdWVyeUlkOiAnJyxcclxuICAgICAgICBkYXRhUHJvdmlkZXI6ICcnLFxyXG4gICAgICAgIHJvd3NBcGlVcmw6ICcnLFxyXG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmdFbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnNMb2NhbFN0b3JhZ2VLZXk6ICcnLFxyXG4gICAgICAgIHRlbXBsYXRlczoge30sXHJcbiAgICAgICAgZXJyb3JzU2VsZWN0b3I6IG51bGwsXHJcbiAgICAgICAgY2hpbGRSb3dPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGNoaWxkUm93c0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhc3luY0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBhcGlVcmw6ICcnLFxyXG4gICAgICAgICAgICBjaGlsZFJvd0Rpc3BsYXlUeXBlOiAnJyxcclxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGFUYWJsZXNPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5EZWZzOiBbeyBvcmRlcmFibGU6IGZhbHNlLCB0YXJnZXRzOiAwIH1dLFxyXG4gICAgICAgICAgICAgICAgb3JkZXI6IFtbMSwgJ2FzYyddXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2hpbGRSb3dDbGFzc05hbWU6ICcnLFxyXG4gICAgICAgICAgICB0b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZTogJycsXHJcbiAgICAgICAgICAgIGNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBza2lwOiAwLFxyXG4gICAgICAgICAgICBiYXRjaFNpemU6IDAsXHJcbiAgICAgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgICAgYmF0Y2hDYWxsYmFjazogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgICBpdGVtQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbGxiYWNrczoge1xyXG4gICAgICAgICAgICBhamF4RGF0YUxvYWRlZENhbGxiYWNrOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gUGx1Z2luKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRzID0gZGVmYXVsdHM7XHJcbiAgICAgICAgdGhpcy5fbmFtZSA9IHBsdWdpbk5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgICQuZXh0ZW5kKFBsdWdpbi5wcm90b3R5cGUsIHtcclxuICAgICAgICBkYXRhVGFibGVFbGVtZW50OiBudWxsLFxyXG4gICAgICAgIGRhdGFUYWJsZUFwaTogbnVsbCxcclxuICAgICAgICBvcmlnaW5hbFF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogSW5pdGlhbGl6ZXMgdGhlIExvbWJpcSBEYXRhVGFibGUgcGx1Z2luIHdoZXJlIHRoZSBqUXVlcnkgRGF0YVRhYmxlcyBwbHVnaW4gd2lsbCBiZSBhbHNvIGluaXRpYWxpemVkLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG4gICAgICAgICAgICBsZXQgc3RhdGVKc29uID0gJ3t9JztcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5jdXN0b21pemVBamF4UGFyYW1ldGVycyA9IGZ1bmN0aW9uIGN1c3RvbWl6ZVBhcmFtZXRlcnMocGFyYW1ldGVycykgeyByZXR1cm4gcGFyYW1ldGVyczsgfTtcclxuICAgICAgICAgICAgcGx1Z2luLm9yaWdpbmFsUXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gbmV3IFVSSSgpLnNlYXJjaCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWJsZXNPcHRpb25zID0gJC5leHRlbmQoe30sIHBsdWdpbi5zZXR0aW5ncy5kYXRhVGFibGVzT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5yb3dDYWxsYmFjayA9IGZ1bmN0aW9uIGRhdGFUYWJsZXNSb3dDYWxsYmFjayhyb3csIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhwbHVnaW4uc2V0dGluZ3Mucm93Q2xhc3NOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1jb250ZW50aXRlbWlkJywgZGF0YS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxlID0gJ2VuLVVTJztcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuY3VsdHVyZSkgbG9jYWxlID0gcGx1Z2luLnNldHRpbmdzLmN1bHR1cmU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ29uZGl0aW9uYWwgcmVuZGVyZXIuXHJcbiAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLmNvbHVtbkRlZnMgPSBbe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0czogJ19hbGwnLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGF0YSBpcyBCb29sZWFuLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSAhIWRhdGEpIHJldHVybiBkYXRhID8gcGx1Z2luLnNldHRpbmdzLnRleHRzLnllcyA6IHBsdWdpbi5zZXR0aW5ncy50ZXh0cy5ubztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgSVNPIGRhdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWF0Y2goL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuP1xcZCooWystXVswLTJdXFxkOlswLTVdXFxkfFopLykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnREYXRlKG5ldyBEYXRlKGRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYSB0ZW1wbGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGlzU3RyaW5nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tYXRjaCgvXlxccyp7e1xccyooW146XSspXFxzKjpcXHMqKFtefV0qW14gXFx0fV0pXFxzKn19XFxzKiQvKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlWzFdICYmIHRlbXBsYXRlWzJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZVsyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFUYWJsZXNPcHRpb25zLnRlbXBsYXRlc1t0ZW1wbGF0ZU5hbWVdLnJlcGxhY2UoL3t7XFxzKmRhdGFcXHMqfX0vZywgdGVtcGxhdGVEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0V4cG9ydExpbmsnOiByZXR1cm4gJzxhIGhyZWY9XCInICsgZGF0YS5VcmwgKyAnXCI+JyArIGRhdGEuVGV4dCArICc8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRXhwb3J0RGF0ZSc6IHJldHVybiBjb252ZXJ0RGF0ZShuZXcgRGF0ZShkYXRhLlllYXIsIGRhdGEuTW9udGggLSAxLCBkYXRhLkRheSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9XTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIHByb3Blcmx5IGFkanVzdCBjb2x1bW4gd2lkdGhzLlxyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEluaXRDb21wbGV0ZUhhbmRsZXIgPSBkYXRhVGFibGVzT3B0aW9ucy5pbml0Q29tcGxldGVcclxuICAgICAgICAgICAgICAgID8gZGF0YVRhYmxlc09wdGlvbnMuaW5pdENvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7IH07XHJcbiAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLmluaXRDb21wbGV0ZSA9IGZ1bmN0aW9uIGRhdGFUYWJsZXNJbml0Q29tcGxldGUoKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uYWRqdXN0Q29sdW1ucygpO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxJbml0Q29tcGxldGVIYW5kbGVyLmFwcGx5KHRoaXMpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5zZXR0aW5ncy5jaGlsZFJvd09wdGlvbnMuY2hpbGRSb3dzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMub3JkZXIgPSBbWzEsICdhc2MnXV07XHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5jb2x1bW5EZWZzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICc8ZGl2IGNsYXNzPVwiYnRuIGJ1dHRvbiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy50b2dnbGVDaGlsZFJvd0J1dHRvbkNsYXNzTmFtZSArICdcIj48L2Rpdj4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IDAsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJOYW1lID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9BZG1pbi9EYXRhVGFibGUvJylcclxuICAgICAgICAgICAgICAgID8gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvLipcXC9BZG1pblxcL0RhdGFUYWJsZVxcLyhbXi8/XSspWy8/XS4qLywgJyQxJylcclxuICAgICAgICAgICAgICAgIDogVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2godHJ1ZSkucHJvdmlkZXJOYW1lO1xyXG4gICAgICAgICAgICBwbHVnaW4ucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xyXG5cclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzZXJ2ZXItc2lkZSBwYWdpbmcgdW5sZXNzIHByb2dyZXNzaXZlIGxvYWRpbmcgaXMgZW5hYmxlZC5cclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5zZXR0aW5ncy5zZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgIXBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLnByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChwbHVnaW4uZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGxhdGVzdERyYXcgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFUYWJsZXNPcHRpb25zLnNlcnZlclNpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNIaXN0b3J5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc1JlZHJhdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0SnNvblBhcmFtZXRlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxQYXJhbWV0ZXJzID0gcGx1Z2luLmNsZWFuVXBEYXRhVGFibGVzQWpheFBhcmFtZXRlcnMocGFyYW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRQYXJhbWV0ZXJzID0gcGx1Z2luLmN1c3RvbWl6ZUFqYXhQYXJhbWV0ZXJzKCQuZXh0ZW5kKHt9LCBpbnRlcm5hbFBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlJZDogcGx1Z2luLnNldHRpbmdzLnF1ZXJ5SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uUGFyYW1ldGVycyA9IEpTT04uc3RyaW5naWZ5KGV4dGVuZGVkUGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVKc29uID0ganNvblBhcmFtZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MucXVlcnlTdHJpbmdQYXJhbWV0ZXJzTG9jYWxTdG9yYWdlS2V5ICYmICdsb2NhbFN0b3JhZ2UnIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwbHVnaW4uc2V0dGluZ3MucXVlcnlTdHJpbmdQYXJhbWV0ZXJzTG9jYWxTdG9yYWdlS2V5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwganNvblBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlW2tleV0gPSBqc29uUGFyYW1ldGVycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChpbm5lckV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGxvY2FsU3RvcmFnZSB3b24ndCB3b3JrIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuZXJyb3JzU2VsZWN0b3IpICQocGx1Z2luLnNldHRpbmdzLmVycm9yc1NlbGVjdG9yKS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghanNvblBhcmFtZXRlcnMgfHwgIWpzb25QYXJhbWV0ZXJzLm1hdGNoIHx8IGpzb25QYXJhbWV0ZXJzLm1hdGNoKC9eXFxzKiQvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnanNvblBhcmFtZXRlcnMgaXMgbnVsbCBvciBlbXB0eSFcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJhbXM6XFxuJyArIEpTT04uc3RyaW5naWZ5KHBhcmFtcykgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZXJuYWxQYXJhbWV0ZXJzOlxcbicgKyBKU09OLnN0cmluZ2lmeShpbnRlcm5hbFBhcmFtZXRlcnMpICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVuZGVkUGFyYW1ldGVyczpcXG4nICsgSlNPTi5zdHJpbmdpZnkoZXh0ZW5kZWRQYXJhbWV0ZXJzKSArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqc29uUGFyYW1ldGVyczpcXG4nICsgSlNPTi5zdHJpbmdpZnkoanNvblBhcmFtZXRlcnMpICsgJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvblBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUhpc3RvcnlTdGF0ZSA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyTmFtZTogcHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogJGVsZW1lbnQuRGF0YVRhYmxlKCkub3JkZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyRXZlbnQgPSB7IHBsdWdpbiwgc3RhdGUgfTtcclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC50cmlnZ2VyKCdjcmVhdGVzdGF0ZS5sb21iaXFkdCcsIHVzZXJFdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyRXZlbnQuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICRlbGVtZW50Lm9uKCdwcmVYaHIuZHQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5oaXN0b3J5LmlzRmlyc3QgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkuaXNIaXN0b3J5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzUmVkcmF3IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnN0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoY3JlYXRlSGlzdG9yeVN0YXRlKCksIGRvY3VtZW50LnRpdGxlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQod2luZG93KS5vbigncG9wc3RhdGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUucHJvdmlkZXJOYW1lIHx8IHN0YXRlLnByb3ZpZGVyTmFtZSAhPT0gcHJvdmlkZXJOYW1lKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5oaXN0b3J5LmlzSGlzdG9yeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckV2ZW50ID0geyBwbHVnaW46IHBsdWdpbiwgc3RhdGU6IHN0YXRlLCBjYW5jZWw6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQudHJpZ2dlcigncG9wc3RhdGUubG9tYmlxZHQnLCB1c2VyRXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXNlckV2ZW50LmNhbmNlbCkgJGVsZW1lbnQuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaGlzdG9yeS5pc0hpc3RvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTAwNDk3OC9jaGVjay1pZi1wYWdlLWdldHMtcmVsb2FkZWQtb3ItcmVmcmVzaGVkLWluLWphdmFzY3JpcHQvNTMzMDc1ODgjNTMzMDc1ODhcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VBY2Nlc3NlZEJ5UmVsb2FkID0gd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24/LnR5cGUgPT09IDEgfHxcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbnRyaWVzQnlUeXBlKCduYXZpZ2F0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgobmF2KSA9PiBuYXYudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCdyZWxvYWQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVzT3B0aW9ucy5hamF4ID0gZnVuY3Rpb24gZGF0YVRhYmxlc09wdGlvbnNBamF4KHBhcmFtcywgY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc05ld1JlcXVlc3QgPSBwYWdlQWNjZXNzZWRCeVJlbG9hZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaGlzdG9yeS5zdGF0ZSAhPT0gJ29iamVjdCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWhpc3Rvcnkuc3RhdGU/LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmV3UmVxdWVzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShnZXRKc29uUGFyYW1ldGVycyhwYXJhbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY3JlYXRlSGlzdG9yeVN0YXRlKGRhdGEpLCBkb2N1bWVudC50aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9ICQuZXh0ZW5kKHt9LCBoaXN0b3J5LnN0YXRlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOZXdSZXF1ZXN0KSByZXF1ZXN0RGF0YS5kcmF3ID0gKGxhdGVzdERyYXcgPz8gMCkgKyAzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkd3JhcHBlciA9ICRlbGVtZW50LmNsb3Nlc3QoJy5kYXRhVGFibGVzX3dyYXBwZXInKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9ICRlbGVtZW50LkRhdGFUYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICR3cmFwcGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCcuZGF0YVRhYmxlc19maWx0ZXIgaW5wdXRbdHlwZT1cInNlYXJjaFwiXVthcmlhLWNvbnRyb2xzPVwiZGF0YVRhYmxlXCJdJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChyZXF1ZXN0RGF0YS5zZWFyY2g/LnZhbHVlID8/ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmRhdGFUYWJsZXNfbGVuZ3RoIHNlbGVjdFthcmlhLWNvbnRyb2xzPVwiZGF0YVRhYmxlXCJdJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChyZXF1ZXN0RGF0YS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLm9yZGVyKGhpc3Rvcnkuc3RhdGUub3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlYXJjaChoaXN0b3J5LnN0YXRlPy5kYXRhPy5zZWFyY2g/LnZhbHVlID8/ICcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckV2ZW50ID0geyBwbHVnaW46IHBsdWdpbiwgcmVxdWVzdERhdGE6IHJlcXVlc3REYXRhLCBpc0hpc3Rvcnk6IHBsdWdpbi5oaXN0b3J5LmlzSGlzdG9yeSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnRyaWdnZXIoJ3ByZVhoci5sb21iaXFkdCcsIHVzZXJFdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGx1Z2luLnNldHRpbmdzLnJvd3NBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHBsdWdpbi5idWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyh7IHJlcXVlc3RKc29uOiBKU09OLnN0cmluZ2lmeSh1c2VyRXZlbnQucmVxdWVzdERhdGEpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zZXR0aW5ncy5jYWxsYmFja3MuYWpheERhdGFMb2FkZWRDYWxsYmFjayhyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0RHJhdyA9IHJlc3BvbnNlLmRyYXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd3JhcHBlci5hdHRyKCdkYXRhLWRyYXcnLCBsYXRlc3REcmF3KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGhpc3Rvcnkuc3RhdGUuZGF0YS5zdGFydCAvIGhpc3Rvcnkuc3RhdGUuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaGlzdG9yeS5pc1JlZHJhdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucGFnZSgpICE9PSBwYWdlKSBpbnN0YW5jZS5wYWdlKHBhZ2UpLmRyYXcoJ3BhZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wYWdlLmxlbigpICE9PSBoaXN0b3J5LnN0YXRlLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UucGFnZS5sZW4oaGlzdG9yeS5zdGF0ZS5kYXRhLmxlbmd0aCkuZHJhdygncGFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmhpc3RvcnkuaXNSZWRyYXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGV4cG9ydEFjdGlvbihleHBvcnRBbGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRFeHBvcnRzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gVVJJKHBsdWdpbi5zZXR0aW5ncy5leHBvcnQuYXBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VhcmNoKHsgcmVxdWVzdEpzb246IHN0YXRlSnNvbiwgZXhwb3J0QWxsOiBleHBvcnRBbGwgfSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEV4cG9ydEJ1dHRvbnMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcGx1Z2luLnNldHRpbmdzLmV4cG9ydC50ZXh0QWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGV4cG9ydEFjdGlvbih0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcGx1Z2luLnNldHRpbmdzLmV4cG9ydC50ZXh0VmlzaWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBleHBvcnRBY3Rpb24oZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhVGFibGVzT3B0aW9ucy5idXR0b25zID09PSB1c2VEZWZhdWx0QnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMuYnV0dG9ucyA9IGdldEV4cG9ydEJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhVGFibGVzT3B0aW9ucy5idXR0b25zICYmIGRhdGFUYWJsZXNPcHRpb25zLmJ1dHRvbnMuZm9yRWFjaCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlc09wdGlvbnMuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmJ1dHRvbnMgPT09IHVzZURlZmF1bHRCdXR0b25zKSBidXR0b24uYnV0dG9ucyA9IGdldEV4cG9ydEJ1dHRvbnMoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmVycm9yc1NlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuZXJyTW9kZSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICQocGx1Z2luLmVsZW1lbnQpLm9uKCdlcnJvci5kdCcsIChlLCBzZXR0aW5ncywgdGVjaE5vdGUsIG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAkKHBsdWdpbi5zZXR0aW5ncy5lcnJvcnNTZWxlY3RvcikudGV4dChtZXNzYWdlKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUVsZW1lbnQgPSAkKHBsdWdpbi5lbGVtZW50KS5kYXRhVGFibGUoZGF0YVRhYmxlc09wdGlvbnMpO1xyXG4gICAgICAgICAgICBwbHVnaW4uZGF0YVRhYmxlQXBpID0gcGx1Z2luLmRhdGFUYWJsZUVsZW1lbnQuYXBpKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0b2dnbGUgYnV0dG9uIGNsaWNrIGxpc3RlbmVycyBpZiBjaGlsZCByb3dzIGFyZSBlbmFibGVkLlxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy5jaGlsZFJvd3NFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uZGF0YVRhYmxlRWxlbWVudC5vbihcclxuICAgICAgICAgICAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgICAgICcuJyArIHBsdWdpbi5zZXR0aW5ncy5jaGlsZFJvd09wdGlvbnMudG9nZ2xlQ2hpbGRSb3dCdXR0b25DbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0YVRhYmxlRWxlbWVudE9uQ2xpY2soKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd0VsZW1lbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmNoaWxkUm93T3B0aW9ucy5hc3luY0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRJdGVtSWQgPSBwYXJlbnRSb3dFbGVtZW50LmF0dHIoJ2RhdGEtY29udGVudGl0ZW1pZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmFwaVVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRJdGVtSWQ6IGNvbnRlbnRJdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4udG9nZ2xlQ2hpbGRSb3cocGFyZW50Um93RWxlbWVudCwgZGF0YS5jb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGRhdGEuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSb3dDb250ZW50ID0gJCgnW2RhdGEtcGFyZW50PVwiJyArIHBhcmVudFJvd0VsZW1lbnQuYXR0cignaWQnKSArICdcIl0nKS5odG1sKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLnRvZ2dsZUNoaWxkUm93KHBhcmVudFJvd0VsZW1lbnQsIGNoaWxkUm93Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRmV0Y2ggaXRlbXMgaWYgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpcyBlbmFibGVkLlxyXG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5zZXR0aW5ncy5zZXJ2ZXJTaWRlUGFnaW5nRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgcGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMucHJvZ3Jlc3NpdmVMb2FkaW5nRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmZldGNoUm93c1Byb2dyZXNzaXZlbHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogUmVtb3ZlcyB1bm5lY2Vzc2FyeSBEYXRhVGFibGVzIGFqYXggcGFyYW1ldGVycyBhbmQgdXBkYXRlcyBwcm9wZXJ0eSBuYW1lcyBhbmQgdmFsdWVzIHRvIG1hdGNoIHNlcnZlciBkYXRhXHJcbiAgICAgICAgKiBtb2RlbC5cclxuICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgZ2VuZXJhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIHBsdWdpbiB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDbGVhbmVkLXVwIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgY2xlYW5VcERhdGFUYWJsZXNBamF4UGFyYW1ldGVyczogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgLy8gUmVwbGFjaW5nIGNvbHVtbiBpbmRleCB0byBjb2x1bW4gbmFtZS5cclxuICAgICAgICAgICAgLy8gQWxzbyByZW5hbWUgcHJvcGVydGllcyBhbmQgdmFsdWVzIHRvIG1hdGNoIGJhY2stZW5kIGRhdGEgbW9kZWwuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5vcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJEYXRhID0gcGFyYW1ldGVycy5vcmRlcltpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gb3JkZXJEYXRhLmNvbHVtbjtcclxuICAgICAgICAgICAgICAgIG9yZGVyRGF0YS5jb2x1bW4gPSBwYXJhbWV0ZXJzLmNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBvcmRlckRhdGEuZGlyZWN0aW9uID0gb3JkZXJEYXRhLmRpciA9PT0gJ2FzYycgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJztcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmRlckRhdGEuZGlyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZW5kIG9ubHkgZmlsdGVyZWQgY29sdW1uIGRhdGEuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJhbWV0ZXJzLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHBhcmFtZXRlcnMuY29sdW1uc1tqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VhcmNoLnZhbHVlKSBjb2x1bW5GaWx0ZXJzLnB1c2goY29sdW1uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyYW1ldGVycy5jb2x1bW5GaWx0ZXJzID0gY29sdW1uRmlsdGVycztcclxuICAgICAgICAgICAgZGVsZXRlIHBhcmFtZXRlcnMuY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBnbG9iYWwgc2VhcmNoIHBhcmFtZXRlcnMgaWYgdGhlcmUgaXMgbm8gc2VhcmNoIHZhbHVlIGdpdmVuLlxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtZXRlcnMuc2VhcmNoLnZhbHVlKSBkZWxldGUgcGFyYW1ldGVycy5zZWFyY2g7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogU2hvd3Mgb3IgaGlkZXMgY2hpbGQgcm93IGZpbGxlZCB3aXRoIHRoZSBnaXZlbiBjb250ZW50LlxyXG4gICAgICAgICogQHBhcmFtIHtqUXVlcnl9IHBhcmVudFJvd0VsZW1lbnQgUGFyZW50IHJvdyBlbGVtZW50IHdoZXJlIHRoZSBjaGlsZCByb3cgd2lsbCBiZSBkaXNwbGF5ZWQuXHJcbiAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gY2hpbGRSb3dDb250ZW50IENvbnRlbnQgb2YgdGhlIGNoaWxkIHJvdy4gQSA8dHI+IHdyYXBwZXIgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdG9nZ2xlQ2hpbGRSb3c6IGZ1bmN0aW9uIChwYXJlbnRSb3dFbGVtZW50LCBjaGlsZFJvd0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUYWJsZVJvdyA9IHBsdWdpbi5kYXRhVGFibGVBcGkucm93KHBhcmVudFJvd0VsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGFUYWJsZVJvdy5jaGlsZC5pc1Nob3duKCkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUYWJsZVJvdy5jaGlsZC5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFyZW50Um93RWxlbWVudC5yZW1vdmVDbGFzcyhwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVSb3cuY2hpbGQoY2hpbGRSb3dDb250ZW50LCBwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93Q2xhc3NOYW1lKS5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFyZW50Um93RWxlbWVudC5hZGRDbGFzcyhwbHVnaW4uc2V0dGluZ3MuY2hpbGRSb3dPcHRpb25zLmNoaWxkUm93VmlzaWJsZUNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIEZldGNoZXMgdGhlIHJvd3MgZnJvbSB0aGUgQVBJIHVzaW5nIHByb2dyZXNzaXZlIGxvYWRpbmcuXHJcbiAgICAgICAgKi9cclxuICAgICAgICBmZXRjaFJvd3NQcm9ncmVzc2l2ZWx5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLnByb2dyZXNzaXZlTG9hZGluZ0VuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5kYXRhVGFibGVBcGkucHJvY2Vzc2luZyh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiBwbHVnaW4uc2V0dGluZ3MucXVlcnlJZCxcclxuICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcGx1Z2luLnNldHRpbmdzLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgIGFwaVVybDogcGx1Z2luLnNldHRpbmdzLnJvd3NBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICBpdGVtQ2FsbGJhY2s6IGZ1bmN0aW9uIChpZCwgZGF0YSwgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMuaXRlbUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZUxvYWRpbmdPcHRpb25zLml0ZW1DYWxsYmFjayhpZCwgZGF0YSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUFwaS5yb3cuYWRkKGRhdGEpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmaW5pc2hlZENhbGxiYWNrOiBmdW5jdGlvbiAoc3VjY2VzcywgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMuZmluaXNoZWRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVMb2FkaW5nT3B0aW9ucy5maW5pc2hlZENhbGxiYWNrKHN1Y2Nlc3MsIHRvdGFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5kYXRhVGFibGVBcGkucHJvY2Vzc2luZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcGx1Z2luLnByb2dyZXNzaXZlTG9hZCgkLmV4dGVuZCh7fSwgcGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlTG9hZGluZ09wdGlvbnMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIEJ1aWxkcyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0aGF0IGluY2x1ZGVzIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBzdHJpbmdcclxuICAgICAgICAqIHBhcmFtZXRlcnMuXHJcbiAgICAgICAgKiBUaGUgb3JpZ2luYWwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYXJlIHRyYWRpdGlvbmFsbHkgZW5jb2RlZCB0byBwcmVzZXJ2ZSB0aGVpciBxdWVyeSBzdHJpbmcga2V5cyxcclxuICAgICAgICAqIHdoaWxlIHRoZSBvbmVzIHVzZWQgYnkgRGF0YVRhYmxlcyBhcmVuJ3QuXHJcbiAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBEYXRhIHRoYXQgbmVlZHMgdG8gYmUgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgVVJMIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICogQHJldHVybnMge29iamVjdH0gTWVyZ2VkIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgYnVpbGRRdWVyeVN0cmluZ1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgb2YgdGhlIGluaXRpYWwgcXVlcnkgc3RyaW5nOlxyXG4gICAgICAgICAgICAvLyBUcmFkaXRpb25hbCBlbmNvZGluZyBlbnN1cmVzIHRoYXQgaWYgYSBrZXkgaGFzIG11bHRpcGxlIHZhbHVlcyAoZS5nLiBcIj9uYW1lPXZhbHVlMSZuYW1lPXZhbHVlMlwiKSxcclxuICAgICAgICAgICAgLy8gdGhlbiB0aGUga2V5IHdvbid0IGJlIGNoYW5nZWQgdG8gXCJuYW1lW11cIi5cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxRdWVyeVN0cmluZ0VuY29kZWQgPSAkLnBhcmFtKHRoaXMub3JpZ2luYWxRdWVyeVN0cmluZ1BhcmFtZXRlcnMsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChvcmlnaW5hbFF1ZXJ5U3RyaW5nRW5jb2RlZCA/IChvcmlnaW5hbFF1ZXJ5U3RyaW5nRW5jb2RlZCArICcmJykgOiAnJykgKyAkLnBhcmFtKGRhdGEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogTG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgZm9yIGxvYWRpbmcgcm93cyBmcm9tIHRoZSBBUEkuIFRoZSByZXN1bHQgaXMgYWNjZXNzaWJsZSB1c2luZyB0aGUgY2FsbGJhY2suXHJcbiAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2tpcCBOdW1iZXIgb2YgaXRlbXMgdG8gYmUgc2tpcHBlZCBieSB0aGUgQVBJLlxyXG4gICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlIEFQSSBjYWxsIChlLmcuIEFQSSBVUkwsIGRhdGEgcHJvdmlkZXIpLlxyXG4gICAgICAgICogQHBhcmFtIHtjYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZm9yIHJldHVybmluZyByb3dzLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgbG9hZFJvd3M6IGZ1bmN0aW9uIChza2lwLCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBvcHRpb25zLmFwaVVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHBsdWdpbi5idWlsZFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlJZDogb3B0aW9ucy5xdWVyeUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogb3B0aW9ucy5iYXRjaFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBvcHRpb25zLmRhdGFQcm92aWRlcixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayghcmVzcG9uc2UuZXJyb3IsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBBZGp1c3RzIGRhdGF0YWJsZSBjb2x1bW5zLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgYWRqdXN0Q29sdW1uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gcHJvcGVybHkgYWRqdXN0IGNvbHVtbiB3aWR0aHMuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLmRhdGFUYWJsZUFwaS5jb2x1bW5zLmFkanVzdCgpO1xyXG4gICAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBMb3ctbGV2ZWwgZnVuY3Rpb25hbGl0eSBvZiBwcm9ncmVzc2l2ZSBsb2FkaW5nLiBJdCB3aWxsIGZldGNoIGNvbnRlbnQgc2hhcGVzIGZyb20gdGhlIGdpdmVuIEFQSS5cclxuICAgICAgICAqIFRoZSBzaGFwZXMgd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgY2FsbGJhY2tzLlxyXG4gICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgUHJvZ3Jlc3NpdmUgbG9hZGluZyBvcHRpb25zIGluY2x1ZGluZyBBUEkgVVJMIGFuZCBjYWxsYmFja3MuXHJcbiAgICAgICAgKi9cclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBza2lwID0gb3B0aW9ucy5za2lwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3VjY2VzcywgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSByZXNwb25zZS5kYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmF0Y2hDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJhdGNoQ2FsbGJhY2socmVzcG9uc2UsIHRvdGFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgb3B0aW9ucy5pdGVtQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3BvbnNlLmRhdGEsIChpbmRleCwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaXRlbUNhbGxiYWNrKGluZGV4LCB2YWx1ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY291bnQgPj0gb3B0aW9ucy5iYXRjaFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCArPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkUm93cyhza2lwLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZmluaXNoZWRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbmlzaGVkQ2FsbGJhY2sodHJ1ZSwgdG90YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5maW5pc2hlZENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZmluaXNoZWRDYWxsYmFjayhmYWxzZSwgdG90YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHBsdWdpbi5sb2FkUm93cyhza2lwLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgICQuZm5bcGx1Z2luTmFtZV0gPSBmdW5jdGlvbiBwbHVnaW5OYW1lRnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIC8vIFJldHVybiBudWxsIGlmIHRoZSBlbGVtZW50IHF1ZXJ5IGlzIGludmFsaWQuXHJcbiAgICAgICAgaWYgKCF0aGlzIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gXCJtYXBcIiBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXR1cm4gdGhlIGFscmVhZHkgZXhpc3Rpbmcgb3IgY3VycmVudGx5IGluaXRpYWxpemVkIHBsdWdpbiBpbnN0YW5jZXMuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIHBsdWdpbk1hcEZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvLyBJZiBcIm9wdGlvbnNcIiBpcyBkZWZpbmVkLCBidXQgdGhlIHBsdWdpbiBpcyBub3QgaW5zdGFudGlhdGVkIG9uIHRoaXMgZWxlbWVudCAuLi5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgISQuZGF0YSh0aGlzLCAncGx1Z2luXycgKyBwbHVnaW5OYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gLi4uIHRoZW4gY3JlYXRlIGEgcGx1Z2luIGluc3RhbmNlIC4uLlxyXG4gICAgICAgICAgICAgICAgJC5kYXRhKHRoaXMsICdwbHVnaW5fJyArIHBsdWdpbk5hbWUsIG5ldyBQbHVnaW4oJCh0aGlzKSwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAuLi4gYW5kIHRoZW4gcmV0dXJuIHRoZSBwbHVnaW4gaW5zdGFuY2UsIHdoaWNoIG1pZ2h0IGJlIG51bGxcclxuICAgICAgICAgICAgLy8gaWYgdGhlIHBsdWdpbiBpcyBub3QgaW5zdGFudGlhdGVkIG9uIHRoaXMgZWxlbWVudCBhbmQgJ29wdGlvbnMnIGlzIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgcmV0dXJuICQuZGF0YSh0aGlzLCAncGx1Z2luXycgKyBwbHVnaW5OYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn0pKGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCwgd2luZG93Lmhpc3RvcnkpO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBLENBQUMsU0FBU0EsZ0JBQVQsQ0FBMEJDLENBQTFCLEVBQTZCQyxNQUE3QixFQUFxQ0MsUUFBckMsRUFBK0NDLE9BQS9DLEVBQXdEO0VBQ3JELElBQU1DLFVBQVUsR0FBRyxtQkFBbkI7RUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxtQkFBMUI7RUFFQSxJQUFNQyxRQUFRLEdBQUc7SUFDYkMsaUJBQWlCLEVBQUU7TUFDZkMsU0FBUyxFQUFFLElBREk7TUFFZkMsTUFBTSxFQUFFLElBRk87TUFHZkMsVUFBVSxFQUFFLElBSEc7TUFJZkMsSUFBSSxFQUFFLElBSlM7TUFLZkMsWUFBWSxFQUFFLElBTEM7TUFNZkMsT0FBTyxFQUFFLElBTk07TUFPZkMsR0FBRyxFQUFFLDZDQUNELDJGQURDLEdBRUQsMENBRkMsR0FHRCwwQ0FWVztNQVdmQyxPQUFP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 \ No newline at end of file diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.css b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.css deleted file mode 100644 index f0f940369..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.css +++ /dev/null @@ -1,195 +0,0 @@ -@keyframes dtb-spinner { - 100% { - transform: rotate(360deg); - } -} -@-o-keyframes dtb-spinner { - 100% { - -o-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@-ms-keyframes dtb-spinner { - 100% { - -ms-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@-webkit-keyframes dtb-spinner { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@-moz-keyframes dtb-spinner { - 100% { - -moz-transform: rotate(360deg); - transform: rotate(360deg); - } -} -div.dt-button-info { - position: fixed; - top: 50%; - left: 50%; - width: 400px; - margin-top: -100px; - margin-left: -200px; - background-color: white; - border: 2px solid #111; - box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); - border-radius: 3px; - text-align: center; - z-index: 21; -} -div.dt-button-info h2 { - padding: 0.5em; - margin: 0; - font-weight: normal; - border-bottom: 1px solid #ddd; - background-color: #f3f3f3; -} -div.dt-button-info > div { - padding: 1em; -} - -div.dt-button-collection-title { - text-align: center; - padding: 0.3em 0 0.5em; - font-size: 0.9em; -} - -div.dt-button-collection-title:empty { - display: none; -} - -div.dt-button-collection { - position: absolute; - z-index: 2001; -} -div.dt-button-collection div.dropdown-menu { - display: block; - z-index: 2002; - min-width: 100%; -} -div.dt-button-collection div.dt-button-collection-title { - background-color: white; - border: 1px solid rgba(0, 0, 0, 0.15); -} -div.dt-button-collection.fixed { - position: fixed; - top: 50%; - left: 50%; - margin-left: -75px; - border-radius: 0; -} -div.dt-button-collection.fixed.two-column { - margin-left: -200px; -} -div.dt-button-collection.fixed.three-column { - margin-left: -225px; -} -div.dt-button-collection.fixed.four-column { - margin-left: -300px; -} -div.dt-button-collection > :last-child { - display: block !important; - -webkit-column-gap: 8px; - -moz-column-gap: 8px; - -ms-column-gap: 8px; - -o-column-gap: 8px; - column-gap: 8px; -} -div.dt-button-collection > :last-child > * { - -webkit-column-break-inside: avoid; - break-inside: avoid; -} -div.dt-button-collection.two-column { - width: 400px; -} -div.dt-button-collection.two-column > :last-child { - padding-bottom: 1px; - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; -} -div.dt-button-collection.three-column { - width: 450px; -} -div.dt-button-collection.three-column > :last-child { - padding-bottom: 1px; - -webkit-column-count: 3; - -moz-column-count: 3; - -ms-column-count: 3; - -o-column-count: 3; - column-count: 3; -} -div.dt-button-collection.four-column { - width: 600px; -} -div.dt-button-collection.four-column > :last-child { - padding-bottom: 1px; - -webkit-column-count: 4; - -moz-column-count: 4; - -ms-column-count: 4; - -o-column-count: 4; - column-count: 4; -} -div.dt-button-collection .dt-button { - border-radius: 0; -} -div.dt-button-collection.fixed { - max-width: none; -} -div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after { - display: none; -} - -div.dt-button-background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 999; -} - -@media screen and (max-width: 767px) { - div.dt-buttons { - float: none; - width: 100%; - text-align: center; - margin-bottom: 0.5em; - } - div.dt-buttons a.btn { - float: none; - } -} -div.dt-buttons button.btn.processing, -div.dt-buttons div.btn.processing, -div.dt-buttons a.btn.processing { - color: rgba(0, 0, 0, 0.2); -} -div.dt-buttons button.btn.processing:after, -div.dt-buttons div.btn.processing:after, -div.dt-buttons a.btn.processing:after { - position: absolute; - top: 50%; - left: 50%; - width: 16px; - height: 16px; - margin: -8px 0 0 -8px; - box-sizing: border-box; - display: block; - content: " "; - border: 2px solid #282828; - border-radius: 50%; - border-left-color: transparent; - border-right-color: transparent; - animation: dtb-spinner 1500ms infinite linear; - -o-animation: dtb-spinner 1500ms infinite linear; - -ms-animation: dtb-spinner 1500ms infinite linear; - -webkit-animation: dtb-spinner 1500ms infinite linear; - -moz-animation: dtb-spinner 1500ms infinite linear; -} diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.min.css b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.min.css deleted file mode 100644 index 1e79cc78c..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/buttons.bootstrap4.min.css +++ /dev/null @@ -1 +0,0 @@ -@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}div.dt-button-collection{position:absolute;z-index:2001}div.dt-button-collection div.dropdown-menu{display:block;z-index:2002;min-width:100%}div.dt-button-collection div.dt-button-collection-title{background-color:white;border:1px solid rgba(0, 0, 0, 0.15)}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.fixed{max-width:none}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.css b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.css deleted file mode 100644 index cf9763be7..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.css +++ /dev/null @@ -1,291 +0,0 @@ -@charset "UTF-8"; -td.dt-control { - background: url("https://www.datatables.net/examples/resources/details_open.png") no-repeat center center; - cursor: pointer; -} - -tr.dt-hasChild td.dt-control { - background: url("https://www.datatables.net/examples/resources/details_close.png") no-repeat center center; -} - -table.dataTable th.dt-left, -table.dataTable td.dt-left { - text-align: left; -} -table.dataTable th.dt-center, -table.dataTable td.dt-center, -table.dataTable td.dataTables_empty { - text-align: center; -} -table.dataTable th.dt-right, -table.dataTable td.dt-right { - text-align: right; -} -table.dataTable th.dt-justify, -table.dataTable td.dt-justify { - text-align: justify; -} -table.dataTable th.dt-nowrap, -table.dataTable td.dt-nowrap { - white-space: nowrap; -} -table.dataTable thead th.dt-head-left, -table.dataTable thead td.dt-head-left, -table.dataTable tfoot th.dt-head-left, -table.dataTable tfoot td.dt-head-left { - text-align: left; -} -table.dataTable thead th.dt-head-center, -table.dataTable thead td.dt-head-center, -table.dataTable tfoot th.dt-head-center, -table.dataTable tfoot td.dt-head-center { - text-align: center; -} -table.dataTable thead th.dt-head-right, -table.dataTable thead td.dt-head-right, -table.dataTable tfoot th.dt-head-right, -table.dataTable tfoot td.dt-head-right { - text-align: right; -} -table.dataTable thead th.dt-head-justify, -table.dataTable thead td.dt-head-justify, -table.dataTable tfoot th.dt-head-justify, -table.dataTable tfoot td.dt-head-justify { - text-align: justify; -} -table.dataTable thead th.dt-head-nowrap, -table.dataTable thead td.dt-head-nowrap, -table.dataTable tfoot th.dt-head-nowrap, -table.dataTable tfoot td.dt-head-nowrap { - white-space: nowrap; -} -table.dataTable tbody th.dt-body-left, -table.dataTable tbody td.dt-body-left { - text-align: left; -} -table.dataTable tbody th.dt-body-center, -table.dataTable tbody td.dt-body-center { - text-align: center; -} -table.dataTable tbody th.dt-body-right, -table.dataTable tbody td.dt-body-right { - text-align: right; -} -table.dataTable tbody th.dt-body-justify, -table.dataTable tbody td.dt-body-justify { - text-align: justify; -} -table.dataTable tbody th.dt-body-nowrap, -table.dataTable tbody td.dt-body-nowrap { - white-space: nowrap; -} - -table.dataTable { - clear: both; - margin-top: 6px !important; - margin-bottom: 6px !important; - max-width: none !important; - border-collapse: separate !important; - border-spacing: 0; -} -table.dataTable td, -table.dataTable th { - -webkit-box-sizing: content-box; - box-sizing: content-box; -} -table.dataTable td.dataTables_empty, -table.dataTable th.dataTables_empty { - text-align: center; -} -table.dataTable.nowrap th, -table.dataTable.nowrap td { - white-space: nowrap; -} - -div.dataTables_wrapper div.dataTables_length label { - font-weight: normal; - text-align: left; - white-space: nowrap; -} -div.dataTables_wrapper div.dataTables_length select { - width: auto; - display: inline-block; -} -div.dataTables_wrapper div.dataTables_filter { - text-align: right; -} -div.dataTables_wrapper div.dataTables_filter label { - font-weight: normal; - white-space: nowrap; - text-align: left; -} -div.dataTables_wrapper div.dataTables_filter input { - margin-left: 0.5em; - display: inline-block; - width: auto; -} -div.dataTables_wrapper div.dataTables_info { - padding-top: 0.85em; -} -div.dataTables_wrapper div.dataTables_paginate { - margin: 0; - white-space: nowrap; - text-align: right; -} -div.dataTables_wrapper div.dataTables_paginate ul.pagination { - margin: 2px 0; - white-space: nowrap; - justify-content: flex-end; -} -div.dataTables_wrapper div.dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 200px; - margin-left: -100px; - margin-top: -26px; - text-align: center; - padding: 1em 0; -} - -table.dataTable > thead > tr > th:active, -table.dataTable > thead > tr > td:active { - outline: none; -} -table.dataTable > thead > tr > th:not(.sorting_disabled), -table.dataTable > thead > tr > td:not(.sorting_disabled) { - padding-right: 30px; -} -table.dataTable > thead .sorting, -table.dataTable > thead .sorting_asc, -table.dataTable > thead .sorting_desc, -table.dataTable > thead .sorting_asc_disabled, -table.dataTable > thead .sorting_desc_disabled { - cursor: pointer; - position: relative; -} -table.dataTable > thead .sorting:before, table.dataTable > thead .sorting:after, -table.dataTable > thead .sorting_asc:before, -table.dataTable > thead .sorting_asc:after, -table.dataTable > thead .sorting_desc:before, -table.dataTable > thead .sorting_desc:after, -table.dataTable > thead .sorting_asc_disabled:before, -table.dataTable > thead .sorting_asc_disabled:after, -table.dataTable > thead .sorting_desc_disabled:before, -table.dataTable > thead .sorting_desc_disabled:after { - position: absolute; - bottom: 0.9em; - display: block; - opacity: 0.3; -} -table.dataTable > thead .sorting:before, -table.dataTable > thead .sorting_asc:before, -table.dataTable > thead .sorting_desc:before, -table.dataTable > thead .sorting_asc_disabled:before, -table.dataTable > thead .sorting_desc_disabled:before { - right: 1em; - content: "↑"; -} -table.dataTable > thead .sorting:after, -table.dataTable > thead .sorting_asc:after, -table.dataTable > thead .sorting_desc:after, -table.dataTable > thead .sorting_asc_disabled:after, -table.dataTable > thead .sorting_desc_disabled:after { - right: 0.5em; - content: "↓"; -} -table.dataTable > thead .sorting_asc:before, -table.dataTable > thead .sorting_desc:after { - opacity: 1; -} -table.dataTable > thead .sorting_asc_disabled:before, -table.dataTable > thead .sorting_desc_disabled:after { - opacity: 0; -} - -div.dataTables_scrollHead table.dataTable { - margin-bottom: 0 !important; -} - -div.dataTables_scrollBody table { - border-top: none; - margin-top: 0 !important; - margin-bottom: 0 !important; -} -div.dataTables_scrollBody table thead .sorting:before, -div.dataTables_scrollBody table thead .sorting_asc:before, -div.dataTables_scrollBody table thead .sorting_desc:before, -div.dataTables_scrollBody table thead .sorting:after, -div.dataTables_scrollBody table thead .sorting_asc:after, -div.dataTables_scrollBody table thead .sorting_desc:after { - display: none; -} -div.dataTables_scrollBody table tbody tr:first-child th, -div.dataTables_scrollBody table tbody tr:first-child td { - border-top: none; -} - -div.dataTables_scrollFoot > .dataTables_scrollFootInner { - box-sizing: content-box; -} -div.dataTables_scrollFoot > .dataTables_scrollFootInner > table { - margin-top: 0 !important; - border-top: none; -} - -@media screen and (max-width: 767px) { - div.dataTables_wrapper div.dataTables_length, -div.dataTables_wrapper div.dataTables_filter, -div.dataTables_wrapper div.dataTables_info, -div.dataTables_wrapper div.dataTables_paginate { - text-align: center; - } - div.dataTables_wrapper div.dataTables_paginate ul.pagination { - justify-content: center !important; - } -} -table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) { - padding-right: 20px; -} -table.dataTable.table-sm .sorting:before, -table.dataTable.table-sm .sorting_asc:before, -table.dataTable.table-sm .sorting_desc:before { - top: 5px; - right: 0.85em; -} -table.dataTable.table-sm .sorting:after, -table.dataTable.table-sm .sorting_asc:after, -table.dataTable.table-sm .sorting_desc:after { - top: 5px; -} - -table.table-bordered.dataTable { - border-right-width: 0; -} -table.table-bordered.dataTable th, -table.table-bordered.dataTable td { - border-left-width: 0; -} -table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, -table.table-bordered.dataTable td:last-child, -table.table-bordered.dataTable td:last-child { - border-right-width: 1px; -} -table.table-bordered.dataTable tbody th, -table.table-bordered.dataTable tbody td { - border-bottom-width: 0; -} - -div.dataTables_scrollHead table.table-bordered { - border-bottom-width: 0; -} - -div.table-responsive > div.dataTables_wrapper > div.row { - margin: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child { - padding-left: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child { - padding-right: 0; -} diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.min.css b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.min.css deleted file mode 100644 index 1b6ee2776..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-css/dataTables.bootstrap4.min.css +++ /dev/null @@ -1 +0,0 @@ -td.dt-control{background:url("https://www.datatables.net/examples/resources/details_open.png") no-repeat center center;cursor:pointer}tr.dt-hasChild td.dt-control{background:url("https://www.datatables.net/examples/resources/details_close.png") no-repeat center center}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:.85em}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>thead>tr>th:not(.sorting_disabled),table.dataTable>thead>tr>td:not(.sorting_disabled){padding-right:30px}table.dataTable>thead .sorting,table.dataTable>thead .sorting_asc,table.dataTable>thead .sorting_desc,table.dataTable>thead .sorting_asc_disabled,table.dataTable>thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{position:absolute;bottom:.9em;display:block;opacity:.3}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:before{right:1em;content:"↑"}table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:after{right:.5em;content:"↓"}table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:after{opacity:1}table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0} diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.js b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.js deleted file mode 100644 index 4f8ccd502..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.js +++ /dev/null @@ -1,68 +0,0 @@ -/*! Bootstrap integration for DataTables' Buttons - * ©2016 SpryMedia Ltd - datatables.net/license - */ - -(function( factory ){ - if ( typeof define === 'function' && define.amd ) { - // AMD - define( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) { - return factory( $, window, document ); - } ); - } - else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = function (root, $) { - if ( ! root ) { - root = window; - } - - if ( ! $ || ! $.fn.dataTable ) { - $ = require('datatables.net-bs4')(root, $).$; - } - - if ( ! $.fn.dataTable.Buttons ) { - require('datatables.net-buttons')(root, $); - } - - return factory( $, root, root.document ); - }; - } - else { - // Browser - factory( jQuery, window, document ); - } -}(function( $, window, document, undefined ) { -'use strict'; -var DataTable = $.fn.dataTable; - -$.extend( true, DataTable.Buttons.defaults, { - dom: { - container: { - className: 'dt-buttons btn-group flex-wrap' - }, - button: { - className: 'btn btn-secondary' - }, - collection: { - tag: 'div', - className: 'dropdown-menu', - button: { - tag: 'a', - className: 'dt-button dropdown-item', - active: 'active', - disabled: 'disabled' - } - } - }, - buttonCreated: function ( config, button ) { - return config.buttons ? - $('
').append(button) : - button; - } -} ); - -DataTable.ext.buttons.collection.className += ' dropdown-toggle'; -DataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right'; - -return DataTable.Buttons; -})); diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.min.js b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.min.js deleted file mode 100644 index 3ecb7b502..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/buttons.bootstrap4.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - Bootstrap integration for DataTables' Buttons - ©2016 SpryMedia Ltd - datatables.net/license -*/ -(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,c){a||(a=window);if(!c||!c.fn.dataTable)c=require("datatables.net-bs4")(a,c).$;c.fn.dataTable.Buttons||require("datatables.net-buttons")(a,c);return b(c,a,a.document)}:b(jQuery,window,document)})(function(b){var a=b.fn.dataTable;b.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group flex-wrap"}, -button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}}},buttonCreated:function(a,d){return a.buttons?b('
').append(d):d}});a.ext.buttons.collection.className+=" dropdown-toggle";a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right";return a.Buttons}); diff --git a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/dataTables.bootstrap4.js b/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/dataTables.bootstrap4.js deleted file mode 100644 index bb7b7738c..000000000 --- a/Lombiq.DataTables/wwwroot/vendors/datatables.net-bs4-js/dataTables.bootstrap4.js +++ /dev/null @@ -1,184 +0,0 @@ -/*! DataTables Bootstrap 4 integration - * ©2011-2017 SpryMedia Ltd - datatables.net/license - */ - -/** - * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and - * DataTables 1.10 or newer. - * - * This file sets the defaults and adds options to DataTables to style its - * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap - * for further information. - */ -(function( factory ){ - if ( typeof define === 'function' && define.amd ) { - // AMD - define( ['jquery', 'datatables.net'], function ( $ ) { - return factory( $, window, document ); - } ); - } - else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = function (root, $) { - if ( ! root ) { - root = window; - } - - if ( ! $ || ! $.fn.dataTable ) { - // Require DataTables, which attaches to jQuery, including - // jQuery if needed and have a $ property so we can access the - // jQuery object that is used - $ = require('datatables.net')(root, $).$; - } - - return factory( $, root, root.document ); - }; - } - else { - // Browser - factory( jQuery, window, document ); - } -}(function( $, window, document, undefined ) { -'use strict'; -var DataTable = $.fn.dataTable; - - -/* Set the defaults for DataTables initialisation */ -$.extend( true, DataTable.defaults, { - dom: - "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", - renderer: 'bootstrap' -} ); - - -/* Default class modification */ -$.extend( DataTable.ext.classes, { - sWrapper: "dataTables_wrapper dt-bootstrap4", - sFilterInput: "form-control form-control-sm", - sLengthSelect: "custom-select custom-select-sm form-control form-control-sm", - sProcessing: "dataTables_processing card", - sPageButton: "paginate_button page-item" -} ); - - -/* Bootstrap paging button renderer */ -DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { - var api = new DataTable.Api( settings ); - var classes = settings.oClasses; - var lang = settings.oLanguage.oPaginate; - var aria = settings.oLanguage.oAria.paginate || {}; - var btnDisplay, btnClass, counter=0; - - var attach = function( container, buttons ) { - var i, ien, node, button; - var clickHandler = function ( e ) { - e.preventDefault(); - if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { - api.page( e.data.action ).draw( 'page' ); - } - }; - - for ( i=0, ien=buttons.length ; i 0 ? - '' : ' disabled'); - break; - - case 'previous': - btnDisplay = lang.sPrevious; - btnClass = button + (page > 0 ? - '' : ' disabled'); - break; - - case 'next': - btnDisplay = lang.sNext; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - case 'last': - btnDisplay = lang.sLast; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - default: - btnDisplay = button + 1; - btnClass = page === button ? - 'active' : ''; - break; - } - - if ( btnDisplay ) { - node = $('
  • ', { - 'class': classes.sPageButton+' '+btnClass, - 'id': idx === 0 && typeof button === 'string' ? - settings.sTableId +'_'+ button : - null - } ) - .append( $('', { - 'href': '#', - 'aria-controls': settings.sTableId, - 'aria-label': aria[ button ], - 'data-dt-idx': counter, - 'tabindex': settings.iTabIndex, - 'class': 'page-link' - } ) - .html( btnDisplay ) - ) - .appendTo( container ); - - settings.oApi._fnBindAction( - node, {action: button}, clickHandler - ); - - counter++; - } - } - } - }; - - // IE9 throws an 'unknown error' if document.activeElement is used - // inside an iframe or frame. - var activeEl; - - try { - // Because this approach is destroying and recreating the paging - // elements, focus is lost on the select button which is bad for - // accessibility. So we want to restore focus once the draw has - // completed - activeEl = $(host).find(document.activeElement).data('dt-idx'); - } - catch (e) {} - - attach( - $(host).empty().html('